From 1a096dba7c779b39410eaf2c2d6afbf63682351b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20de=20la=20Martini=C3=A8re?= Date: Fri, 15 Mar 2024 14:03:49 +0100 Subject: [PATCH] Tauri This is a half-working copy of Museeks ported to Tauri 2.0. This is highly experimental, many things are broken. Lots of non-idiomatic Rust (and React actually). ```bash yarn cargo test --manifest-path src-tauri/Cargo.toml yarn tauri dev ``` --- .eslintignore | 2 +- .eslintrc.js => .eslintrc.cjs | 5 +- .github/workflows/build.yml | 168 +- .gitignore | 77 +- .vscode/extensions.json | 5 +- electron-builder.yml | 68 - electron.vite.config.ts | 46 - index.html | 14 + package.json | 102 +- postcss.config.mjs | 1 + public/museeks_logo.png | Bin 0 -> 132283 bytes src-tauri/.gitignore | 4 + src-tauri/Cargo.lock | 6929 +++++++++++++++++ src-tauri/Cargo.toml | 47 + src-tauri/Info.plist | 10 + src-tauri/build.rs | 43 + src-tauri/capabilities/main.json | 45 + src-tauri/icons/128x128.png | Bin 0 -> 11705 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 26809 bytes src-tauri/icons/32x32.png | Bin 0 -> 2088 bytes src-tauri/icons/Square107x107Logo.png | Bin 0 -> 9148 bytes src-tauri/icons/Square142x142Logo.png | Bin 0 -> 13406 bytes src-tauri/icons/Square150x150Logo.png | Bin 0 -> 14204 bytes src-tauri/icons/Square284x284Logo.png | Bin 0 -> 29996 bytes src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1901 bytes src-tauri/icons/Square310x310Logo.png | Bin 0 -> 33196 bytes src-tauri/icons/Square44x44Logo.png | Bin 0 -> 3062 bytes src-tauri/icons/Square71x71Logo.png | Bin 0 -> 5661 bytes src-tauri/icons/Square89x89Logo.png | Bin 0 -> 7386 bytes src-tauri/icons/StoreLogo.png | Bin 0 -> 3563 bytes src-tauri/icons/app-icon-no-margin.png | Bin 0 -> 132283 bytes src-tauri/icons/app-icon.png | Bin 0 -> 117541 bytes src-tauri/icons/icon.icns | Bin 0 -> 307079 bytes src-tauri/icons/icon.ico | Bin 0 -> 41189 bytes src-tauri/icons/icon.png | Bin 0 -> 58959 bytes src-tauri/src/libs/error.rs | 50 + src-tauri/src/libs/events.rs | 23 + src-tauri/src/libs/mod.rs | 3 + src-tauri/src/libs/utils.rs | 114 + src-tauri/src/main.rs | 59 + src-tauri/src/plugins/app_menu.rs | 173 + src-tauri/src/plugins/config.rs | 183 + src-tauri/src/plugins/cover.rs | 91 + src-tauri/src/plugins/database.rs | 581 ++ src-tauri/src/plugins/debug.rs | 13 + src-tauri/src/plugins/default_view.rs | 38 + src-tauri/src/plugins/macos.rs | 27 + src-tauri/src/plugins/mod.rs | 31 + src-tauri/src/plugins/shell_extension.rs | 112 + src-tauri/src/plugins/sleepblocker.rs | 58 + src-tauri/tauri.conf.json | 48 + src/{shared => }/assets/icons/player-next.svg | 0 .../assets/icons/player-pause.svg | 0 src/{shared => }/assets/icons/player-play.svg | 0 .../assets/icons/player-previous.svg | 0 .../assets/icons/player-queue.svg | 0 .../assets/icons/player-repeat-one.svg | 0 .../assets/icons/player-repeat.svg | 0 .../assets/icons/player-shuffle.svg | 0 .../icons/windows/backward-disabled.ico | Bin .../assets/icons/windows/backward.ico | Bin .../assets/icons/windows/forward-disabled.ico | Bin .../assets/icons/windows/forward.ico | Bin .../assets/icons/windows/pause-disabled.ico | Bin .../assets/icons/windows/pause.ico | Bin .../assets/icons/windows/play-disabled.ico | Bin .../assets/icons/windows/play.ico | Bin src/{shared => }/assets/logos/museeks-128.png | Bin .../assets/logos/museeks-128@2x.png | Bin src/{shared => }/assets/logos/museeks-32.png | Bin .../assets/logos/museeks-32@2x.png | Bin src/{shared => }/assets/logos/museeks-48.png | Bin .../assets/logos/museeks-48@2x.png | Bin src/{shared => }/assets/logos/museeks-64.png | Bin .../assets/logos/museeks-64@2x.png | Bin .../assets/logos/museeks-tray-dark.png | Bin .../assets/logos/museeks-tray-dark@2x.png | Bin .../assets/logos/museeks-tray.ico | Bin .../assets/logos/museeks-tray.png | Bin src/{shared => }/assets/logos/museeks.icns | Bin src/{shared => }/assets/logos/museeks.ico | Bin src/{shared => }/assets/logos/museeks.png | Bin src/{shared => }/assets/placeholder.png | Bin .../AudioOutputSelect/AudioOutputSelect.tsx | 27 +- .../components/Cover/Cover.module.css | 10 +- src/components/Cover/Cover.tsx | 37 + .../DropzoneImport/DropzoneImport.module.css | 0 .../DropzoneImport/DropzoneImport.tsx | 66 + .../components/Events/AppEvents.tsx | 34 +- .../components/Events/GlobalKeyBindings.tsx | 2 +- .../components/Events/IPCNavigationEvents.tsx | 25 +- .../components/Events/IPCPlayerEvents.tsx | 14 +- src/components/Events/LibraryEvents.tsx | 29 + .../components/Events/MediaSessionEvents.tsx | 33 +- .../components/Events/PlayerEvents.tsx | 55 +- .../components/Footer/Footer.module.css | 0 .../components/Footer/Footer.tsx | 6 +- .../components/Header/Header.module.css | 19 +- src/components/Header/Header.tsx | 54 + .../PlayerControls/PlayerControls.module.css | 1 - .../PlayerControls/PlayerControls.tsx | 5 +- .../PlayerOptionsButtons/ButtonRepeat.tsx | 28 +- .../PlayerOptionsButtons/ButtonShuffle.tsx | 1 + .../PlayerOptionsButtons/common.module.css | 2 +- .../PlayingBar/PlayingBar.module.css | 4 +- .../components/PlayingBar/PlayingBar.tsx | 17 +- .../PlayingBarInfo/PlayingBarInfo.module.css | 4 + .../PlayingBarInfo/PlayingBarInfo.tsx | 9 +- .../PlayingIndicator.module.css | 11 - .../PlayingIndicator/PlayingIndicator.tsx | 3 +- .../PlaylistsNav/PlaylistsNav.module.css | 0 .../components/PlaylistsNav/PlaylistsNav.tsx | 92 +- .../PlaylistsNavLink.module.css | 0 .../PlaylistsNavLink/PlaylistsNavLink.tsx | 4 +- .../ProgressBar/ProgressBar.module.css | 13 + .../components/ProgressBar/ProgressBar.tsx | 12 +- .../components/Queue/Queue.module.css | 1 + src/{renderer => }/components/Queue/Queue.tsx | 4 +- .../QueueEmpty/QueueEmpty.module.css | 0 .../components/QueueEmpty/QueueEmpty.tsx | 0 .../components/QueueList/QueueList.module.css | 1 + .../components/QueueList/QueueList.tsx | 4 +- .../QueueListItem/QueueListItem.module.css | 20 +- .../QueueListItem/QueueListItem.tsx | 10 +- .../components/Search/Search.module.css | 15 +- .../components/Search/Search.tsx | 14 +- .../components/Setting/Setting.module.css | 6 + .../components/Setting/Setting.tsx | 0 .../SettingCheckbox.module.css | 10 +- .../SettingCheckbox/SettingCheckbox.tsx | 0 .../components/Toasts/Toasts.module.css | 2 +- .../components/Toasts/Toasts.tsx | 2 +- .../TrackProgress/TrackProgress.module.css | 10 +- .../TrackProgress/TrackProgress.tsx | 23 +- .../components/TrackRow/TrackRow.module.css | 2 +- .../components/TrackRow/TrackRow.tsx | 9 +- .../TracksList/TracksList.module.css | 13 +- .../components/TracksList/TracksList.tsx | 280 +- .../TracksListHeader.module.css | 3 + .../TracksListHeader/TracksListHeader.tsx | 35 +- .../TracksListHeaderCell.module.css | 0 .../TracksListHeaderCell.tsx | 2 +- .../VolumeControl/VolumeControl.module.css | 1 - .../VolumeControl/VolumeControl.tsx | 0 .../elements/Button/Button.module.css | 4 + src/{renderer => }/elements/Button/Button.tsx | 0 .../ExternalLink/ExternalLink.module.css | 0 .../elements/ExternalLink/ExternalLink.tsx | 5 +- .../elements/Heart/Heart.module.css | 0 src/{renderer => }/elements/Heart/Heart.tsx | 0 .../elements/Nav/Nav.module.css | 0 src/{renderer => }/elements/Nav/Nav.tsx | 0 .../elements/Toast/Toast.module.css | 1 + src/{renderer => }/elements/Toast/Toast.tsx | 0 .../ViewMessage/ViewMessage.module.css | 0 .../elements/ViewMessage/ViewMessage.tsx | 0 src/generated/typings/index.ts | 13 + src/hooks/useCover.ts | 22 + src/{renderer => }/hooks/useDebounce.ts | 0 src/hooks/useFilteredTracks.ts | 23 + src/{renderer => }/hooks/usePlayingTrack.ts | 4 +- .../hooks/usePlayingTrackCurrentTime.ts | 0 src/{renderer => }/hooks/usePlayingTrackID.ts | 0 .../lib/__tests__/ipc-channels.test.ts | 0 src/{shared => }/lib/__tests__/themes.test.ts | 4 +- src/lib/config.ts | 49 + src/lib/icons.ts | 23 + src/{shared => }/lib/ipc-channels.ts | 0 src/lib/library.ts | 106 + src/{shared => }/lib/logger.ts | 0 src/{renderer => }/lib/player.ts | 54 +- src/lib/query.ts | 17 + src/lib/sort-orders.ts | 68 + src/{shared => }/lib/themes.ts | 9 +- src/{renderer => }/lib/utils-events.ts | 11 +- src/lib/utils-id3.ts | 31 + src/lib/utils-library.ts | 42 + src/{renderer => }/lib/utils-player.ts | 7 +- src/lib/utils.ts | 42 + src/{renderer/entrypoint.tsx => main.tsx} | 14 +- src/main/entrypoint.ts | 129 - src/main/lib/modules-manager.ts | 16 - src/main/lib/utils-cover.ts | 88 - src/main/lib/utils-m3u.ts | 55 - src/main/lib/utils.ts | 42 - src/main/modules/AppModule.ts | 96 - src/main/modules/ApplicationMenuModule.ts | 72 - src/main/modules/BaseModule.ts | 45 - src/main/modules/BaseWindowModule.ts | 18 - src/main/modules/ConfigModule.ts | 112 - src/main/modules/DevtoolsModule.ts | 33 - src/main/modules/DialogsModule.ts | 38 - src/main/modules/DockMenuDarwinModule.ts | 117 - src/main/modules/IPCCoverModule.ts | 20 - src/main/modules/IPCLibraryModule.ts | 331 - src/main/modules/IPCNotificationsModule.ts | 66 - src/main/modules/IPCPlaylistsModule.ts | 70 - src/main/modules/NativeThemeModule.ts | 108 - src/main/modules/PowerMonitorModule.ts | 20 - src/main/modules/SleepBlockerModule.ts | 46 - src/main/modules/ThumbarModule.ts | 141 - src/main/modules/WindowPositionModule.ts | 29 - src/main/tsconfig.json | 9 - src/preload/db.ts | 217 - src/preload/entrypoint.ts | 150 - src/preload/tsconfig.json | 7 - src/renderer/components/Cover/Cover.tsx | 50 - .../DropzoneImport/DropzoneImport.tsx | 16 - src/renderer/components/Header/Header.tsx | 50 - .../ProgressBar/ProgressBar.module.css | 40 - src/renderer/constants/sort-orders.ts | 112 - src/renderer/hooks/useCurrentViewTracks.ts | 38 - src/renderer/hooks/useFilteredTracks.ts | 24 - src/renderer/index.html | 18 - src/renderer/lib/dnd-types.ts | 11 - src/renderer/lib/icons.ts | 23 - src/renderer/lib/utils-library.ts | 46 - src/renderer/lib/utils.ts | 72 - src/renderer/stores/AppAPI.ts | 15 - src/renderer/stores/useLibraryStore.ts | 345 - src/renderer/tsconfig.json | 9 - src/renderer/views/Root.tsx | 89 - src/shared/lib/utils-id3.ts | 31 - src/shared/lib/utils-uri.ts | 18 - src/shared/types/declarations/preload.d.ts | 16 - src/shared/types/museeks.ts | 161 - src/{renderer => }/stores/PlaylistsAPI.ts | 112 +- src/{renderer => }/stores/SettingsAPI.ts | 83 +- src/{renderer => }/stores/store-helpers.ts | 0 src/stores/useLibraryStore.ts | 257 + src/{renderer => }/stores/usePlayerStore.ts | 92 +- src/{renderer => }/stores/useToastsStore.ts | 6 +- src/{renderer => }/styles/general.module.css | 21 +- src/{renderer => }/styles/main.module.css | 0 src/{renderer => }/styles/utils.module.css | 0 src/{shared => }/themes/dark.json | 0 src/{shared => }/themes/light.json | 0 .../types/declarations/images.d.ts | 0 .../types/declarations/level-js.d.ts | 0 .../types/declarations/linvodb3.d.ts | 0 .../types/declarations/react-fontawesome.d.ts | 0 .../types/declarations/react-onclickout.d.ts | 0 .../declarations/react-simple-input.d.ts | 0 .../types/declarations/svg-inline-react.d.ts | 0 src/types/declarations/window.d.ts | 20 + src/types/museeks.ts | 61 + src/{renderer => }/views/Root.module.css | 0 src/views/Root.tsx | 61 + .../views/ViewLibrary.module.css | 0 src/{renderer => }/views/ViewLibrary.tsx | 59 +- .../views/ViewPlaylistDetails.tsx | 26 +- .../views/ViewPlaylists.module.css | 0 src/{renderer => }/views/ViewPlaylists.tsx | 7 +- .../views/ViewSettings.module.css | 1 + src/{renderer => }/views/ViewSettings.tsx | 8 +- .../views/ViewSettingsAbout.tsx | 29 +- .../views/ViewSettingsAudio.tsx | 4 +- .../views/ViewSettingsLibrary.tsx | 22 +- src/{renderer => }/views/ViewSettingsUI.tsx | 28 +- .../views/ViewTrackDetails.module.css | 0 src/{renderer => }/views/ViewTrackDetails.tsx | 27 +- src/{renderer => }/views/router.tsx | 14 +- src/vite-env.d.ts | 2 + tsconfig.base.json | 22 - tsconfig.json | 27 +- tsconfig.node.json | 10 + vite.config.ts | 22 + yarn.lock | 5338 ++++--------- 268 files changed, 12336 insertions(+), 8085 deletions(-) rename .eslintrc.js => .eslintrc.cjs (94%) delete mode 100644 electron-builder.yml delete mode 100644 electron.vite.config.ts create mode 100644 index.html create mode 100644 public/museeks_logo.png create mode 100644 src-tauri/.gitignore create mode 100644 src-tauri/Cargo.lock create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/Info.plist create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/main.json create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/Square107x107Logo.png create mode 100644 src-tauri/icons/Square142x142Logo.png create mode 100644 src-tauri/icons/Square150x150Logo.png create mode 100644 src-tauri/icons/Square284x284Logo.png create mode 100644 src-tauri/icons/Square30x30Logo.png create mode 100644 src-tauri/icons/Square310x310Logo.png create mode 100644 src-tauri/icons/Square44x44Logo.png create mode 100644 src-tauri/icons/Square71x71Logo.png create mode 100644 src-tauri/icons/Square89x89Logo.png create mode 100644 src-tauri/icons/StoreLogo.png create mode 100644 src-tauri/icons/app-icon-no-margin.png create mode 100644 src-tauri/icons/app-icon.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/src/libs/error.rs create mode 100644 src-tauri/src/libs/events.rs create mode 100644 src-tauri/src/libs/mod.rs create mode 100644 src-tauri/src/libs/utils.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/src/plugins/app_menu.rs create mode 100644 src-tauri/src/plugins/config.rs create mode 100644 src-tauri/src/plugins/cover.rs create mode 100644 src-tauri/src/plugins/database.rs create mode 100644 src-tauri/src/plugins/debug.rs create mode 100644 src-tauri/src/plugins/default_view.rs create mode 100644 src-tauri/src/plugins/macos.rs create mode 100644 src-tauri/src/plugins/mod.rs create mode 100644 src-tauri/src/plugins/shell_extension.rs create mode 100644 src-tauri/src/plugins/sleepblocker.rs create mode 100644 src-tauri/tauri.conf.json rename src/{shared => }/assets/icons/player-next.svg (100%) rename src/{shared => }/assets/icons/player-pause.svg (100%) rename src/{shared => }/assets/icons/player-play.svg (100%) rename src/{shared => }/assets/icons/player-previous.svg (100%) rename src/{shared => }/assets/icons/player-queue.svg (100%) rename src/{shared => }/assets/icons/player-repeat-one.svg (100%) rename src/{shared => }/assets/icons/player-repeat.svg (100%) rename src/{shared => }/assets/icons/player-shuffle.svg (100%) rename src/{shared => }/assets/icons/windows/backward-disabled.ico (100%) rename src/{shared => }/assets/icons/windows/backward.ico (100%) rename src/{shared => }/assets/icons/windows/forward-disabled.ico (100%) rename src/{shared => }/assets/icons/windows/forward.ico (100%) rename src/{shared => }/assets/icons/windows/pause-disabled.ico (100%) rename src/{shared => }/assets/icons/windows/pause.ico (100%) rename src/{shared => }/assets/icons/windows/play-disabled.ico (100%) rename src/{shared => }/assets/icons/windows/play.ico (100%) rename src/{shared => }/assets/logos/museeks-128.png (100%) rename src/{shared => }/assets/logos/museeks-128@2x.png (100%) rename src/{shared => }/assets/logos/museeks-32.png (100%) rename src/{shared => }/assets/logos/museeks-32@2x.png (100%) rename src/{shared => }/assets/logos/museeks-48.png (100%) rename src/{shared => }/assets/logos/museeks-48@2x.png (100%) rename src/{shared => }/assets/logos/museeks-64.png (100%) rename src/{shared => }/assets/logos/museeks-64@2x.png (100%) rename src/{shared => }/assets/logos/museeks-tray-dark.png (100%) rename src/{shared => }/assets/logos/museeks-tray-dark@2x.png (100%) rename src/{shared => }/assets/logos/museeks-tray.ico (100%) rename src/{shared => }/assets/logos/museeks-tray.png (100%) rename src/{shared => }/assets/logos/museeks.icns (100%) rename src/{shared => }/assets/logos/museeks.ico (100%) rename src/{shared => }/assets/logos/museeks.png (100%) rename src/{shared => }/assets/placeholder.png (100%) rename src/{renderer => }/components/AudioOutputSelect/AudioOutputSelect.tsx (63%) rename src/{renderer => }/components/Cover/Cover.module.css (73%) create mode 100644 src/components/Cover/Cover.tsx rename src/{renderer => }/components/DropzoneImport/DropzoneImport.module.css (100%) create mode 100644 src/components/DropzoneImport/DropzoneImport.tsx rename src/{renderer => }/components/Events/AppEvents.tsx (55%) rename src/{renderer => }/components/Events/GlobalKeyBindings.tsx (94%) rename src/{renderer => }/components/Events/IPCNavigationEvents.tsx (56%) rename src/{renderer => }/components/Events/IPCPlayerEvents.tsx (83%) create mode 100644 src/components/Events/LibraryEvents.tsx rename src/{renderer => }/components/Events/MediaSessionEvents.tsx (59%) rename src/{renderer => }/components/Events/PlayerEvents.tsx (61%) rename src/{renderer => }/components/Footer/Footer.module.css (100%) rename src/{renderer => }/components/Footer/Footer.tsx (94%) rename src/{renderer => }/components/Header/Header.module.css (75%) create mode 100644 src/components/Header/Header.tsx rename src/{renderer => }/components/PlayerControls/PlayerControls.module.css (94%) rename src/{renderer => }/components/PlayerControls/PlayerControls.tsx (89%) rename src/{renderer => }/components/PlayerOptionsButtons/ButtonRepeat.tsx (53%) rename src/{renderer => }/components/PlayerOptionsButtons/ButtonShuffle.tsx (96%) rename src/{renderer => }/components/PlayerOptionsButtons/common.module.css (91%) rename src/{renderer => }/components/PlayingBar/PlayingBar.module.css (89%) rename src/{renderer => }/components/PlayingBar/PlayingBar.tsx (77%) rename src/{renderer => }/components/PlayingBarInfo/PlayingBarInfo.module.css (88%) rename src/{renderer => }/components/PlayingBarInfo/PlayingBarInfo.tsx (84%) rename src/{renderer => }/components/PlayingIndicator/PlayingIndicator.module.css (79%) rename src/{renderer => }/components/PlayingIndicator/PlayingIndicator.tsx (93%) rename src/{renderer => }/components/PlaylistsNav/PlaylistsNav.module.css (100%) rename src/{renderer => }/components/PlaylistsNav/PlaylistsNav.tsx (66%) rename src/{renderer => }/components/PlaylistsNavLink/PlaylistsNavLink.module.css (100%) rename src/{renderer => }/components/PlaylistsNavLink/PlaylistsNavLink.tsx (82%) create mode 100644 src/components/ProgressBar/ProgressBar.module.css rename src/{renderer => }/components/ProgressBar/ProgressBar.tsx (55%) rename src/{renderer => }/components/Queue/Queue.module.css (84%) rename src/{renderer => }/components/Queue/Queue.tsx (90%) rename src/{renderer => }/components/QueueEmpty/QueueEmpty.module.css (100%) rename src/{renderer => }/components/QueueEmpty/QueueEmpty.tsx (100%) rename src/{renderer => }/components/QueueList/QueueList.module.css (83%) rename src/{renderer => }/components/QueueList/QueueList.tsx (98%) rename src/{renderer => }/components/QueueListItem/QueueListItem.module.css (80%) rename src/{renderer => }/components/QueueListItem/QueueListItem.tsx (88%) rename src/{renderer => }/components/Search/Search.module.css (64%) rename src/{renderer => }/components/Search/Search.tsx (78%) rename src/{renderer => }/components/Setting/Setting.module.css (89%) rename src/{renderer => }/components/Setting/Setting.tsx (100%) rename src/{renderer => }/components/SettingCheckbox/SettingCheckbox.module.css (76%) rename src/{renderer => }/components/SettingCheckbox/SettingCheckbox.tsx (100%) rename src/{renderer => }/components/Toasts/Toasts.module.css (84%) rename src/{renderer => }/components/Toasts/Toasts.tsx (96%) rename src/{renderer => }/components/TrackProgress/TrackProgress.module.css (87%) rename src/{renderer => }/components/TrackProgress/TrackProgress.tsx (82%) rename src/{renderer => }/components/TrackRow/TrackRow.module.css (98%) rename src/{renderer => }/components/TrackRow/TrackRow.tsx (96%) rename src/{renderer => }/components/TracksList/TracksList.module.css (73%) rename src/{renderer => }/components/TracksList/TracksList.tsx (73%) rename src/{renderer => }/components/TracksListHeader/TracksListHeader.module.css (89%) rename src/{renderer => }/components/TracksListHeader/TracksListHeader.tsx (57%) rename src/{renderer => }/components/TracksListHeaderCell/TracksListHeaderCell.module.css (100%) rename src/{renderer => }/components/TracksListHeaderCell/TracksListHeaderCell.tsx (95%) rename src/{renderer => }/components/VolumeControl/VolumeControl.module.css (97%) rename src/{renderer => }/components/VolumeControl/VolumeControl.tsx (100%) rename src/{renderer => }/elements/Button/Button.module.css (90%) rename src/{renderer => }/elements/Button/Button.tsx (100%) rename src/{renderer => }/elements/ExternalLink/ExternalLink.module.css (100%) rename src/{renderer => }/elements/ExternalLink/ExternalLink.tsx (85%) rename src/{renderer => }/elements/Heart/Heart.module.css (100%) rename src/{renderer => }/elements/Heart/Heart.tsx (100%) rename src/{renderer => }/elements/Nav/Nav.module.css (100%) rename src/{renderer => }/elements/Nav/Nav.tsx (100%) rename src/{renderer => }/elements/Toast/Toast.module.css (93%) rename src/{renderer => }/elements/Toast/Toast.tsx (100%) rename src/{renderer => }/elements/ViewMessage/ViewMessage.module.css (100%) rename src/{renderer => }/elements/ViewMessage/ViewMessage.tsx (100%) create mode 100644 src/generated/typings/index.ts create mode 100644 src/hooks/useCover.ts rename src/{renderer => }/hooks/useDebounce.ts (100%) create mode 100644 src/hooks/useFilteredTracks.ts rename src/{renderer => }/hooks/usePlayingTrack.ts (66%) rename src/{renderer => }/hooks/usePlayingTrackCurrentTime.ts (100%) rename src/{renderer => }/hooks/usePlayingTrackID.ts (100%) rename src/{shared => }/lib/__tests__/ipc-channels.test.ts (100%) rename src/{shared => }/lib/__tests__/themes.test.ts (90%) create mode 100644 src/lib/config.ts create mode 100644 src/lib/icons.ts rename src/{shared => }/lib/ipc-channels.ts (100%) create mode 100644 src/lib/library.ts rename src/{shared => }/lib/logger.ts (100%) rename src/{renderer => }/lib/player.ts (65%) create mode 100644 src/lib/query.ts create mode 100644 src/lib/sort-orders.ts rename src/{shared => }/lib/themes.ts (53%) rename src/{renderer => }/lib/utils-events.ts (77%) create mode 100644 src/lib/utils-id3.ts create mode 100644 src/lib/utils-library.ts rename src/{renderer => }/lib/utils-player.ts (79%) create mode 100644 src/lib/utils.ts rename src/{renderer/entrypoint.tsx => main.tsx} (74%) delete mode 100644 src/main/entrypoint.ts delete mode 100644 src/main/lib/modules-manager.ts delete mode 100644 src/main/lib/utils-cover.ts delete mode 100644 src/main/lib/utils-m3u.ts delete mode 100644 src/main/lib/utils.ts delete mode 100644 src/main/modules/AppModule.ts delete mode 100644 src/main/modules/ApplicationMenuModule.ts delete mode 100644 src/main/modules/BaseModule.ts delete mode 100644 src/main/modules/BaseWindowModule.ts delete mode 100644 src/main/modules/ConfigModule.ts delete mode 100644 src/main/modules/DevtoolsModule.ts delete mode 100644 src/main/modules/DialogsModule.ts delete mode 100644 src/main/modules/DockMenuDarwinModule.ts delete mode 100644 src/main/modules/IPCCoverModule.ts delete mode 100644 src/main/modules/IPCLibraryModule.ts delete mode 100644 src/main/modules/IPCNotificationsModule.ts delete mode 100644 src/main/modules/IPCPlaylistsModule.ts delete mode 100644 src/main/modules/NativeThemeModule.ts delete mode 100644 src/main/modules/PowerMonitorModule.ts delete mode 100644 src/main/modules/SleepBlockerModule.ts delete mode 100644 src/main/modules/ThumbarModule.ts delete mode 100644 src/main/modules/WindowPositionModule.ts delete mode 100644 src/main/tsconfig.json delete mode 100644 src/preload/db.ts delete mode 100644 src/preload/entrypoint.ts delete mode 100644 src/preload/tsconfig.json delete mode 100644 src/renderer/components/Cover/Cover.tsx delete mode 100644 src/renderer/components/DropzoneImport/DropzoneImport.tsx delete mode 100644 src/renderer/components/Header/Header.tsx delete mode 100644 src/renderer/components/ProgressBar/ProgressBar.module.css delete mode 100644 src/renderer/constants/sort-orders.ts delete mode 100644 src/renderer/hooks/useCurrentViewTracks.ts delete mode 100644 src/renderer/hooks/useFilteredTracks.ts delete mode 100644 src/renderer/index.html delete mode 100644 src/renderer/lib/dnd-types.ts delete mode 100644 src/renderer/lib/icons.ts delete mode 100644 src/renderer/lib/utils-library.ts delete mode 100644 src/renderer/lib/utils.ts delete mode 100644 src/renderer/stores/AppAPI.ts delete mode 100644 src/renderer/stores/useLibraryStore.ts delete mode 100644 src/renderer/tsconfig.json delete mode 100644 src/renderer/views/Root.tsx delete mode 100644 src/shared/lib/utils-id3.ts delete mode 100644 src/shared/lib/utils-uri.ts delete mode 100644 src/shared/types/declarations/preload.d.ts delete mode 100644 src/shared/types/museeks.ts rename src/{renderer => }/stores/PlaylistsAPI.ts (57%) rename src/{renderer => }/stores/SettingsAPI.ts (62%) rename src/{renderer => }/stores/store-helpers.ts (100%) create mode 100644 src/stores/useLibraryStore.ts rename src/{renderer => }/stores/usePlayerStore.ts (84%) rename src/{renderer => }/stores/useToastsStore.ts (81%) rename src/{renderer => }/styles/general.module.css (68%) rename src/{renderer => }/styles/main.module.css (100%) rename src/{renderer => }/styles/utils.module.css (100%) rename src/{shared => }/themes/dark.json (100%) rename src/{shared => }/themes/light.json (100%) rename src/{shared => }/types/declarations/images.d.ts (100%) rename src/{shared => }/types/declarations/level-js.d.ts (100%) rename src/{shared => }/types/declarations/linvodb3.d.ts (100%) rename src/{shared => }/types/declarations/react-fontawesome.d.ts (100%) rename src/{shared => }/types/declarations/react-onclickout.d.ts (100%) rename src/{shared => }/types/declarations/react-simple-input.d.ts (100%) rename src/{shared => }/types/declarations/svg-inline-react.d.ts (100%) create mode 100644 src/types/declarations/window.d.ts create mode 100644 src/types/museeks.ts rename src/{renderer => }/views/Root.module.css (100%) create mode 100644 src/views/Root.tsx rename src/{renderer => }/views/ViewLibrary.module.css (100%) rename src/{renderer => }/views/ViewLibrary.tsx (60%) rename src/{renderer => }/views/ViewPlaylistDetails.tsx (83%) rename src/{renderer => }/views/ViewPlaylists.module.css (100%) rename src/{renderer => }/views/ViewPlaylists.tsx (92%) rename src/{renderer => }/views/ViewSettings.module.css (90%) rename src/{renderer => }/views/ViewSettings.tsx (82%) rename src/{renderer => }/views/ViewSettingsAbout.tsx (69%) rename src/{renderer => }/views/ViewSettingsAudio.tsx (93%) rename src/{renderer => }/views/ViewSettingsLibrary.tsx (60%) rename src/{renderer => }/views/ViewSettingsUI.tsx (80%) rename src/{renderer => }/views/ViewTrackDetails.module.css (100%) rename src/{renderer => }/views/ViewTrackDetails.tsx (86%) rename src/{renderer => }/views/router.tsx (92%) create mode 100644 src/vite-env.d.ts delete mode 100644 tsconfig.base.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.eslintignore b/.eslintignore index 58125c0f6..eb93a38c3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,4 @@ node_modules dist .vscode -build +.eslintrc.cjs diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 94% rename from .eslintrc.js rename to .eslintrc.cjs index 95fe00c90..374b50a9c 100644 --- a/.eslintrc.js +++ b/.eslintrc.cjs @@ -1,5 +1,8 @@ /* eslint-env node */ module.exports = { + env: { + node: true, + }, root: true, extends: [ 'eslint:recommended', @@ -19,7 +22,7 @@ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { project: true, - project: ['./tsconfig.json', './src/*/tsconfig.json'], + project: ['./tsconfig.json'], tsconfigRootDir: __dirname, }, settings: { react: { version: 'detect' } }, diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d779c38e1..818466bde 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,31 +17,33 @@ concurrency: jobs: qa: - # Let's implement different jobs for Windows and Linux at some point, especially for packaging scripts - runs-on: ubuntu-latest + # For QA (lint, test, etc), Linux is enough + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 20 - - name: Display Node.js and npm informations + - uses: actions-rust-lang/setup-rust-toolchain@v1 + + - name: install dependencies (ubuntu only) run: | - echo "node version $(node -v) running" - echo "npm version $(npm -v) running" + sudo apt-get update + sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf - name: Install dependencies run: yarn install --frozen-lockfile + - name: Generate types + run: cargo test --manifest-path src-tauri/Cargo.toml + - name: 'Test: formatting' run: 'yarn run test:formatting' - - name: 'Test: typings' - run: 'yarn run test:typings' - - name: 'Test: TS/JS linting' run: 'yarn run test:lint' @@ -51,138 +53,52 @@ jobs: - name: 'Test: unit' run: 'yarn run test:unit' + - name: 'Test: typings' + run: 'yarn run test:typings' + - name: Build application run: yarn run build - - uses: actions/upload-artifact@v3 - with: - name: application-build - path: dist/ + # - uses: actions/upload-artifact@v4 + # with: + # name: application-build + # path: dist/ # Documentation on environments: # https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners - binaries-linux: - runs-on: ubuntu-latest - needs: [qa] + binaries: + permissions: + contents: write + strategy: + fail-fast: false + matrix: + platform: [macos-latest, ubuntu-22.04, windows-latest] + runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Use Node.js - uses: actions/setup-node@v3 + - name: setup node + uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 20 - - name: Display Node.js and npm informations - run: | - echo "node version $(node -v) running" - echo "npm version $(npm -v) running" - - - uses: actions/download-artifact@v3 - with: - name: application-build - path: dist/ + - name: install Rust stable + uses: dtolnay/rust-toolchain@stable - - name: Install Linux dependencies + - name: install dependencies (ubuntu only) + if: matrix.platform == 'ubuntu-22.04' run: | - sudo apt update - sudo apt install --no-install-recommends -y libopenjp2-tools rpm gcc-multilib g++-multilib + sudo apt-get update + sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - - name: Install dependencies + - name: install frontend dependencies run: yarn install --frozen-lockfile - - name: Package Linux binaries - # - name: Package Linux/Windows binaries - run: yarn run package:l - # run: yarn run package:lw + - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/upload-artifact@v3 - with: - name: binaries-linux - path: | - build/museeks-linux-i386.deb - build/museeks-linux-amd64.deb - build/museeks-linux-i386.AppImage - build/museeks-linux-x86_64.AppImage - build/museeks-linux-i686.rpm - build/museeks-linux-x86_64.rpm - build/museeks-linux-x64.tar.gz - - binaries-macos: - runs-on: macos-latest - needs: [qa] - - steps: - - uses: actions/checkout@v3 - - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: 20.x - - - name: Display Node.js and npm informations - run: | - echo "node version $(node -v) running" - echo "npm version $(npm -v) running" - - - uses: actions/download-artifact@v3 - with: - name: application-build - path: dist/ - - - name: Install production dependencies - run: yarn install --frozen-lockfile - - - name: Package macOS binaries - run: yarn run package:m - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CSC_LINK: ${{ secrets.CSC_LINK }} - CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - - - uses: actions/upload-artifact@v3 - with: - name: binaries-macos - path: | - build/museeks-macos-arm64.dmg - build/museeks-macos-x64.dmg - - binaries-windows: - runs-on: windows-latest - needs: [qa] - - steps: - - uses: actions/checkout@v3 - - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: 20.x - - - name: Display Node.js and npm informations - run: | - echo "node version $(node -v) running" - echo "npm version $(npm -v) running" - - - uses: actions/download-artifact@v3 - with: - name: application-build - path: dist/ - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Package Windows binaries - run: yarn run package:w - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/upload-artifact@v3 with: - name: binaries-windows - path: | - build/museeks-win-x64-setup.exe - build/museeks-win-x64-portable.exe + includeRelease: false + includeUpdaterJson: false diff --git a/.gitignore b/.gitignore index e73512da9..b35acca81 100644 --- a/.gitignore +++ b/.gitignore @@ -4,65 +4,26 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* +lerna-debug.log* -# Runtime data -pids -*.pid -*.seed -*.pid.lock +node_modules +dist +dist-ssr +*.local -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -dist/main/* -dist/renderer/* -dist/preload/* -cache/ -build/ -.vscode +# Editor directories and files +.vscode/* !.vscode/extensions.json - +.idea .DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Generated files +src/generated/typings/* +!src/generated/typings/index.ts +src-tauri/gen diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 6167b92e0..53d3031e5 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,9 +1,10 @@ { "recommendations": [ "dbaeumer.vscode-eslint", - "csstools.postcss", + "vunguyentuan.vscode-postcss", "esbenp.prettier-vscode", "stylelint.vscode-stylelint", - "ZixuanChen.vitest-explorer" + "tauri-apps.tauri-vscode", + "rust-lang.rust-analyzer" ] } diff --git a/electron-builder.yml b/electron-builder.yml deleted file mode 100644 index c397bcc25..000000000 --- a/electron-builder.yml +++ /dev/null @@ -1,68 +0,0 @@ -appId: io.museeks.app -directories: - buildResources: './dist' - output: './build' -files: - - dist/**/* - - src/shared/assets/**/* - - 'node_modules/**/*' - - '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}' - - '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}' - - '!**/node_modules/*.d.ts' - - '!**/node_modules/.bin' - -# fileAssociations: -# ext: -# - mp3 -# - mp4 -# - aac -# - m4a -# - 3gp -# - wav -# - ogg -# - ogv -# - ogm -# - opus -# - flac -# role: Viewer -mac: - category: public.app-category.music - target: - - target: dmg - arch: - - x64 - - arm64 - icon: src/shared/assets/logos/museeks.icns - artifactName: ${name}-macos-${arch}.${ext} - darkModeSupport: true -linux: - category: AudioVideo - target: - - target: deb - arch: - - x64 - - target: AppImage - arch: - - x64 - - target: rpm - arch: - - x64 - - target: tar.gz - arch: - - x64 - executableName: museeks - artifactName: ${name}-linux-${arch}.${ext} -deb: - depends: ['libdbus-1-dev', 'libglib2.0-dev'] -win: - target: - - target: nsis - arch: - - x64 - - target: portable - arch: - - x64 - icon: src/images/logos/museeks.ico - artifactName: ${name}-win-${arch}-setup.${ext} -portable: - artifactName: ${name}-win-${arch}-portable.${ext} diff --git a/electron.vite.config.ts b/electron.vite.config.ts deleted file mode 100644 index b1c632c9d..000000000 --- a/electron.vite.config.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { defineConfig, externalizeDepsPlugin } from 'electron-vite'; -import react from '@vitejs/plugin-react'; - -const externals = ['fs', 'electron', 'globby', 'queue', 'music-metadata']; -const minify = process.env.NODE_ENV === 'production'; - -const commonNodeConfig = { - minify, - target: 'node18', - sourcemap: true, - emptyOutDir: true, -}; - -export default defineConfig({ - main: { - plugins: [externalizeDepsPlugin({ exclude: externals })], - build: { - ...commonNodeConfig, - outDir: 'dist/main', - - lib: { - entry: './src/main/entrypoint.ts', - }, - }, - }, - preload: { - plugins: [externalizeDepsPlugin({ exclude: externals })], - build: { - ...commonNodeConfig, - outDir: 'dist/preload', - lib: { - entry: './src/preload/entrypoint.ts', - }, - }, - }, - renderer: { - plugins: [react()], - appType: 'spa', - build: { - minify, - sourcemap: true, - emptyOutDir: true, - outDir: 'dist/renderer', - }, - }, -}); diff --git a/index.html b/index.html new file mode 100644 index 000000000..4b9f8a550 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + Museeks + + + + +
+ +
+ + diff --git a/package.json b/package.json index 12e416e95..6018bc542 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "museeks", "productName": "Museeks", - "version": "0.14.0", + "version": "0.20.0", "description": "A simple, clean and cross-platform music player.", - "main": "dist/main/entrypoint.js", + "type": "module", "repository": { "type": "git", "url": "https://github.com/martpie/museeks" @@ -14,99 +14,83 @@ "url": "https://github.com/martpie/museeks/issues" }, "scripts": { - "postinstall": "electron-builder install-app-deps", - "build": "electron-vite build", - "dev": "electron-vite dev --watch", - "start": "electron-vite preview", - "museeks": "electron .", - "museeks:debug": "electron . --enable-logging --devtools --trace-warnings", - "test:typings": "yarn run test:typings:root && yarn run test:typings:main && yarn run test:typings:preload && yarn run test:typings:renderer", - "test:typings:root": "tsc --noEmit --project ./tsconfig.json", - "test:typings:main": "tsc --noEmit --project src/main/tsconfig.json", - "test:typings:preload": "tsc --noEmit --project src/preload/tsconfig.json", - "test:typings:renderer": "tsc --noEmit --project src/renderer/tsconfig.json", + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "tauri": "tauri", + "test:typings": "tsc --noEmit --project ./tsconfig.json", "test:unit": "vitest run", "test:lint": "eslint src", "test:lint:fix": "eslint src --fix", "test:formatting": "prettier --check \"./**/*.{ts,tsx,js}\"", "test:formatting:fix": "prettier --write \"./**/*.{ts,tsx,js}\"", "test:css": "stylelint \"src/**/*.css\"", - "package:lmw": "electron-builder -lmw && yarn run package:checksums", - "package:lw": "electron-builder -lw", - "package:l": "electron-builder -l", - "package:w": "electron-builder -w", - "package:m": "electron-builder -m", "package:checksums": "bash scripts/checksum.sh" }, + "browserslist": [ + "defaults" + ], "dependencies": { - "@electron/remote": "^2.1.2", "@radix-ui/react-aspect-ratio": "^1.0.3", "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-progress": "^1.0.3", "@radix-ui/react-slider": "^1.1.2", - "@tanstack/react-virtual": "3.0.4", - "chardet": "^1.6.0", + "@tanstack/react-query": "^5.28.4", + "@tanstack/react-virtual": "3.1.3", + "@tauri-apps/api": "^2.0.0-beta.5", + "@tauri-apps/plugin-dialog": "^2.0.0-beta.2", + "@tauri-apps/plugin-log": "^2.0.0-beta.2", + "@tauri-apps/plugin-notification": "^2.0.0-beta.2", + "@tauri-apps/plugin-os": "^2.0.0-beta.2", + "@tauri-apps/plugin-shell": "^2.0.0-beta.2", "classnames": "^2.5.1", - "electron-store": "^8.1.0", "font-awesome": "^4.7.0", - "globby": "^13.2.2", - "iconv-lite": "^0.6.3", "lodash": "^4.17.21", - "m3ujs": "^0.2.1", - "music-metadata": "^8.2.0", - "nanoid": "^5.0.5", - "pino": "^8.18.0", + "nanoid": "^5.0.6", + "normalize.css": "^8.0.1", + "pino": "^8.19.0", "pino-pretty": "^10.3.1", - "pouchdb": "^8.0.1", - "pouchdb-find": "^8.0.1", - "queue": "^7.0.0", "react": "^18.2.0", - "react-dnd": "^16.0.1", - "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18.2.0", "react-fontawesome": "^1.7.1", "react-keybinding-component": "^2.0.2", - "react-router-dom": "6.22.0", + "react-router-dom": "6.22.3", "semver": "^7.6.0", "svg-inline-react": "^3.2.1", - "zustand": "^4.5.0" + "zustand": "^4.5.2" }, "devDependencies": { - "@total-typescript/ts-reset": "^0.5.1", - "@types/lodash": "^4.14.202", - "@types/pouchdb": "^6.4.2", - "@types/react": "^18.2.55", - "@types/react-dom": "^18.2.19", - "@types/react-fontawesome": "^1.6.8", - "@types/react-router-dom": "^5.3.3", - "@types/semver": "^7.5.6", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@tauri-apps/cli": "^2.0.0-beta.9", + "@types/lodash": "^4.17.0", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@types/semver": "^7.5.8", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", "@vitejs/plugin-react": "^4.2.1", - "electron": "28.2.2", - "electron-builder": "^24.12.0", - "electron-devtools-assembler": "^1.2.0", - "electron-vite": "^2.0.0", - "eslint": "^8.56.0", + "autoprefixer": "^10.4.18", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.0", "eslint-plugin-react-hooks": "^4.6.0", "normalize.css": "^8.0.1", "postcss": "^8.4.35", - "postcss-import": "^15.1.0", + "postcss-import": "^16.0.1", "postcss-nested": "^6.0.1", "postcss-scss": "^4.0.9", "postcss-url": "^10.1.3", "prettier": "^3.2.5", "prettier-eslint": "^16.3.0", - "stylelint": "^15.11.0", - "stylelint-config-css-modules": "^4.3.0", - "stylelint-config-standard": "^34.0.0", - "typescript": "^5.3.3", - "typescript-plugin-css-modules": "^5.0.2", - "vite": "^5.1.0", - "vitest": "^1.2.2" + "stylelint": "^16.2.1", + "stylelint-config-css-modules": "^4.4.0", + "stylelint-config-standard": "^36.0.0", + "typescript": "^5.4.2", + "typescript-plugin-css-modules": "^5.1.0", + "vite": "^5.1.6", + "vite-plugin-react-svg": "^0.2.0", + "vitest": "^1.4.0" } } diff --git a/postcss.config.mjs b/postcss.config.mjs index bd499164c..566405cfb 100644 --- a/postcss.config.mjs +++ b/postcss.config.mjs @@ -3,5 +3,6 @@ export default { plugins: { 'postcss-import': {}, 'postcss-nested': {}, + 'autoprefixer': {} }, }; diff --git a/public/museeks_logo.png b/public/museeks_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..337eb7607ad524a6c071be00df7be42adfb3a50d GIT binary patch literal 132283 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
!z`RE$Sn-j9l$U8B9CIwTxvAjRKx5U< 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%0D^CaK+os5{}^J@3{ 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 literal 0 HcmV?d00001 diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore new file mode 100644 index 000000000..f4dfb82b2 --- /dev/null +++ b/src-tauri/.gitignore @@ -0,0 +1,4 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock new file mode 100644 index 000000000..b1e6470c7 --- /dev/null +++ b/src-tauri/Cargo.lock @@ -0,0 +1,6929 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" + +[[package]] +name = "actionable" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9e6839049e5ad3a410c0fcd32ee25e7eb1f0fb9333310b48314ad6686d09f5" +dependencies = [ + "actionable-macros", + "async-trait", + "serde", + "thiserror", +] + +[[package]] +name = "actionable-macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219df0f6a405dcf4f2b0fbb85bc2dafde06d89662d3da7b7f350f3515d65d15d" +dependencies = [ + "darling 0.13.4", + "ident_case", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.12", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b79b82693f705137f8fb9b37871d99e4f9a7df12b917eed79c3d3954830a60b" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_log-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" + +[[package]] +name = "android_logger" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" + +[[package]] +name = "arc-bytes" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3de7bfea323262a3d319ed4ed16a960f07395bd903ac650f5e345b32401567d5" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ashpd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b22517ee647547c01a687cf9b76074e1c91334032a4324f7243c6ee0f949390" +dependencies = [ + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.8.5", + "serde", + "serde_repr", + "tokio", + "url", + "zbus", +] + +[[package]] +name = "async-broadcast" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" +dependencies = [ + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +dependencies = [ + "concurrent-queue", + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock 3.3.0", + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc19683171f287921f2405677dd2ed2549c3b3bda697a563ebc3a121ace2aba1" +dependencies = [ + "async-lock 3.3.0", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451e3cf68011bd56771c79db04a9e333095ab6349f7e47592b788e9b98720cc8" +dependencies = [ + "async-channel", + "async-io", + "async-lock 3.3.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 5.2.0", + "futures-lite", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" + +[[package]] +name = "async-trait" +version = "0.1.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "atk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" +dependencies = [ + "atk-sys", + "glib 0.18.5", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "attribute-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c94f43ede6f25dab1dea046bff84d85dea61bd49aba7a9011ad66c0d449077b" +dependencies = [ + "attribute-derive-macro", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "attribute-derive-macro" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b409e2b2d2dc206d2c0ad3575a93f001ae21a1593e2d0c69b69c308e63f3b422" +dependencies = [ + "collection_literals", + "interpolator", + "manyhow", + "proc-macro-utils", + "proc-macro2", + "quote", + "quote-use", + "syn 2.0.52", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "basic-toml" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2db21524cad41c5591204d22d75e1970a2d1f71060214ca931dc7d5afe2c14e5" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel", + "async-lock 3.3.0", + "async-task", + "fastrand", + "futures-io", + "futures-lite", + "piper", + "tracing", +] + +[[package]] +name = "bonsaidb" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8e0684e6d0a625039c24880ddd23ff5eec068b4f47a5f7150ec261812bdf7b1" +dependencies = [ + "bonsaidb-core", + "bonsaidb-files", + "bonsaidb-local", + "derive-where", +] + +[[package]] +name = "bonsaidb-core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c75825d18ec94b4530afd246b638c318934416808683d6cf6971bf9590f5e48" +dependencies = [ + "actionable", + "arc-bytes", + "async-trait", + "bonsaidb-macros", + "bytecount", + "circulate", + "derive-where", + "futures", + "itertools", + "num-traits", + "ordered-varint", + "pot", + "serde", + "sha2", + "thiserror", + "tinyvec", + "transmog", + "transmog-pot", + "zeroize", +] + +[[package]] +name = "bonsaidb-files" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6cb6f5473367d7f492c9ada0a35fb1317e5e55db8d48737d78e8f49dba82de" +dependencies = [ + "bonsaidb-core", + "bonsaidb-macros", + "bonsaidb-utils", + "derive-where", + "futures", + "lru 0.12.3", + "parking_lot", + "serde", + "thiserror", + "tokio", +] + +[[package]] +name = "bonsaidb-local" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa13e68a85fef7b5c5ebcf90cd3b9d1f821a4ddb6f0e3fbe1150071b5226078a" +dependencies = [ + "async-trait", + "bincode", + "bonsaidb-core", + "bonsaidb-utils", + "byteorder", + "derive-where", + "easy-parallel", + "flume 0.11.0", + "fs2", + "futures", + "itertools", + "log", + "nebari", + "p256", + "parking_lot", + "pot", + "rand 0.8.5", + "serde", + "sysinfo", + "thiserror", + "tokio", + "transmog-versions", + "watchable", +] + +[[package]] +name = "bonsaidb-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c96879fa66046a8d550de9c52f93fa99feea4b24e81917f883c39b5eb11f54" +dependencies = [ + "attribute-derive", + "manyhow", + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "quote-use", + "syn 2.0.52", + "trybuild", +] + +[[package]] +name = "bonsaidb-utils" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "184e5ac9b34e6d55fb0a8437bd279650942b25d3ee95b74f3fed2bb5032d5f93" + +[[package]] +name = "borsh" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" +dependencies = [ + "borsh-derive", + "cfg_aliases 0.1.1", +] + +[[package]] +name = "borsh-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" +dependencies = [ + "once_cell", + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.52", + "syn_derive", +] + +[[package]] +name = "brotli" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + +[[package]] +name = "byte-unit" +version = "5.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ac19bdf0b2665407c39d82dbc937e951e7e2001609f0fb32edd0af45a2d63e" +dependencies = [ + "rust_decimal", + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytecount" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" + +[[package]] +name = "bytemuck" +version = "1.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.4.2", + "cairo-sys-rs", + "glib 0.18.5", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys 0.18.1", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cargo_toml" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" +dependencies = [ + "serde", + "toml 0.8.2", +] + +[[package]] +name = "cc" +version = "1.0.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cfg_aliases" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" + +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.4", +] + +[[package]] +name = "circulate" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56d670e28743ed41e3cd4388cf7fc928bcf9cedf515b63443a2e13fc4c986df" +dependencies = [ + "arc-bytes", + "flume 0.11.0", + "futures", + "parking_lot", + "pot", + "serde", +] + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics 0.22.3", + "foreign-types 0.3.2", + "libc", + "objc", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics 0.23.1", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "collection_literals" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271" + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colored" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f741c91823341bebf717d4c71bda820630ce065443b58bd1b7451af008355" +dependencies = [ + "is-terminal", + "lazy_static", + "winapi", +] + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.3.2", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.52", +] + +[[package]] +name = "ctor" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad291aa74992b9b7a7e88c38acbbf6ad7e107f1d90ee8775b7bc1fc3394f485c" +dependencies = [ + "quote", + "syn 2.0.52", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core 0.20.8", + "darling_macro 0.20.8", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.52", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core 0.20.8", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + +[[package]] +name = "dbus" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" +dependencies = [ + "libc", + "libdbus-sys", + "winapi", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive-where" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.1", +] + +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "drm" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +dependencies = [ + "bitflags 2.4.2", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "rustix", +] + +[[package]] +name = "drm-ffi" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +dependencies = [ + "drm-sys", + "rustix", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +dependencies = [ + "libc", + "linux-raw-sys 0.6.4", +] + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dtoa-short" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "easy-parallel" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2afbb9b0aef60e4f0d2b18129b6c0dff035a6f7dbbd17c2f38c1432102ee223c" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embed-resource" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bde55e389bea6a966bd467ad1ad7da0ae14546a5bc794d16d1e55e7fca44881" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.8.2", + "vswhom", + "winreg 0.51.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.2.0", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "fern" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" +dependencies = [ + "colored", + "log", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib 0.18.5", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib 0.18.5", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" +dependencies = [ + "gdk-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib 0.18.5", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" +dependencies = [ + "gdk-sys", + "glib-sys 0.18.1", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b25e5b3e733153bcab35ee4671b46604b42516163cae442d1601cb716f2ac5" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows 0.53.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys 0.18.1", + "glib 0.18.5", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys 0.16.3", + "gobject-sys 0.16.3", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16aa2475c9debed5a32832cb5ff2af5a3f9e1ab9e69df58eaadc1ab2004d6eba" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys 0.16.3", + "glib-macros 0.16.8", + "glib-sys 0.16.3", + "gobject-sys 0.16.3", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.4.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys 0.18.1", + "glib-macros 0.18.5", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys 0.16.3", + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys 0.18.1", + "libc", + "system-deps", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "gtk" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib 0.18.5", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.2.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eceaaeec696539ddaf7b333340f1af35a5aa87ae3e4f3ead0532f72affab2e" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.10", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home-config" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27825a5c636b5efd43d1b76065198d4e7927951593202c88764bfd9693cf4cf0" +dependencies = [ + "dirs 4.0.0", + "serde", + "toml 0.5.11", +] + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.10", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.10", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", + "png", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "967d6dd42f16dbf0eb8040cb9e477933562684d3918f7d253f2ff9087fb3e7a3" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "infer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "interpolator" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib 0.18.5", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "treediff", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.4.2", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib 0.18.5", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libdbus-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "linux-raw-sys" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "lofty" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75066eb1d25a7047fb2667edb410ae2592439ed81546f95c28b0a1c7d7d3818" +dependencies = [ + "byteorder", + "data-encoding", + "flate2", + "lofty_attr", + "log", + "ogg_pager", + "paste", +] + +[[package]] +name = "lofty_attr" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764b60e1ddd07e5665a6a17636a95cd7d8f3b86c73503a69c32979d05f72f3cf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +dependencies = [ + "value-bag", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.3", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "mac-notification-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51fca4d74ff9dbaac16a01b924bc3693fa2bba0862c2c633abc73f9a8ea21f64" +dependencies = [ + "cc", + "dirs-next", + "objc-foundation", + "objc_id", + "time", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "manyhow" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b76546495d933baa165075b95c0a15e8f7ef75e53f56b19b7144d80fd52bd" +dependencies = [ + "manyhow-macros", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "manyhow-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba072c0eadade3160232e70893311f1f8903974488096e2eb8e48caba2f0cf1" +dependencies = [ + "proc-macro-utils", + "proc-macro2", + "quote", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df4051db13d0816cf23196d3baa216385ae099339f5d0645a8d9ff2305e82b8" +dependencies = [ + "lazy_static", + "lru 0.7.8", + "memoize-inner", +] + +[[package]] +name = "memoize-inner" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bdece7e91f0d1e33df7b46ec187a93ea0d4e642113a1039ac8bfdd4a3273ac" +dependencies = [ + "lazy_static", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "muda" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453" +dependencies = [ + "cocoa 0.25.0", + "crossbeam-channel", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "museeks" +version = "0.20.0" +dependencies = [ + "anyhow", + "base64 0.22.0", + "bonsaidb", + "dbus", + "dirs 5.0.1", + "futures", + "home-config", + "lofty", + "log", + "memoize", + "nosleep", + "rayon", + "serde", + "serde_json", + "strum", + "strum_macros", + "tauri", + "tauri-build", + "tauri-plugin-dialog", + "tauri-plugin-log", + "tauri-plugin-notification", + "tauri-plugin-os", + "tauri-plugin-shell", + "tauri-plugin-single-instance", + "tauri-plugin-window-state", + "thiserror", + "tokio", + "ts-rs", + "uuid", + "walkdir", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.12", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "raw-window-handle 0.5.2", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nebari" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d803ae55feaf2b1e177b2d4c3315468f4ccc215c5f9a83d31edfb862803f5b5e" +dependencies = [ + "arc-bytes", + "backtrace", + "byteorder", + "crc", + "flume 0.10.14", + "lru 0.7.8", + "num_cpus", + "once_cell", + "parking_lot", + "thiserror", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.2", + "cfg-if", + "libc", + "memoffset", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nosleep" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cedad558d018cdc0abbca10a799e91ed63fa442d4a567f91dc9dce775a3ebba" +dependencies = [ + "nosleep-mac-sys", + "nosleep-nix", + "nosleep-types", + "nosleep-windows", +] + +[[package]] +name = "nosleep-mac-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b2df065619dbb4fc6034967a7511b0bc4d2caa7688cd6ea0f5601edd7f3901" +dependencies = [ + "cc", + "nosleep-types", + "objc-foundation", + "objc_id", + "snafu", +] + +[[package]] +name = "nosleep-nix" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cb4d94c4c2a46b6756dd6f2401c143cd2cb6b8324b0b151cff5de9dad3e59bd" +dependencies = [ + "dbus", + "nosleep-types", + "snafu", +] + +[[package]] +name = "nosleep-types" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2d4d904e07b1c33a67ca29e5ac82902e7bb867130d993e938f8c4402986449" +dependencies = [ + "snafu", +] + +[[package]] +name = "nosleep-windows" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2570bd99af538bf408bfaec6f14a63d7d89ad8fe82a17c0c43a31395da4c8d1e" +dependencies = [ + "nosleep-types", + "snafu", + "windows 0.36.1", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "ogg_pager" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c949d63b387b25c332f6e39d1762dd4b405008289dd7681f02c258b1294653ca" +dependencies = [ + "byteorder", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "open" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b3fbb0d52bf0cbb5225ba3d2c303aa136031d43abff98284332a9981ecddec" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "ordered-varint" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9cc9f18ab4bad1e01726bda1259feb8f11e5e76308708a966b4c0136e9db34c" + +[[package]] +name = "os_info" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" +dependencies = [ + "log", + "serde", + "winapi", +] + +[[package]] +name = "os_pipe" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib 0.18.5", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +dependencies = [ + "base64 0.21.7", + "indexmap 2.2.4", + "line-wrap", + "quick-xml 0.31.0", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "pot" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df842bdb3b0553a411589e64aaa1a7d0c0259f72fabcedfaa841683ae3019d80" +dependencies = [ + "byteorder", + "half", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro-utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f59e109e2f795a5070e69578c4dc101068139f74616778025ae1011d4cd41a8" +dependencies = [ + "proc-macro2", + "quote", + "smallvec", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "quote-use" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7b5abe3fe82fdeeb93f44d66a7b444dedf2e4827defb0a8e69c437b2de2ef94" +dependencies = [ + "quote", + "quote-use-macros", + "syn 2.0.52", +] + +[[package]] +name = "quote-use-macros" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ea44c7e20f16017a76a245bb42188517e13d16dcb1aa18044bc406cdc3f4af" +dependencies = [ + "derive-where", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.12", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + +[[package]] +name = "rayon" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom 0.2.12", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.5", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "rfd" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373d2fc6310e2d14943d4e66ebed5b774a2b6b3b1610e7377edf124fb2760d6b" +dependencies = [ + "ashpd", + "block", + "dispatch", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "gtk-sys", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle 0.6.0", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rust_decimal" +version = "1.34.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39449a79f45e8da28c57c341891b69a183044b29518bb8f86dbac9df60bb7df" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa 1.0.10", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.10", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64 0.21.7", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.4", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling 0.20.8", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "softbuffer" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071916a85d1db274b4ed57af3a14afb66bd836ae7f82ebb6f1fd3455107830d9" +dependencies = [ + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases 0.2.0", + "cocoa 0.25.0", + "core-graphics 0.23.1", + "drm", + "fastrand", + "foreign-types 0.5.0", + "js-sys", + "log", + "memmap2", + "objc", + "raw-window-handle 0.6.0", + "redox_syscall", + "rustix", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.52.0", + "x11rb", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib 0.18.5", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "system-deps", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" +dependencies = [ + "loom", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" + +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.52", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "swift-rs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sys-locale" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" +dependencies = [ + "libc", +] + +[[package]] +name = "sysinfo" +version = "0.29.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccba570365293ca309d60f30fdac2c5271b732dc762e6154e59c85d2c762a0a1" +dependencies = [ + "bitflags 1.3.2", + "cocoa 0.25.0", + "core-foundation", + "core-graphics 0.23.1", + "crossbeam-channel", + "dispatch", + "dlopen2", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "png", + "raw-window-handle 0.6.0", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.52.0", + "windows-implement", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "tauri" +version = "2.0.0-beta.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4c18889ceb808488d2a3b2707efaaf8b4d0ecb04a4014b2eaad97030d51b4e8" +dependencies = [ + "anyhow", + "bytes", + "cocoa 0.25.0", + "dirs-next", + "embed_plist", + "futures-util", + "getrandom 0.2.12", + "glob", + "gtk", + "heck", + "http", + "http-range", + "image", + "jni", + "libc", + "log", + "mime", + "muda", + "objc", + "percent-encoding", + "raw-window-handle 0.6.0", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "state", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror", + "tokio", + "tray-icon", + "url", + "urlpattern", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows 0.52.0", +] + +[[package]] +name = "tauri-build" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4671dc132fefbcd7d17c4019679abc190717216818dee608a4990418ad66f335" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs-next", + "glob", + "heck", + "json-patch", + "quote", + "schemars", + "semver", + "serde", + "serde_json", + "tauri-codegen", + "tauri-utils", + "tauri-winres", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "027be730d88694e46ccc4e3a17e17d53e697c1ef27b609d6f0df400b54e6766f" +dependencies = [ + "base64 0.22.0", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.52", + "tauri-utils", + "thiserror", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7b6bbc2a8a739dc3fd351d864e9f42d83833afbd938f3a2c2d84f6d945dfcc" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.52", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.0.0-beta.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84ccc2181a81c66f2b203775b6b67590cc357bc477c57f0fac844c31dd5c474" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "tauri-plugin-dialog" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c7894fb904ed003fd15915b263655672be4e4581298f7fa8916016e50010ed" +dependencies = [ + "glib 0.16.9", + "log", + "raw-window-handle 0.6.0", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d71f69535111078131380bcf2a4c2f190ef4d045a33d787a606e7d4fc6a786" +dependencies = [ + "anyhow", + "glob", + "schemars", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "thiserror", + "url", + "uuid", +] + +[[package]] +name = "tauri-plugin-log" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0a35ecaa923a40a2c86c758e6927d40cb8bc74d975eabae14ccacaa3294fa8" +dependencies = [ + "android_logger", + "byte-unit", + "cocoa 0.24.1", + "fern", + "log", + "objc", + "serde", + "serde_json", + "serde_repr", + "swift-rs", + "tauri", + "tauri-plugin", + "time", +] + +[[package]] +name = "tauri-plugin-notification" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c69417d3e60449a6b88fd8af94854a39cab6b5096e50bdbc433d5271d9b465" +dependencies = [ + "log", + "mac-notification-sys", + "rand 0.8.5", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-winrt-notification", + "thiserror", + "time", + "url", + "zbus", +] + +[[package]] +name = "tauri-plugin-os" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d3b15199f234b9f9c9df69e75aaf0d3e001ffa71c53d7c91c0aaca02964503" +dependencies = [ + "gethostname", + "log", + "os_info", + "serde", + "serde_json", + "serialize-to-javascript", + "sys-locale", + "tauri", + "tauri-plugin", + "thiserror", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e5c2d4187bc552d1be72081588c34187eb29e4c375cdfe99872f8d57b6aead" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror", +] + +[[package]] +name = "tauri-plugin-single-instance" +version = "2.0.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71935cac98dffdaf038126e1198c40a2a3433466c6866f662c92ec6602f31b23" +dependencies = [ + "log", + "serde", + "serde_json", + "tauri", + "thiserror", + "windows-sys 0.52.0", + "zbus", +] + +[[package]] +name = "tauri-plugin-window-state" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0a47b47cc725c1aa53b590c0d14b562bc0b46cf238bff61fb757662d087f75" +dependencies = [ + "bincode", + "bitflags 2.4.2", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror", +] + +[[package]] +name = "tauri-runtime" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52dd438ad0324372d2260e2b440f1df95a77c396dce0c0086383e7ab24d7cc6e" +dependencies = [ + "gtk", + "http", + "jni", + "raw-window-handle 0.6.0", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "windows 0.52.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b38a6017dd8d457270785e740756280fa0139607b428e92e8d7f1f0799d1ca" +dependencies = [ + "cocoa 0.25.0", + "gtk", + "http", + "jni", + "log", + "percent-encoding", + "raw-window-handle 0.6.0", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows 0.52.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ec939fd261ec3848b30027a236c0c5a9039d48fa729b4873bdc353a1f4afff1" +dependencies = [ + "brotli", + "cargo_metadata", + "ctor", + "dunce", + "glob", + "heck", + "html5ever", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "regex", + "schemars", + "semver", + "serde", + "serde_json", + "serde_with", + "swift-rs", + "thiserror", + "toml 0.8.2", + "url", + "urlpattern", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + +[[package]] +name = "tauri-winrt-notification" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006851c9ccefa3c38a7646b8cec804bb429def3da10497bfa977179869c3e8e2" +dependencies = [ + "quick-xml 0.30.0", + "windows 0.51.1", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa 1.0.10", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-xlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4098d49269baa034a8d1eae9bd63e9fa532148d772121dace3bcd6a6c98eb6d" +dependencies = [ + "as-raw-xcb-connection", + "ctor", + "libloading 0.8.1", + "tracing", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "tracing", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.4", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.4", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "transmog" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3a7f05cba0120a41e81c7309f084e8b1014118ed19857d6e878c79f0fc4efac" + +[[package]] +name = "transmog-pot" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f777f5fd9b33fa0fd78c5b5ce0e23273098a4f3ff37e3a9b22733b43e71f914e" +dependencies = [ + "pot", + "serde", + "transmog", +] + +[[package]] +name = "transmog-versions" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8950fe6741bdec0c5efb79db30d0f976951653996ba7bcf81763d04ea014135c" +dependencies = [ + "ordered-varint", + "thiserror", + "transmog", +] + +[[package]] +name = "tray-icon" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4d9ddd4a7c0f3b6862af1c4911b529a49db4ee89310d3a258859c2f5053fdd" +dependencies = [ + "cocoa 0.25.0", + "core-graphics 0.23.1", + "crossbeam-channel", + "dirs-next", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "treediff" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d127780145176e2b5d16611cc25a900150e86e9fd79d3bde6ff3a37359c9cb5" +dependencies = [ + "serde_json", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "trybuild" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a9d3ba662913483d6722303f619e75ea10b7855b0f8e0d72799cf8621bb488f" +dependencies = [ + "basic-toml", + "glob", + "once_cell", + "serde", + "serde_derive", + "serde_json", + "termcolor", +] + +[[package]] +name = "ts-rs" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2cae1fc5d05d47aa24b64f9a4f7cba24cdc9187a2084dd97ac57bef5eccae6" +dependencies = [ + "thiserror", + "ts-rs-macros", +] + +[[package]] +name = "ts-rs-macros" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f7f9b821696963053a89a7bd8b292dc34420aea8294d7b225274d488f3ec92" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.52", + "termcolor", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlpattern" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609" +dependencies = [ + "derive_more", + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +dependencies = [ + "getrandom 0.2.12", + "md-5", + "rand 0.8.5", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126e423afe2dd9ac52142e7e9d5ce4135d7e13776c529d27fd6bc49f19e3280b" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.52", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "watchable" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45b42a2f611916b5965120a9cde2b60f2db4454826dd9ad5e6f47c24a5b3b259" +dependencies = [ + "event-listener 4.0.3", + "futures-util", + "parking_lot", + "thiserror", +] + +[[package]] +name = "wayland-backend" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +dependencies = [ + "cc", + "downcast-rs", + "rustix", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +dependencies = [ + "bitflags 2.4.2", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +dependencies = [ + "proc-macro2", + "quick-xml 0.31.0", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys 0.18.1", + "glib 0.18.5", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ae9c7e420783826cf769d2c06ac9ba462f450eca5893bb8c6c6529a4e5dd33" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.52.0", + "windows-core 0.52.0", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "webview2-com-sys" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ad85fceee6c42fa3d61239eba5a11401bf38407a849ed5ea1b407df08cca72" +dependencies = [ + "thiserror", + "windows 0.52.0", + "windows-core 0.52.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" +dependencies = [ + "cocoa 0.25.0", + "objc", + "raw-window-handle 0.6.0", + "windows-sys 0.52.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53b97a83176b369b0eb2fd8158d4ae215357d02df9d40c1e1bf1879c5482c80" +dependencies = [ + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-implement", + "windows-interface", + "windows-targets 0.52.4", +] + +[[package]] +name = "windows" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +dependencies = [ + "windows-core 0.53.0", + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-core" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +dependencies = [ + "windows-result", + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-implement" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "windows-interface" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "windows-result" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd19df78e5168dfb0aedc343d1d1b8d422ab2db6756d2dc3fef75035402a3f64" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + +[[package]] +name = "windows-version" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wry" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b717040ba9771fd88eb428c6ea6b555f8e734ff8534f02c13e8f10d97f5935e" +dependencies = [ + "base64 0.21.7", + "block", + "cfg_aliases 0.1.1", + "cocoa 0.25.0", + "core-graphics 0.23.1", + "crossbeam-channel", + "dunce", + "gdkx11", + "gtk", + "html5ever", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "objc_id", + "once_cell", + "percent-encoding", + "raw-window-handle 0.6.0", + "serde", + "serde_json", + "sha2", + "soup3", + "tao-macros", + "thiserror", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.52.0", + "windows-implement", + "windows-version", + "x11-dl", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading 0.8.1", + "once_cell", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" + +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "zbus" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock 3.3.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "derivative", + "enumflags2", + "event-listener 5.2.0", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tokio", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "zvariant" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "url", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 000000000..dbbfaf353 --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,47 @@ +# https://doc.rust-lang.org/cargo/reference/manifest.html + +[package] +name = "museeks" +version = "0.20.0" +description = "A simple, clean and cross-platform music player" +authors = ["Pierre de la Martinière "] +license = "MIT" +repository = "https://github.com/martpie/museeks" +edition = "2021" + +[build-dependencies] +tauri-build = { version = "2.0.0-beta.9", features = ["codegen"] } +[dependencies] +tauri = { version = "2.0.0-beta.11", features = ["protocol-asset", "image-png"] } +tauri-plugin-dialog = "2.0.0-beta.2" +tauri-plugin-notification = "2.0.0-beta.2" +tauri-plugin-os = "2.0.0-beta.2" +tauri-plugin-log = {version = "2.0.0-beta.2", features = ["colored"] } +tauri-plugin-shell = "2.0.0-beta.2" +tauri-plugin-single-instance = "2.0.0-beta.2" +tauri-plugin-window-state = "2.0.0-beta.2" + +# non-Tauri dependencies +anyhow = "1.0.81" +base64 = "0.22.0" +bonsaidb = { version = "0.5.0", features = ["local", "async"] } +dirs = "5.0.1" +futures = "0.3.30" +home-config = { version = "0.6.0", features = ["toml"] } +log = "0.4.21" +lofty = "0.18.2" +memoize = "0.4.2" +nosleep = "0.2.1" +rayon = "1.9.0" +serde_json = "1.0.114" +serde = { version = "1.0.197", features = ["derive"] } +strum = "0.26.2" +strum_macros = "0.26.2" +thiserror = "1.0.58" +tokio = { version = "1.36.0", features = ["full"] } +ts-rs = "7.1.1" +uuid = { version = "1.7.0", features = ["v3", "v4", "fast-rng"] } +walkdir = "2.5.0" + +[target.'cfg(target_os = "linux")'.dependencies] +dbus = "0.9" diff --git a/src-tauri/Info.plist b/src-tauri/Info.plist new file mode 100644 index 000000000..fe253ec7b --- /dev/null +++ b/src-tauri/Info.plist @@ -0,0 +1,10 @@ + + + + + NSCameraUsageDescription + Request camera access for WebRTC + NSMicrophoneUsageDescription + Request microphone access for WebRTC + + diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 000000000..f56d31b50 --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,43 @@ +fn main() { + tauri_build::try_build( + tauri_build::Attributes::new() + .codegen(tauri_build::CodegenContext::new()) + .plugin( + "config", + tauri_build::InlinedPlugin::new().commands(&["get_config", "set_config"]), + ) + .plugin( + "cover", + tauri_build::InlinedPlugin::new().commands(&["get_cover"]), + ) + .plugin( + "database", + tauri_build::InlinedPlugin::new().commands(&[ + "import_tracks_to_library", + "get_all_tracks", + "remove_tracks", + "get_tracks", + "get_all_playlists", + "get_playlist", + "create_playlist", + "rename_playlist", + "set_playlist_tracks", + "delete_playlist", + "reset", + ]), + ) + .plugin( + "default-view", + tauri_build::InlinedPlugin::new().commands(&["set"]), + ) + .plugin( + "shell-extension", + tauri_build::InlinedPlugin::new().commands(&["show_item_in_folder"]), + ) + .plugin( + "sleepblocker", + tauri_build::InlinedPlugin::new().commands(&["enable", "disable"]), + ), + ) + .expect("Failed to run tauri-build"); +} diff --git a/src-tauri/capabilities/main.json b/src-tauri/capabilities/main.json new file mode 100644 index 000000000..42cd0db2b --- /dev/null +++ b/src-tauri/capabilities/main.json @@ -0,0 +1,45 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "main-capability", + "description": "Capability for the main window", + "windows": ["main"], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "resources:default", + "menu:default", + "tray:default", + "shell:allow-open", + "dialog:allow-open", + "dialog:allow-ask", + "window:allow-start-dragging", + "os:allow-os-type", + "app:allow-version", + "app:allow-tauri-version", + "log:allow-log", + "menu:allow-new", + "menu:allow-popup", + "notification:default", + "window:allow-show", + "config:allow-set-config", + "config:allow-get-config", + "cover:allow-get-cover", + "database:allow-import-tracks-to-library", + "database:allow-get-all-tracks", + "database:allow-get-tracks", + "database:allow-remove-tracks", + "database:allow-get-all-playlists", + "database:allow-get-playlist", + "database:allow-create-playlist", + "database:allow-rename-playlist", + "database:allow-set-playlist-tracks", + "database:allow-delete-playlist", + "database:allow-reset", + "default-view:allow-set", + "shell-extension:allow-show-item-in-folder", + "sleepblocker:allow-disable" + ], + "platforms": ["linux", "macOS", "windows"] +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b259b08b665116aadd9365a23f1534cb6b9e69 GIT binary patch literal 11705 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0271dc331757be4d91133c839964d7c3d65bac84 GIT binary patch literal 2088 zcmV+@2-o+CP){Wb@d&d!L^F-d$LdKoht#H#d9lfB*BH zbH4MPb0yru!5DL{wr$_^9^yzA3v`HdkYT~KnY7HD`*a8iK*L7FhHID`HBHk$-WZJpv*T28$oJ3_zm8po9NEeahsl6@|+RXMJMcqKt`mzB^(7+-C|TN;i1i(Ef zunyXNJ9lhn1#8zm_3t+HsG1(~h>}84aY93eITJ;?ine=7{58|E`&7*c$f8`jG#9aB zufP0o@#?h+5Nu#1gnUm-?l`|9^TIP6hk54V{IT5&4+2a& zxdWjzMOFl6m+n8KsWTpW?5}%vzYKQ`yI~n}(hx$Ehke|-@0UDY(X40FW~K$!uUqho zt~DVMI>C0YJR&031iD646H!`Aj-~i0yyu@(baZp?k=!I2p&E8y zdQjDFpd(5pO6xhebe|%<)6jvOIrp#1zjJC1x5aH<1At#w78Vp%3mM+7m~KcyGCgj7 zWm4Iang|ZJsQAmm5N2g~(AsZOG=SeM3ZbsG8^1rJA}ig40MS(v66|z528+gZ<6OU2 zSzfrTDAlHv+DzumoxkWn#Dq-HQ`Ou~>@?mdV#kFj&Ro{;v)MuHIWHl9w1kGX2%aV5 z6VenIx&ezKY+qYhkO@(JdknKaHg^&5yFVpuIw(xjB}B%g+`RLBIux#ggX$CDDH-P# zak|^U;}subd5#~m$B6iCT@0CI+~w6^ZL{6J!P+7!GA2x#>e@6-xE$gy*cSI1UVpHM zN{CX-uGh|V%6UL$yx#G-@)o?`%kbQi5PD+zmG(TOy3#|Hq+9Z)1$`db!NpS9IHI;p zcET|eD|1I9N7nFsZ3ld^h!KnhSCC3>E|@@`S%^iu)6)brQPQvH3ny1Qk#EhEbgan+ z%HHinQ(T4*)(v|rNs8^GvN2+P5jC#cu726J;P!8qk>REbjk!c&Z3xZe(dC}Es}`P| zJ{q4MYv60|gwbMp9hQA@dO9Zh8Mtl?%mj01277$E7va{X#>C7ZULj#JcQsW1w>QH7Wb^FnAoS+Vz2-PsR#_>%wzHKRE*^7CGL>)nQe<0=gXwyjb#TAd|hl%e7e z7cFG_Bx*($*A9qu%EaBc$?(}659Venp!M)lC|Y~s*jwLAA!anJ7;IbN1bq472ktt4 zqP9M@8Hrcb%C>o{ywuj-IZ;9X6U8eFUTCEu}4RB4-oQ5q!{iHAUQ8HCzrfa zHgst?d@+inB-NEoQJnrzLmHK4XOF7?xL}G{xno=Di@RRk$897<2t&!1J969B{#SOs z)VX-|W8XN^q}}F~WgOI`A8ycnV zndQ@zQCE%gG!Ob@5C@NBw!;U$a_64c_s;Yh(T$(K|3T9~O04fv*=1EXoZdmt`B1{w z8T6Y57pp&RSQ2C6vS}fq-)6(^O2Y+`;778bCk?a2N2?=h!!dkQ0EVa-mei1&-Q)ieEhX|W S@nWk000001M literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1207cae2d8da75676f010b4ae8a4878ac03bbf7f GIT binary patch literal 9148 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d136bf49ebc209f15b70610169db1a34cb6b2d GIT binary patch literal 14204 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5e96f04f6123134103205a3c17044d8c05976f85 GIT binary patch literal 1901 zcmV-z2a@=SP)?io=Xdr#wVOF(q-silNA(+JRPtK*(cF$Y$@p?(V(6+jBO1F@^w9xidR= z_s%`P?|kR+owFLg!KLIb{%+^4uYJa3UsUO0Fw-wGuxq^Sq=9oO6jDlSVMAT*Q?1WzHg3M_p0*1D z$HQ?9=_!~Q3#zo?6$&bSZq%0h&{PJ9Qy;cH+uE|OBlOWx=8ntMfI1N5##;p{847h|Q$RWidFuF6_(Ypjy6o|H$^G9Q-Ec7CuJaUZrMgfvteI|amYW142SXp3}LH<=Ur=h89D205=t5XGR z%%Ls!s@QTehL=z3*hI`1Rr#>?mLjB+aXfb{j`DmrETSpLbSxL6*QJV+{W`9@`Hm)X z0y)X$BFy%!T~$_6h>B@5`p%~*jEWem#{AWyQ>Nsp2vMF-MF#Q5#xl5M1`oa)$5aBP z4!lH&vW$hI495&;H&)h6ol;TM(-$7es*^*#khC|Yc?(kHHHUYial<(;atkEszG`nT zdJGk<#6FVBkd1P=NrnuOv`Aw8g#~^m+~R9Z426w=h+$#X^?u~bBzF977(N#@k!@e) zfUi=~939o;3EgX^VqVqj@F_6|!BxIKHL{picxil3j z4U?!I)14VEa==RO-~}CDobTp*QOn4&-YeOUje!*PYi%*=3(|P(!(oIiH!3Ob8}2B9 zi-bdtqs+f7nyG<&56o!zY+rvk!jH4SIjK|`z5C;jf(@l!Bur_GF~%nOHbMigrPhxH zg&9O`Hw@uM9=+637eH-^HX1%L+J0k!QyEL%IHdq*{_}CrV$mV2i|youd*_aSyzv8n zh7)>0tfGZ}j3!Q*pEv5^$)ft&mwlGH{(oX)77ULurphuh!Yw?D*$9Id`&NGzIH zKl}N&J~*;G6ai_NUEzWK9)o^Tg(?rNLwO1f3p*R4o=6(8 zv~8!23^p(Ojp%U`eM`4}He%5jRKljF_^G5> zNR?b?@UZZ3Lg-n=B~dyyOP8^KYBhzq)nX-<^>=;XLMf$(veR zurqXbb#dXt_byqmyE{gkrDf)+w8&s|9xJ&!_X^Kt3IsVa`pNL3WlGUPpndyZ`NI?I zpK5W|s4K2MPC@Q|=iT>ib){m>4=!JF&hm&8LkXGASQZ;-SwlN(%nlHc9XBj1NsGYk z)y3+s8cUS}e|>g6gN~UClUw$3{U#SRHr(D!%UIL9 z-Tyuud~?^1?Qgx`9vW{u>Gk%~g?@CSclxiovb@OeXTetx)pfmh;ERZ5U&DodyaQMI n3zJo(Yxx)Eay9U6|Fr!d6jaVcPhe%?00000NkvXXu0mjfls2-o literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb0a5a9fbcc4d07056cb8f87ba1cfb0eae0f999 GIT binary patch literal 33196 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 Eg0flTrT_o{ literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a18f49170cb567d7f275d4ecc0ad0566b36d0b40 GIT binary patch literal 5661 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 M07*qoM6N<$g4`}qmH+?% literal 0 HcmV?d00001 diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b10dff92d00f2fd91100cbcbe5a37f7d38dd1f GIT binary patch literal 3563 zcmV0{sPnZ^Vr$s~YoS^K9t-I;Xv z|GxiS-+TXX@G}|Q|A7oJ82?Z&wa=8mxFz%5tQWB?%iy6SIVBt_S(#arCnZmfO-M*IhMTRD0z56bjsd~b)!FW7YP@{*T=mJq((;ns`-+O| zYA-egOpzt64i(U#fzaw922R95f6tkdpT2U%!;j}=Wi1dQqRnU8ML6MbLrt3(99=%} zhzd@kfQbc&GjT9F(g2g=!eEk(2j0`#Sy5KDbK~YW-`KTlSDEUxI0(#OeQ8iYXvqRL zt)$#NW74bZ*S(mYlUGpXlwte%R;X-pi_IPx%?KDhFf4~}N2dW6fiNT|1}dV1}(bKVpnq;4`Li_K=-^~pz{rDf&JU3J(2+b(%U9m{eS9j&|?UIW4hgzj+5Ay(>_Ayj!LODsZf$Aq*5CIp|5Ew(7*se|Q5#1Z2rEhx1MPD#hxPz7Ycnt(R~M7u}NkajT4$v)w=MWcC3 z_m%T^+?_t%+3e^-pJDs+8MeRZq$MjdCnIWNL781>l{r2VZNf)FFgKQnR8Y(h2hE0o z4P=(%|G1+@5Uok$_I&Z_jzFGLG^!9Z9rWiHq>T;h*FSUrLk~SXZ-1k&*5?Nysc{RS zTa>|w2||6l;umb7gY5x;OwvvMfiD#CS_v$U9)I~{MpyA&v#?@*%GhYDh267fZ;2*T z$fiZfj$%25*u#~jXI7o+gw2;FC4mPMRdd@_7RUsAsHt0oOdCMSoCFvdrh^u*3>?e!={Lwgz>Arl!&yIA zJPMr7HYj-i8@T7gi}0@#Enq@5^rVnzY+%rH+&h)^(p{+;xeFIA%q9>TzYEFPpLq25 zj~{LaC~d>2g)pRE6ZnS#)AiD#@8N*m4dwIVVZq2SXmU$v=YB9skNeSzR1kFj5J5CJ zTHxV*4ImjKKxBE47~ORXK%k5`_jgX8QdQRpe?TgvzAp%SVXq0dDrrkh8Woq9oxR}Q zi!SgXSqO&KFC6*?r-MhnYJ)XLo$yv#G_0Lw1E*I4FH!^io<;J4!~uxWMzbhWp^L;D)R7-3OC z45sMt7tAbsuAu{NPfnh~py80LJ@X^iBjhqv14LqF7mr2J*R29MEjyUmD94arSW!FA z9&3l=4liuVOaNIFAZ5E9L_-9a8I|S(I|v}EpP?}IPB++Yiyavi6=i8@cDOVP@1+q9 zoy}^qnj*~BMvtVbbg)ASu;6$M$2;piFn7l#_|_%EJM+iDXbT5|JTzK^K){Ll#t;@B z85@of&C+xW)#)b0AexgUFekIzP$}FE!F_fO*Mfa2>urj zQX}+)mtM-SJPuR8;Wy|ThB6etiFM%elizHcmk4L;9k8mT9#9Cs+J-v%c$U3B+<_ZE z6fo>wU5UZYL)o1`*bF+@wdfZhv^B$ns1+w~MM5}u*)>NnsQf|}1fS2{ClIaJrXUay8IVgUN~nE6%H)kmBA1P^z(Rp`aaWUs|cIL+L9EM>fSUyn#AV^~^ zDCA3b$HLR&I9R;nJUm&=z~52m6%!($3Hx01|L0K?c?m3RD64~Tz6aACpj;-cVUtfu zMnV^+bbEI0*;g2lwU^m**8ow7I9|dwW^rlR&gEH)mc3WsjQ*+Pg4rz*IyW{q-kUuF z=9=A*_30(3W2~Uq1$dyS5w;_FB=v{$9Q=Be9%gU<1|}rNV|naf2qmy03iKc8CG4Qg zzkL{Y=-|QK-+g=j3dyJ~dQgq@RN2O@Z@+P;g@J4v%eqA9mF2biyIW@9gWN=zqH{so z7nh(`XM;%08#bPWO1l@9?foA9G(8$tj5ETLPivq~4u^<9ZA0cwk%%-(3nDAmrw9^- zTCSt96`nTA02)sBwKOT

XR;by+`wb z+Dq}6?3PEn;l=YF;KC!ps9A|8{(He+SmD{; zDL`E(ga5+=KkLA1EF*z|=NFA-GPCETl$Vtr?W_5q3!a@7g<3C{FV!_fM3|YsEX~U* ztatfpy{wKhKB4y^n35J545o10H=qKExvup?{$aq7Ml}s-QLPkl^)GZNP>UR_wu24@ z>hMfQyN?C5O1w|O`v77%!MAbAMDEQkn>TFTx^NWCSG@bbJw zK2~YFaK~M#(;W6D*N|JLYS_aEsew#g@zk9Bbgt>*`Qn^-ezH*%?1G{ilkO($Li$^# z477W3--PoDTTv5n2qG0hW;6TeC0SWn@nLLjYnOz@lkCQ=9*P5c#@{B=1y-r|;n$$QTS>iRMG*v1 z8Xuu3Yi1>I%TwZ+Et}uiaPQJ(4|aETdP4;!NTm7*p+n=o9^C!fmbW*3{`qG`0RYr-zqOm8*CtKkW?Dn}HtYZv%*oBm!@kp$ z+b2zlj)@s*2#bgWR>!MMN|pt8SEtK~^~9NT)u&3z50nrAB<`fKi63=)Iv5~Yyj~;@ z`%cudp>7AS_csctJZ)}nZc~e*p11zgUl_P9`~}7!zrrE+wQ=*40lCJHG%Z;HfGcT9O?UtR002ovPDHLkV1gnH$(jHF literal 0 HcmV?d00001 diff --git a/src-tauri/icons/app-icon-no-margin.png b/src-tauri/icons/app-icon-no-margin.png new file mode 100644 index 0000000000000000000000000000000000000000..337eb7607ad524a6c071be00df7be42adfb3a50d GIT binary patch literal 132283 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

!z`RE$Sn-j9l$U8B9CIwTxvAjRKx5U< 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%0D^CaK+os5{}^J@3{ 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/app-icon.png b/src-tauri/icons/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..69d52210d9f6a8b557f612812b9e33745f88869d GIT binary patch literal 117541 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

=dB)W`4cL7P(Bc&c0LdQm)QLbM^CcF(W_e1 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%0Ar))@py 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∨_fpM1J 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,ey&zug0ru7U`$ zAfW3$C9l`HV3!&J{H}SRm=#@XJBws4#B$i`{ydXAqNZNiyWJli_-t8p*e?lflZoI> zipfyuPO_r#yzkJ5(Lp*%im9-x#}xfz(jX~Nv?8b>)U@YhTZN3W1LWVtqrhbuvSS|4 zz3EG+g)qM!6*U*{Hm~-f2+-bmTHgGfx3IW)2PQg;q8+(FY;4>Lv=C+x0k1UJxqwM~ zIEaPn7!b*Ni4|fV{@vTNO-_H^8VM;SFBM@j+v=Z^Iad)-K>TI$In;}98YT|8PKbt| zInRWjm5XAbgZVF!U7p9yAk7fu|~{$CFda#h>p`q};*D>BF1 z!~zoPsg`H*e2R~Ak2cP3VDoMMcWh(}Ne?9WZ&xmYNHEYq(RibNXwUkUHVe`nA_Mje zmzzRbzakC}53^YBL|f5!bsTex$8pF=^TR-Rfj{VSmdTlaHuEXHh)c3UP~o%o`YYn>=bwg1vWYKIq53_S?&&(3;idJD@{aoSi1Pi)jL-5FrBP1dx*~UjugTwMtd3 zt(k2P2ac6yj7~3>fAKzcl$S|L^ADTay=i=(8!4X<*%(cwkir&pxk)g;SUQ=N#pG@g z^(6mW5qv?SygC3_8(kivnUHp+(Z-t7>OX31Q3@Wr);`c0R424h?bi3=jBhCpAF z;FIFh<1RvKz_hC&bP}ze03YAahz(NW=?`y85gtx;Dw6vy6I=E^P$fw{j6(%6LUH~< zH#I;+Ghek@ReJI8SzG%Q!kQ=@@}e z9?>_;JM?oqjfl%aHO@p<`Sy4`lZAy!Lq7gXLJYK(hTgKvm$eXh3*ry7(@o~y&e+;v zBBy(jps7JSudxGP8`IZ{A%T&HqQGM0sPN4&=g<+^<#fj}UP)ATizzqR;Mvh8!ef8# zr1D?=*%TN?io5j|^$z%T+Yt-`gV-+7Y8=0$J;9yO^lxWU$Ga!>6`sAix_X*9X0aFo zzcpLr72_XfB0UpZ8-wpo%nZH`)E&llKPPUTGR&{wR{S6K-ZLzUZrd7dqGX{#auS-H zP2?mE(qs_H89_iK=hRIS5G5y(B!Zyij1rpAfPj*bC{Y9iBjL z8tPE5ptKB+Sa@>sJH5)x+Skg*A?0uNnJ`efKaHr$2U&}%H+nQ6FMFzszOip^Z=;)7 z+*>_&fl9mRaM|y$b1tV10$wl)NL-p>RxcD$TcMdLT0H00vJ;UmWE_?%pVKhodQVVt zHZGQ=Ilrn9-!A5@vy?t3Pg%JQI5>)gLyPDX>1$sa!d<7AR5}= z1nv#IqFdQ`l-m~ih)^gUGxp^{q5ZdS-(=ZCk49Uh=W%7<-bg;w)lKx7Fsx{>J?ngY zW#{zS3s4EX;|Z|y3--DDOSpo#ICb`ySj6Xzbk)o}e4bl}w<0*jD(PRNJ%6w=1+>|W z+{QqWJ0kkV38%IaoZV#IA$LB`P*dKZN#F&kVLg>WFEP@5q96+~>!kPkc1P#Ky&u?e z-`AAD-JV8uUv6(cAfpqaN_x#yAV;n<CGK5&9};QSzmSy!YjT*xOmB!As`n%9NCp zx~C^6*d<^|>jhEF<=`I=MXh-PUKSFNhrym7tyZzYcR+U1&b0KKIk>8g&?kV=o6rY@ z7KR)IR+^D-?~9iFCi02zZVQS{Fo+7vzdkDDoNL8YI%2*FKCUU@ucDTqKKc5fL+l(u zi~tpo(t;jE?ox=}h!m3!jeEoQ3iR!n_{KaP3s&vb(95heekucnAH#WJ$@sSSx?J~I zSXdr)vujVrPv?c@QX&Qa(7qGJ;DO_yeOS!pZs^%^OjGrg`=5n2bA__mp6lHg9ghj{ zKstgtIM9uX^qx49dT;0wOUOg?tp|i$d9etKstYJvyb$pV9@$%Z$zMS3ndkPmvz226 z^@F%M3Noc-_AWaMUr^Bv-tg74#V&r?#Lr~5C&m*WIAvW68P(g*n{Z4kazS$43^G_f z;>kxA2x#SN5p9+SM8DV1!2eaiOmD`YKC@AWr^7olt}AE{Y>6flbJljv>M8KTC6A>J zIIusSd?G+VLeJaV6?`|nHOdWy>1~fYVFdV~9CUn=dwUA4ucOqV8lgfrP52uruIg-V ze1VzaO>R!HalWH0AK48~NzZZNQv5EmDjqyND#nQl)s5Wyu?t^**DH#QhTro2WlEhk zU9bnI2@Sv?mVyEVeL+_pIC_34!WZVo60*M+?IEr-UZ|WsMO_$8seECQ;?&q_6(*ok zY>|C{ZW26Pvqi12y6GOI=-oim{@e^6*66ADov8MXmj#>adbWF2n&q%xwf?ian~6zV z&fH>M4)drD2Z2iH-a!e6)?+(-(YsH9#lTci;@y!dB--&nlf?ycZGIywRmp}J2tf+4#~32%)wt!BG;J1 zn8x}p-$rssIUs=kEU22&(f|wnYAcc0Ac4H>Cbu7-%YcFsoRU18+$*Op|D_CG=Uw&_ zyAra2^ja_hub4{&7uFxqhV|n78qrZu>6Nr#r@ZHu5KvQ^s;Zo5TBzJ;bZbC~P+6(2 z`Pk$!|J|try;;EBNJ+Ve$?zi*GJv7=->^fZSWhA9d#IW7V(#-Y*+1wqcfn7pnF5 z?%iu2Onl~mJ?!Vp57Ga4(bCf5V9gljF@O)u6K6RZytiD@=37%$?w`+py)n)OQuM7e zVqg~q)}%LOxBX_@D*4uCGrk~PR9ywclE_j-J-7%Tr>AS0j}qi0Q|X6iiVhYG*&(QY z-I3`iTneQp3XQG>6Qz{-JrSH>_2jhYosSKlGH*O({wV2z+xd~Dj#m)4pj9Q!+mxJg z3uU*&X0P}d=UUZ%^Xv0*5psB< zglnpR8Z5#17r%J%^8$Vhk%sHU3@4!qq>eU?;O6hfE}t~jPKk%_xLdz`<`Wx@AUjSM zroZMenZMvA_v?kd-ga7q2;KZf_zS%WMxP4Du(?DokgL5Lf#6<4QJj>hli9s<#dM{gfLSFak}?<)12JQ z6+x%q8?{7ml$;#0(Yx+W>1f{5E|wpfleCR zZgz6#G`+mmHk~M6jeS2slyuO^&s5eVQfG%3CaN0M^KVmN4%o`ij|>E;H(Q;Y@f^0h ziPyI&sWuPIdROC@$fqA_&n<@xemt?xQnKHb=l)%;egu2@nS}b@MU~^N*CN1MTN7OY zHA+(PVl?r~x7|Ypdge342V#JxWiwP-@)hh;8hanK-Jl0uEiGpTiVRj>=WCf&&Tekl zRM&egNeq&LO9`A=^>pF!QxAO^K0dFiaH%gq=|^~dDs3DTwi#fRr`{}>9W@&|bzCjo z6sDLC_$8I6_p?DO2*O52cH`A82P>01bQ5O*uky#Y``rvZbJ_Zg1mXuqU`ZqqEwSNG zVsc+eR!N^yukd`ejSlFrqFA6x5xzlIEx|zG9!qa8VSli%8OZ|+ovy5F{ZyGCNk>(4 z^Dh4vO@2B^_x^9+MCH?8fA~6EI8OMy7@AV7p(NHSmcqRGashiwaK(c!+${k68wF}5 zH@lQnGxbKVzrRHdvKd%)7KBXIeWo4!sUkV=p)x1ZH1Bl|2pyGnkwK*7;q-ihN;-xe z7|NWqMdb=fa~2T~KHd~N6&?~PFFnUqLGAc~6td+$A&0p=4L+`2;0L_f1v^qVBHllp z94>p2ls(lv=eHZITl!<%dQl|8Fg|DzQD3uq$ox2Rh+V!!GQxE!@((hwLi$i>A}sIp z_K(%X-#lRh6$E-x8oblpCBHcsJMNj++ElLZ1IR99GmFYst?^OL;gQBd(Y= zrUXKa6MqWS6!Yz$l#%@9QqckI^+hjY-Hwjm9>p*P`!Fz&MMur=MV{!@q|!4n#wEXe zJLNG>qE@>?@up6=#Ym|_gpX+H?#d7{W*sEw^k-nxwqT|Nb#JNBsrsG3P$LQG+0WHe z=ChjixySidm*Nwi%_1L)3#ukYMyeC5;`*9gXAU+7#gJ(5!`a4XZ-R|{BrXo_H!V>k zK2Q;Yq~yi6mmBZ}e~ajc1AJCu@9IgbE+8+skuz@jTBk(p*LsRyjg>xOxcTjZQ2{QJ zUOV9$y_V3fe2F7lj!IZE;ks*Q zA38fb=@Y0*r)0RV&yNz8v@(Jo0W9(nr@D*!z2YP>`gn))pnx^Z=^{LWTNybE$Xl8O z1O%J;*rSq(xw$gzw%t*20NtlhkI#`T%zMK<3Ut8Ig-bG)(3GJFpfW8}LOQhU)0qO4 zA4J#J6@a%3(`z&v6Nb}X^Nflc-V zgI-r0K3L2wQcBBdRoK1$?s^E3n@tCtp)IwKet3a~U~)w{fp7#!t%|72kAY27TC!gC z@c>e`>pEu0!G08?8WlmyruWuCHwr<5{LtUAwOod7wX8R}`6MSSV_f!frVe*E_?&H6 z?(nPC&>F||XI~*UX)jdh^`@-h3iJajjx(zHas(0%(it*)am_)1KK|oF5iujJhS#sg zjoS}yM2-`YXNs7gyw1qT7(Vc3C?4NbZFK{`(@(uct-Qp{3nlGMe45^7c{U;KdvIoV zb|^e?Qg;oR*mm)RicRK-mF043dgFTSeib%U{guaru*8M%#{6$MF3)r+*uxvYBeGFb9}SR8uRfeG||&%N%)>p{!&clw>Fqfs%)3@l(`*j-)>Q=}7pKOC-p#yPaXDoTJh!~SU>%a|w==7%!?^ei`xq8r z{ZfHK0i?3TOW48RJc{Qm^^-!RT|NyA)v#Q(|4KQClL8b z7=OhrP3gOi3RmCXPxU0-IM0%Hfx4mQiNStMF%EYFvR}I&5jU#05 z6&8za0v<4$;5%kX+1lOO@?O-Lcyn;@<7RN)FbEU?kgX*Z13*~67hfT_0b?4uVQi7? z;_jZ`ueK$3Pi=iT`|j3i>)@vxJEzrFp9obYy_cDD6kh_ZxpcjmO%q4+mkiN6W({+B za+vDf(`j8dCUEu3nosu^*PTH%duLgrZ_m1x9+6+rcX$hO?5QaN7FS9*!T%hfd8M1eK3~lK1 zP1OIs@>+9xVQxRENqa$IfF_L{TVnXLEpTtCv+10*t?kKhp5oqEf7NFDRjrIW;8d_^ zS75&E6&DDkfKLqqO^~_|bU3qY9nU}dt#l8lUEO+lYZgJ7GZeVP?=I;*9egji>UKb; zDcXvBy5pO6vB5YqGjsNN4V_qRLam9OG+~vL6jSqa%dX>;?>6q1?fHiD{S?waA|oT) zmL&wlf! zq)sZSk0k&mr8#fPHDtF3_M?~h=w@pH(A>ei)#PWd{Y_tfdKvsxc86!5wkDIgJ`c4fHVndcUwk}Fee%fX*SG9SG{%mrL~&W`8@q(;O;#Aw%<4jf-1 zA=_U3?gL?x@BCY&iu2hGvl;czE1np-bclRm+0U}s#*;c%0)fPP_U?#rJzzD=ms!wM z?CLY=3my_ViM)2bV}cML1RQ%em2h!-~{im6*98`L{bWw+poGZh?RCS=0_iZAa?IpxPc#XAj zdO8m%$(YH2|DuGcLk&QnE9(-1NQi+GoJ}YaxX2R*RW=Nm-Nsx)u%7zzUWDC{)rAtP z<3sScZovxG^-T+*L_$vtW>R=&Y9n@9T2B82w*)Wp#x$@#HZ`p+Oy?2QhxBMgNP{3= zLyVwQS%2d;?~k98qwpNX$ImZk9#G=nel$7xW72m>afXxYucNT>$srvz&0j}@B0VVf zABPNx90dKx!G<6L{e3M}2R`T@m+D`$!9)Dx(o%wIkkUUcoxn2z{r$VYLBgQFf7TcD zzduX!zeWHY=YNgx|0^RDGPAI=-wRosQp`@T7EDy*`3UDoR);}!$uPU6(DH)~BX({+ zjDPvTqML)P4i9?Z=5#vzO)R?#tWfWq4dY&Quy}F0HjrNjJ|E`_o<+XOzd4q^6Og`R z%rTg*82sG!OkQ3-EEq`(01fltk^lfLGK%S__UsYk)t`jcwC>tVmpm5`$4Bg!g78ck zfjcu(kcAKEg-y?klQMW^Z~x+E2^^_=a=D<`x0svLY@B*(u(ta#I%3ROzZ|M&M`5e1 z#1X@j0HZKsFOz^Im$}Z#I$KX-(u0G8+l+$p0sOj4{ug!)**Q6>BZb~cjs6bvLh(3i ze*J*5$WcFN@#Ok2_1(YZU?cBnF?;$ATYyZSC~Cv3mKgv zv`oElX+q}>z@J7SLAJG3iHFqmpgXUt5|qL!uI#Pv-bj&ZNRZ>Ue0NAeG)U4e*~P3fKn*yru@m>9~%(*_5m%%?oRwW-HA zueeDPT5Kxc_BaepA--JFyD#+ChrdIrYXP5mR?{XDb)n&;i^pb1t!4Nn4AS9V4!@7DPKrHphw@0lhw@8z(vRDv~a zXvx9t?J-@S2r9f0DAI&f8=IdLz`Fc1B3Ljvd5@xdFE}Vj>dKfyH>n+!dLT z5rUz)52_7U&cVjqS|<(B)_o^i$k%M}l-S=7%+YserbvnWVXhCRWtV`v6D3p|1GGmw z>aVX>-ZDq}?Mz8r&ep=)P=^pvM05UQKoH}}d>1mNqMtQq`F z&-H(`;z6NB0f%bPiDkjn^Rl{wt*B5js8nG7&^!{fd=T0F#DiTQ=^ePkd>JRWpn7BEl` z$kI%2owE7*@^Ac$MHxfRsjD8Bc3;ip31!IsRFQSdfwiEgNZ0qUXKPcW=&U2!1~E$) z54{!sE?fLl4Y^kyah(JP6#RZ@CN8dj5V(d9%geUir=e{_eI9nN+Zohb32pH>4bCOQ z7^r>ewNHHc5u&$Cy@}?ds~HP4DSlhvv-5!=TrRq;o7`M3x6>ss+4Ex1tfQ@MOjTO* zeJ(Pcr3X;H4M;@x_Erwwtk9BM+%btU!$>-@hA=TTO~dsC5SXTc6o&To3)>ljOLwhZ z)W_rQlC+%C(r7M zDQUtRvlQT`Z{nLn@_^x4!hp?-sr6PiZ*sY4w@Lurl1SNmb5QUDZLHBsw%m-p0gk8k z+n<83AGh^CqV;IJ()xpcWp%fi7R)RKOHSd7zui`oKol1!L&36grotE@oyVBT;Zh zTM3(76dU-IQF{^N@ zl%PYX9S1h@=4(Sn$30_SpBKFa%ReL|GJJFmD#{;kFu|I7d~la;a5;al9o~8ud-ND-AwZE+c(CYL{KdlykMpc$zh>1m+t%IEG+Gmcs zS;|hu4_Ql($cUx(TR-|zeUz2ol7ZSFQN&T+#7+`6F;F!!yl5RoWhnGpf@C}ts;vcv z8?!rd=k(y#z*F2>7rp|DEvveEluplS>wS%})bIafH(!+0Ph2ByhqUr`Wn82{_Io&! zB@-lHyQEZ-`WvO3k47Zwho-4(+Eqzd?TH%+Yu4^+-r9{OZRg;QEWsyC?={8@{ux%_HyI57Fbbb1q)i+ItO}tpfcYdCxBvvt8HaRKVWc>VFQcitk#P{py1x za|{GBe$C_=&4eiK+C#B&ysujuH`XDwdDwOi)c)czy5LRN%wZw}d%}ae;iqM|(2xln z%pNP$7nYE4^aN9TT5@(+f_{O!rW&!@FPV_2CZ*7Zz)JITIY}t7^PFCPL7*?)M{{0x z!W&DBW5Y@V`-h7pr@$xr*aNrI;oDv!&3-0MBV3V2T^0glPP+tbwbbZ*I>Xjlj=VXI zWI|=Jc*T$(&a*)GMLC)omPZh>G&-!!iP0dg!e3qP@?3?y`kTM1DlnO_*83}z0Qfb; zBggmooS1cVPITG5-Ccz0qhb)Rm5-N&R{2AjIdQj`Y zn#wo?i^#8noTdLcQ!Z=cz`AYL|2ZkC@6EsW9lL!E7Xx?D`V}*Darp2D_7i+2tLp@} zRE4>XYdg6$!cN=>Ii8K=+|cHP`+J2K7}sLkvtF4VNJ+ZAvu3AF2n=zGIMGs9kLI*H zSAL61ovJHezAPCs_m~Zi8ZtMt(_6V2XU&--=TVh2uBEGc9YAgb_ROpJNEZ`zbQ!xQSEb6*n#hMYeEx8N>mv9 zeH4KKo)iRzrGXtJI(8Xh3N(?{n_-CqE1TH3jDYTZ=&g_x7_$1A87ON2t0P9wDCK$3 z{fVH9l-xHU;)GaT@9BZ+ZCqy^ph_0$DIBu-Tb+jHRzQwmNl7mBcV0BMee;4maDC)V7a z_G=O|`+UFT43S^!2iu*E`ZnGucZtDC%#LEnWs=#Ggf`EDwg1R(!!oOlv7U(#Oz_=N zv7k~43B@(?vFp7B`5O`N-v%M+in^XgGW4LKCvZLtdfyXU^5@sjsgDnJ+`4K2+a1+VC~Uqc_lwR0+tUOphtf8cSH#iylK09F!F6(oFA6AncF z$0sMhWU*hVX(pMjc!)1=94`7`Z$-m`&r_gl?b3;?OBB7#7#iwRzNhaMM4|2l*8+;b zn*r$RyVkUr(3GFMnMN3uKryG|sz!F9cej)<0TRm;Fzie|2??~*_JTn4^5>}u)kN)s$M!a7IHpNe`k*%;l)-(W- zv>ZNNQ8eMdM!Ua!c5%Gyw+mzs;0gmirc-@ zY6@ySky40wC2c^LmG4u{@37jH78wmQU#L=`U=!r*K~%>mNoP5YJkeirEipHy9+@Oy z&o~1jED0aY*E&We=$*r>Tp`;w)*Mqz5(Dp#W9zE!N9q{TO zuNFEGZxE7Dg;-GNTAJWx!q($ReF0*1eWi7<38yL|+JK^2=>>lL&taN#|G86}YXsMQ z6vDl#@x#|6Rl{%3@$KK~av*G=t~P!FQjrsZLT|@hxdane98&1IOgoMU?4D-AUBhV6 zCAM_A{MhxP=UxA2zja9w=O2>7kBb}>#Y8G)!f-ZfW@isHr@3pyEGc@oI7FlDFAg0P zO_-IR1UCs*T$b!ObYbd1;<-Edmzi^IAdmNatLL`*1=}%Y_n|*u&2Youa1?4jmX5H9 z(ZjYWKK?V?*VG6l3&BVFmc1imJ86+`35pG*O-#G0=!qyIC7;+{M^u3QVe?!ys$_V5 zGT3rzns1=6K5826R0vikJf9aUmK?y>g|hBDHO~!m`v`+KL@!Q8EjA_{`Z$IWF!dKu zX?7t4o1=2MiMBa}R;nTB$gu-OF4Od%Xj|j3r2u2B_qJyj+!oJ9W=`=`%-;@g>Fe(K zUI}`@0$(6-_*CjS9Z?bI$eIl-FS zW5c|`GcFR`1VcktnBv~CGAluSuvZ=-b3Nr~>-aXWXB=t}vJff0KV_$MEpfL>tJdFO zY*)Q&w|_N2I_E9ir1pYRMYWto&}Po#CSyx}22|1bd*x)hNX{uLL>QzMXbpTUV^(wn zt;5#fNBS`zn+@n<`)?GAxvYW(2+Ol?bRH~_1ihoTyO&fSnia;RYWb|=R4PVEeVtTF za9=1cpNo}OoHH5$q{fU~g&(exIj0wp^WBt~HLzG_0J#nX%O;fdxT;pz+V?rOy#7G5 zTVafdgJ7l>f>xDN$m)APnnH))x@!Nid+~aUJWJ~I@JtOzd@U6Ch&~;hAP1G;{H9en z%SkrG=|%i{L})X8WScEs;FVo+Wu?|9duaQ7B3^kPW8j+}4m_ohVCARxz-&Vglq!pDnZOGt7^!imGd8K zMT0IG=e5OL%06k9bPE2gv+K6N=92MFYG74h>a>ahAA4c1t?-tPv>(OeEsx;#x(no= z{OS`a-|(y{oa&6W6utO~T<5K@;SV2T(G$+>dW)YILsd+Qq{nAZI;%jnk*t$0jR5WP zz7nuESRwnmU%KOYtm3OD;iO%EaBL4+xXd$nNa2jLv+#P5D~pId&V*F9@5Qv787gBR zoB$hy-<6kGG7cimIa_(%g%0fl%r&}O3ldMA%Rj^1sv|iq-7{^ zwV0*tR5hS5nclJSY{Nf<(!(FB?;D3J6(N#nT`pjxEv9pr0 zKq9*3JHk;H5l9emgJ{6khcUFvj3j{2HW6X1v7O0Z3#7lJAO7-v7|;H0a3*V1zOdF@oVt3ltl`^Mm#bKf)2jDW^H$gfyR4;6OgB-Np z777G$^dXxbNGcTGxe}h2m{RY)^~6p2emvei(LV_`&Qb@sscmEKRm%^Y|Xqs)1%Vm%6xjaCCyGAf@Mzi&l7 zma#_)z~HbvKeg-w-`+6GLibfY8goElF*CcUvr3ARI*|SRbtcO40_UMyVuNQRC^q&f zERzWFdLE0~&FrNI>0r-YBntR@Ky$amB^_;HW65@icn1uP@Rs)|?OmGNq0@Uyu&WC` z*RDTOI9&$kKGQO$3;-`zgV@-sACTdF@(b&NLQ^||qKR+oKsnY}eLl(~0;vj4ZVVe+ zF1J@+*;Us>KAq!d_7nHU)!d&RLt>rSW!1>1a}Pa~%y4T}kuI^$Ip>3sL_i6Jw*}*z zzx6vfKu}R}ZR!x6r`1LVDoHg{5+8lf%`sw1LreaSp8gbC?c!$m0*~fs5I%_0lu#nW z>oKUVRca=CFgMIn5RG^RUVLCeGW|^&9}pF;l4mwpN?03q6B;JOvk(o;g7B!h@46P| z7_Hlk?{+nwDr%XVU1-0|p!V6ZmQCt@-iZ%ju%g9t2qwM%%S&&*5n&KOcV>2UFD;B0 z1|MFW3n25>PaiWs0!h6#?%!%)Osc2+ni0`4hUKp`WxW0Z&oUvrnMb->hl{@l;Uzwd zh`HA;GQlUA;E{l+(wrBO=vX6&E2aIbWe-wt&2qx&0d1&YLAcwN1h%s__&HO;R#SHd zHkr$V^I`8Sci{Z(Bt?ZhT(!}TANo*x;E#4w`73~3UL4!jFQ3# z4Vxf!(>^*-LJl5AL2f{mQW+jaN8rPQ$Hu-CxQvQ?rjeheLmyCrYT{wPZ$e^|2;%z9 z2voB4`%1O;nlx6_;+kOPYH!5WOYB2@e}zre=pmvbO_$UgUjkS^AABd#ckC!%G%(#_ z0N?;9XxKyT5mON0T(xugC!eSq2k|=$8>`yzBSdj(0hX~aiKSY0hN-Xdb`Eg5x|Dmr zP+Cx}>(Tcc7)KfdYZPj_!A+WI!xd!#d{*ZvK2504EkKPfPvEGo7YYnzPgEm{iNvTf=g<&gVA{Z4SIiU(HcaI0Uiihc&p$<^!e25MN%+Yo=y=+>5 zpnPIna)2H@2>yIusY{}!e5!{T2*(q49l{JBVoAG&I)ySLt?;ZazuhRXWXn^UW?6ay zp8Mp(Nz=e`H9QrD8AmN(+ZCK(6fL@evhBzBxN}$7NkaotSOjCbh+3$R@$GwIB5Bb< zn{u}MC8)DtvD7(dVodQHVLB0_4)=c!(nB~l%p)k?i*j_UuPZ7ty^YG~s4v0_kHKfo z>sfMFp>>9xGGpGNkz~4a+%@W<>wB_sp#~)U4a4Kyg*v?e_B0UvrFK%-u2ij}eZRts za`WE#?fVPXoiR|dsCdbK{Bg-4n{(alLeg=7G39%hOE*Dsm$W&`zWpNBkN^(tNwu!Y0t^l4ROvI z`sEjRr|PV$)gUex->WgwEb}?d=i66{yACT?lB$ExSu6^VQ-I;qR9@}T;W;r41cBx9 zY2A%JOxNPs$*iPUIkjHuphd|+d>G(kd>Tl}UlSn?gDuV9g7h##81rYFnKGaYR$7K) z3psaN)+zO`aptj%vxlVyBzto8u=nL6xCb;kbZ0l>_;_v!6H@D!T{*8=3IrR3`K>Bd zv)D(IaH?CVUHNo&=ldODsmAD9XZzOjA85_9ADwdStY4N9ba-QH9=ve!-Vd}FH9!nq zbilJ=zG9bkAdj%Br$RS?K=H2eXbY)YEF~@LxcupGC7?gr(_(su%XZMWU-1L=2zwil zDOa=Dx+CD3(*ml9`?7KpT)%~{EHaq<)7t#3DkC5h^#(#;_zVmu0Ft^ba2V5KZ*orJ zw{F$>Fm*7l6JJe}UBiLny`1HE&Jql`_5WzcRlpJ&CeNgsh*L{Vh`WoSY2EH3%s5e% zkagp7Jm;s6@07!PW}Ehnc~4Lh}Kwe z&0Y*^@y*^^Rv)X1!GHPz+F$u3MbO*{wo1vN^nCv7IwdqM5>l@hwfb?9&PG?u# zJn}1k$9Y?2g#{1*s3=FQ@Pb0etnf0Ao15K~SqGmys41FKZX%#7qSh160NnWb=vY%h z&^@0pL<=O0)AND5`)+`c;!UpKtXJk4FN0uzfZ>pRx45S~K8^6Y$^19Y&nqyEt2U)h zOEB0)zMNTy%7d)8M}tlwYv|M>E7>JN5`Qwwd)R|66W+Zl_TLRqJV zP2VH-A_3!KcsAkcDLDBVuMru)5Ci0R*l7+BfDW(t;H#^&$rL1ooND+1MCx5lzSXW_ZWSGeXld8NInxG$69crR9X50xzU-G$1;MfjTQ{e_LG9VWt^Q| zA*YXfY!>%LohDM1Bf0?_ZFY{++hNz#>p z3mkd$$1IH(TiJLfOGS2Y$1fq%^D>;3J(V7({rZ-gX4u}(_qQ160ay<>D8c=A*pRIN zd4zb&I2X9yv3=9bzr1wtNxyZY5R!2u<u5~)$TMaW|8&lN@I7l zO$faIFmfOB{c+0sxD$!j99MZT5+EOU8sUGe9r2dXR#Q4+AVauSJjmgb+N{^B?Rc{Q zESk|uAR0klOg*x8wiiK4pjiP3IWYYE^t0zEv9%UE|G(iv<*KAaDIq5(e4c_d!Jg^F zz2Ol}kFB4lO@5=Vl6jDdTJ*D|NT+aR7F}-d4xCq@9@?mqEH`p6!u{Sg1TvC_ZhJhN z!Yd%4w`TCQ?;CO^;G5#e_2dIE$2%DcdJEp2#yoH?9(!3KoWlN#4_p%sb1jQ#j#U@VLQ)=FSo zhVvq=o6L(@cdY^nVA1prr8bNTa!Pw;F8F75Da z$aWd%K`sYod8@}qLWhK36K0$J^jW7wwQSPq@O_+=YV=%t-r@yS+k=s*XP<#W<7y5h zDfV~x)t$*Fo%Y~&&@G4wgC>49&j!J4_Q{>BN2aU3E3$3jo`9z`d>UrG zt3_xVR|{Nartewx?w+jeRYS1Dj|cbz_`oslR)w<;(e-j_jS|L=w<(mGL z{kyiDbC%V8RY4C#2gp}-#2<7}GL%${J7{WHQamT#KsJ%ck5F_ifZ%*J8A3$Vqgq$^ z1Npz<|Zjksns`rMg`S^KEW(24Yj7ApF^cmioxX0e;*ClPl)4&UqK0CEAT z(!+V|&pbr{D;F59029Dzz0@f$vZ{6HT$L!t#sE=}XJ)*ysLsj-IXH_=(l!7{ZY?DW zR5$vkBdYm25<3?_&^wV=1A%GP#(IGI$7#`bxo&_y30jtj~ruP*c}wm2W35Jxe6rzRFkEwZZUjiNTNs z{(XtKGM;TC>9E1trO#9cUSGD<2F@_y!hfXF`Z`0TO%8WkQ=a#usR2c#;a_{8?y6i~ z+{wXjU*T38eS9&ioURw9qIO11(IGU&-?RAj`b1x zfu}5!I#S&DOe6~Qga?ofC^RVhs4D%e5LID7$mkXw$qN+dfHXt)nvNu~$VZ`~ zRzbGl;mj-+$%u2j7czxpW zL72=`szbKNJjt!<{ShU+rrqI{%1-=*bUAexh;R5BfOv!e+%9b^0svUlq`2c9I=k-l z{+|))VSs#zIjB_Oh6rJi1+DS77b`uQ1_29QQY#sN423@cAVC3@xZr+p96Tu?Rs}!S zsrG6nz>-lwdFU=UU$wc_n!{{~*-k?948a+*dRb-)o5sMEh9N zn~yo9{d_+}bqjZU5g@nXo$dckJIOzh&IUvjbl88P;%i}$VY-~|i%w!ub?Jb~6gsO$ zNZdjx={R{N<WbCa-3tk5LNRTJXB0W~=qeeNtL&9a?x_ zItuxC<%2yB@PZ)vQ_363K=}v)UvGW~FoFm`e)c%Y2V&vam1d%_<9%oRN?84`(9pmS z+DIMm4HKd2W2MbJeX#dY^Rve!TIw^m!ay`WS@C;o5l#`$e1O3HN#as!oVlJA%M1u; zTr%7+bVE8Iq~>P?6hqx_b5u2sY)IjpP|7nt)nTaaic9b29X<9-GAoaoI^Nfw04?~p z1~Iz<`Zy58+8*9s8pj~2wNwnmDd|Bl|k@gCRazYqr4uM z3oGEM8+6^>-6?%%q*1GA-2D{|(x%sm(&~SnnWw-Rt{oDGiNSCp!QKImtx<*W_bB8G z0GoCIfcmF6aO|A_?)3s7RQ`i0=qw+X`{EU71QR;>OIixATkOn}7vTJl~}tg%?+$DyaWXL6`8ZL% z4BqR%ccf0*wB5h*JzQ>Vjg}Uz9r707ZW{k?-fTSrmHyEr$EysvtpE?hudX{@-2jj|A8@3{7<1>W0cEsgM+K|7`X!ArT}V-!c7Kxy|WNZD)k1U*~D8xOKhfkh}udn81pTpwb8lD&$7sNwNiyBL^lO@ zY|ld{n2Of+k@!#V4vd5#?1oZsj^+I7%CP}qz;ZMxq#Vd~y$**c_0j^swlquk1n^(p z-3kZm?*Q&F5e_+TT3a@Y>c>5W*nJBspZ(3@S?t^6Q!T%<$`D+8w)R$z>eryh&&99a z7CiuTogU^M{W}PA6aewFT~>ADf99sQs^<@9$@H^@RT1=wUF*iru9rlxPf$gr68ts@ zk9o7t2`nQ70R6Xk3VI6+&pv`1tjLg-m?lov2t&CtJN?Va`p%a7-5Htv zHvid3y!imqE2bqhGf1-fzPd7*>9>5&0Fihw@cTT3y~kkugm?sn3kF-KOb-;}$H@S> zG?WdRg8Ovfk&5c00n+dGeeCDP+Ie+VO9qFz&gc5q6&K%h?!=G*1SygrZy*|g3U9?l z*cGSwzd?p;FTRp5d0x?or9p03_zAJe_eci}l`t~aqMaZ2i)itgwjuGM<8UJT!23?}x`f4%j_GV75u)D}UU(Hv zdWVk%=795GO8ozfD&H(XrEbVs7S7G=W?LAzs@S@;`&C5kJUq6B7P8`EDr9d~-d^Fj71rYV)lgf5G^S@|$*R{Ay`e97*TEe@6K8#s6)u}V&ztQ!C#SYishDqlue~>)-_j;%T#)H)2V4Zo0OWkU zb(pxT<}fKvmAC@byWb5yyM9qWJgVgmUpWO<1m6u5DcK8ZGy~#UJSZb%x8n7U9+u40 zrEFCRK%m&59Enl|O? zsf-UVj59y|xrb>pb?r}!L@hd+ro_h1zU0L@z>YW+b9$D2NLykI0@lXpF5c;<#Ya1u zi;e(w>ZlV4y5;TLw~Jn0N`)t#=FbZ6-LxK=?ZIip4Xd}}Ei?F!#~JZnm@EFiW{HId zN+m9*T%XICCyJB*yNB{1N3=zLZRiOoYx_z+|0k`x_IHw7F-x%YQ$AgegYpLQbU!88e2!~yK`>j~clP~Z4RV*vC2RYn|FcyPN7 z6Sw$x!r!$u^BYj5@+)s5tLx`_w#2qNeHnU^>wP|T*oiCK(EccRO0$GO8Q(1;sYV7; zy^0;W0woch6dYmKYb-7mwdPdYk3HhDH#HI;U2Ja+&)@yF{2;hiin9W%wzvCGD;sDC z>OX6UC=r5IckV&v)1^lY{>#09_a#;93I2NXOdY|T3dG4pP1p6G2xvt-5GCn(`{9{# zt>!CL5K-sG)!P&Vm8%_fY~?H`#gmGW)>J?BGu}Yzyp90|OFx&taYeEBy+a31fb;(` zCV%I>Pg-t(j%3BRDM3Ji5D1YA@sGSMvevlBzBOqm>8vn-;UYCUFF@MH#hiuSK-OKV z3Oi8LWXD2RXu;&!TO0L*$i|BnM&Y^Ubv*Sz@X)N?A*Laz~ z^{^2*KmOM_$6O6aFZ6;ZF202gJv!!Qfs~4K>$`45I&u?F8){6_{BQ-XE(a_UdT-tZ zWPS-(X5fxPhPnAVBXu=H^z4l4*xvEtMx6*->WIT2akycspVi2X&Sc(%aWNS{;IX@; z#Q;U7+hLWuGYUWw_5)Zz^*{Nf>lD7yFU(6*4|=b2)`7M6g7_P* z(TOm$WSndfiJr^*NbbMN@ukt~2krxrqKBuZac>}>-)x@MlfQc=E1pY|$0V{^Hg~Ie z-3iZG_sO~9;o5T|gxP*s_{s=(?T zoWQ=20DjS%wT{@0Z6IR1(EO#C6LtNx&OFz=H@^Q`W)Qi>NqNoxI^F(cuCtr~fFQ|x zu65`-kY4`R95Kur`P`X2! zAtXi`Bt#k!FbI+E7LiWrp_>5&1{mhNo9}(!_pf_D_xJDovFGf4)?VvbYdz08Z!Sh< zCyN5(to<%%TK@lnKqbvJ*!XB(crfQ2RpVL=Bc|}JPU@{5))X-bk53N@H z?iPx|4}e=V3g&>~q#F&F1USvOsO&y3SMrf+b#{d`BFy*tkPD};D|psBLglK5xKzmbws6J86q9AeB>-FUf|0_stdpNL(HUr@wE4a5Mu;4)Cf znsXk&)upxD!6QVAyNky~lP|M0x3EXg#L)`!it+XsUk-i{2D#4B|LlHngN!F~O|>>6 zWSg!Vb$+AC@WD*D`Tg9dj$iUlr_Uix#Gopb1zd>vCRG+_UgUFe^#V#-St7cOxB(LD zvC(%PBkNEUUb^j4Z|MK+ZJDF`GNM9vh!yod>=n*p%({yjU^n~^-v}vqBLzK`pL)6) z^iP-SqL*ARLAYkiuq|wLL%677zIQs8UY8#O4Vl~ax=EOxRb(tRWR6(v_jLUHQ&Ewf zip*csSth;5;Ei>;kTC_<`A5HzU%0J*T>eLhAU09EOIvpq4%1l zmPjmoTLrn$lTipyoJU24-Jz6?Xsc zK`CnbfCi?IImTdkTQJ)jiYBiTyPEJl_hnXT375{s`Y*!vQ zKx1i?`sm|oEm=qKwm8a>{*>h&@?#Q4PFk0&`{HBwSaP&pbw92=`TqzCX@gegIky}p zq)HFcqpI_7m|3_jO& zD7}5=Z5nfnBFH;8*k$jJh1F;L^-uiJ)zyZN&;5Y8%Kq<)?I48)1~|6-mH&pgz~-W6 zpFip_T2E!V(84U3>jP8yUAMAMc$yEufL))(@8?s1&bkgw!U{Y@I)M7+B=n-+-9&O; zjv;nYzO6IfdmYsj_~NWGGRk+WFbrUvy|Q}aEBf;Pq1t)XB|^W`#ovfC^y%j`tv&d` z|0f==ZtVlpQ)BF;8gR4?g~UV8w&|(87=UwO&`1J>{IcasIga54-kw!Mx=aV&4Wvd?mc{?dD!JVDZ5d?o$j1dWRrAN^k#v8!n){1%5)Kf4fr@q$0NI zxln84GPSimk90s`-~E=RYhM{ro(Il`Yw*kq{M-N4Ef`+;_!u4%z_T$2mDF&yMEi*4 zk?2r|89`He?RZ@Cg^ccfBGNW_*=61qp*vu|<^PvWU!wmB8%2bORI>X_-UtMx6Qw#1 zrC?n>vX;p(L+%4e1p^uo;nw1J^R+-`u7juYwI%3;PBq{fG9B`%WHRm?@5QqDpbbgP zr&GJ96RBf7H2(E~z785wYor%QIG^{`Kag6wlP2)HMWm4|mk9N<6G}xBM8g!1uTDDa zSrVka5)UaXF;koNyPABq!%w~>r{%+Z{CN(&f>VUKcUWj5w_5)vXZ<-SfOAmUFClKkX|8HFW+s(n zCe}iGpwpnn237F*Z1G83#!^bi|L96B9Hgu^%smL%rsq5u=<|0|`2DCN-6i5RuFPAd zV8~#}Ko|d)=sDmrW%cUGKQm5Qfmd{zt2UBqf_z^Cs{Vb9H???2iBm}$ZT7{nyNH6RhlX$2$zjvihb;VHfUV$yU|h|x?VI!1)q}A7mfMsh6%`p5v9BL$pQIp6(JvLI~M97szk3X zD<7=1Ns~$4C&$$w}yo zcJy;}&Q329?xJa>-ffiz2SQYeLK%o6CJp7H&D`Zu6T`MF<(d^iNi;OOB0&u)Ep@re zjibKc>ofo|fNex?+BlOhS_nZ|aLWkGdFIV|#u^^Rx;KC%l@bz9w>i`XuV|C01ea{> zH+ono487V-MMl4ColYZf8dgq>dRSLx+5AX23?0Ijp>W7K&PSP(fG$>q7sPYho_Vw1 zJYov)x1liqo6?mRN;zXubM<_2Ho#yKAKj{PWatJ2j`viQL-7&yPna&(!0`kK)|Gnj`_Ecc(D@d`KC#Ynb zhzEv(g*a^_Hsp?rFYoM-pdb~Kem2n z;xnG&C`T_`gJquY;1=R6R+eQZ=}VySJLVTO=E*Bi1JPkZzN|485f!!Z?Vnj&GGUmM zckJ?oHo4_#F;S1#$2?-!f=+m%f9dOf|C1;qJYXxMPhS+B0PL%<#3t-x8<>DmW}C_o zK^1kJbAh@k8BIP6#(@r>@XZyNI9e94^PSSiBNtB=>Dl0z1aR= zcKaX`qp%I>=Sk4y?VZ#&cHj&fE*p|CE?OVam}=pmz)#mPG9KW4uw{Hn;<%t>{*`-I z0_rz7LAI9?t93Pw!7vs{NWv(!MjcC&y*6y5^xo#~u9KlsXz}w3BG|BRF$YwZ1a46u zW1w{P>o&xbgPqzC_-s=5ASHb$n@sZ6(vqy>{!x*qMF+7x@s{fc3F9#MfnF7(jOb(ZhT>qiZuz&N9mU}}S3yBxoVim*2aTpBo)431a5H-*BUjZ&Z=oZ)>dLrbU&L&B0 z^JAs28zjNizwF18U!Ws3muoeX;NJ&?&bYyqF&Z)^Ynt>?dk0$xSh|}nqx+T_A^d|l zH}a?9k{)$gD)3|1))R||fxpkdKhxbzi_}(cRAw9gWi{*!r80KWu*){rip2UyM7yS6 z`7oW>&F>Lb3`sz{gp02PW2S%!e<9AT`(yw1=%K0k=66*^8^E(3mUz~k8mO@pMm-lR zox0@+X~&prkxHiL%87fm~C*S>7`f+UCIOS}L%|cRkb;FO9bO zv)2~)JWdazr+ z(jxdM1rpIMpyshsVVHVL<45Hk@&I24h88KK#q=vHwy)jl4Ay2HSensh>N?4L$jfcQ zQKFy(o2%2Bz;II^P0<8zPy!?N%uwq>t07tvYV&n^@)kZycJs6KLe()LWsZGIlgb?r zAg-1HU~I)C8#0LbGHEaINLFc?sJQ~!SqrV;h#NSbd!J9$8jVj_T~3aapSggoW_{AV zXBO((4biJj#Y)okC9TLYbe()d2srmGrm}}y{E_?bp4oFfdHraKoA3v^tzKb=agr^V zod8y*qZI5*yzb(sS7^XZ^&G?xPwKOzj4%}GGC6g{6XwX$62_ENXwFv^TVst{4taz+ z-TCi^^%wg^9}Z!Kv6q_)Od9HsBeq4qz;Zo_izrqD3Tbh^S&D1>CPe&a;}f)c=moxh)gs-thxe7Uj&u-adXo14>FqO;4Cd>=6)$ zTkP!mgZ(?W!1v*t>AJdF*0nT8Fay0~DF>u1&A2f0p+lSE#?y%Zbw`aJd8OoEoW?G% z4^k`}&cAiaKs83t;s{UH0cNaLn)_=Q8$k14gs|K0@SLRdgtIl_-hHq47+Gh$r}*XQXvE9L2uVZu?lR?>!+G``8w#> zSl(hle;B&u;o*vMQpL9X6pJ4IF-Up$3Sn?Kwf;(zo~;g~ZJ8F22&Hm*1=hiolumYlfwx6+oA)td5TlIFqMcV~J#ni-OCF7!&Z@bi? zSFyNQCv7^w6cm;F0Nmpk;lFGyJ>F%5kCCpEC&KUapJ68`*YE|mS{jFO5rb-tF@1Qt zMV1)~%&Pq7s=l=^mhfyB-QiR{5&Md+lSu03YN_ZZg81J5AQYwQp_APSYj28M-{(8h zjbZ}*{10{sgWc;)z_*1A5#^`r45ei9Sy3*2TjK5&lf4#Z?0~E>4{Xc9Sa6njf+F?c zEbEqIZ)zAP48*Re=~#YB9}c~C?QEHMHiYlW*&m>F@lk;-dy#AhmTyl(NR5|wsQN)q zw;0HIng){rFi{Wg*7&h+$i=IQ&AEAU5bkvA8>>J^qQH~SS3Y*E^e1t-_s=Le{QRyc zD-V0V60Gcw5^VSKOdmn{yXmDtbf#?nE#S+%V!-Hy{<5^&Oc&$js*uL$Tfnf1a9ebk z5i*oA3UvtmUmKQTrYQF+4rW!M0y?u>rQ3u@IKuKRojEFvfS*PFk@Q{hydf+%?#}q@ z?ze82#)kq4%&WQUC$Ws>ybV-G zIK^kg>v%pl*70(++QcNi-u`wMU`_SmW)R*qPsb<=uKY!dsbb*)pMvxMm(fcmhV)Rp zMjerN+~l8@G_WY(A~3msuulDTB`C4x_1Fn`nrd!(kKHXedwZ|hIinX-VpOz_%3+I8 zqzluZ4y!8wr^u|fAM(#^V_wDzeY~c#LS}la)kTp?J`Hb76-SQ$K?A22%djx;4^H28 zdz)}U{;kg7#Y8o!(Cvy!4)n#$V3~figqB{Nw_=vse)zlBtTisIZCNut$OgBwnFwCW zn<+l=S5dO!W#40(ae!sUs_!RbHxKzGm!YayzZR)#g26X#J$Y=+HQbST`9vRcq^}I$ zLbo+$mhsYWRB&Rix80ql?Ke#FL9WiiYGMPY?7ah{d$?14Zx|3ZqOn3P#xwUUOyBL9e>A>k}Ei zb=7VCDt_;F6;E?T3E%VkHIg$e{QD!u5IgFn>f!#Af~icL=4$q^$R72!^O~z|dfwOD zOFW57K~>riR(RmMn$WMh>o9t5`Q4-jR;h;|VEiFw%s|(xCw!BP_dcr=X zCx|-UeSz^SejD}DbwuuJmqJ7S9J>e5PK9(3cIP^UHJ>6A(W-9Ad}Kb4vfcjhsrtd4 zVQTJpTQE&0x0?Msl*YEx?4?u?cZb2vt@hOtDEvT6ws+86FaLX&!WFs1x5=^bOe)K% zvFtZ_>lF5TEh`N79}l0wWbYoN{Ud@|Y(;Ulx>rx6Q!>>2 zXsL->=IYq50cYlr8^yXexNP`$Ju(Iyy6rWM5?tC9maS^O4j)fAg*8VU_;gW}Dozgj zL6LjBuR?UDWWI-`^P}BYBJHKXv?@FvXPjl(;%k%nqpJtd=65?R|AX?w@9icbWB|wu zZnm!#yjINDxraLzs4K4wbV8@J> zBvDk#?k#C){Rjuai>uv9nj7Iy2^qC&XEV2BV+bbQp7PRd1>T(g`tOpu?EQsi5vLZ@ z@C#t|eA@io4}5)cI$85@ma$&WkYQ(6UVeDl{;#EhynGHQ^I!bcHYNX=sYT*BiYIkw z=iKTpW+hL3QF`<#*zYDiy9tA9$*lJwUAz$ku!xZrHpjk>K2F(C!kCLmm*6M|D>90p zTJFdNij_R((JA!Rl@tyfN4#hKD;8la7Mp9!9ePow8<<8kmbqC-%uTT4a-RIelMZYZ z1bp*_7M|<+uLKnE80MU29u2=+jC(A(X-?5$W>~^?WnUlil!8NNtuBKu?oRA!b+~q< z;A~0X%N3QJ14REiBF&!zf7vC0TyX5SXRjP{^6^7Nec7;m2G@=Xt#-`&gX6hdJG|)f z4;KIzQuT{x8Tu-IfwfEvhuXx`A|;&#S>?013C8@jcL`hrUmxGgPX!f?s!wW@aOR^j zb*$2M6Flpm00Y88nGS7mmcu>5!t@{dRTL?Z!8wVgKjokx~5fpek z-kjxk2TEd-^(yYmyyd}zdGFusl9B30DlY}^7ntx*9tjE`z-v0yc|3Hfs>qsOmK6R{ z(l0&q`P#WX6wC?n_Ps?uDL*j;144_Ev1e^*2|ANVn=2QQrB1Yvwlcq6-QVG33CF2s zR08s~ecv|0e#zlHSWbfBgk@2@B&Y$5J-na%U7GUcHniinZ{G5hE%B~sQ3!k{rK>x$ z$N4|6N}fwDsO-Usu^tsXiD4{vWITJ+oSlqo&vML$i0_lJH*m<3*?I-+f#*Y{>n!9x z=KHIOF4=1q%F9Q%00G;i3gW-yFp5Ei(WaVg4KQ#*V?HE6qT4d8!CH!!PY_}TT*X}W zeqagpglKy*WD=Zw^L&3wOK=bBxj3v{Rgpz63PM-+#-6F*u!VBxR?mJ-O#8df7HAf= zLR}fkWn4tOn#qd~#Tox4Y?@^w$IuOG)>M@Vuk~iinI9Ia+mI=q62=uyv0UiNX9QMa zv*%^L_Vh3S<2*ymGW{`}8IkwwPsdSXJ#%QM$MyN50jH8=Wo9r#%AO#a6Kk@R@3%iC ztXW$c<^|G~7VgL_2}*uBk*l-T>`1!bs!|%W;LOl{qJx)8qrji`ef^Fi$2`AVfv|}L zpT|-$`-7Cc&s_96rq-)X)RSzP|Efxb&*Yx{IH&|#0y+I_U;bRJG$!3%h(o@^#J?EV z&;IK+!@tEp>qp1ZF+p#?;(kLuh1pw!BO3jp@%iu(!dvyzR-H?h!bFwRdkuPTru&Qj zc*t)*04xXAB$DImZp})$ufE)7dh4b$Q&1i4AEKu{g*atT#93Q2CnWvHfOs<3x>{uk zk6L}ZPR~@jd)N(11fVG8;8^Cxr#{KOoWEBnOQ&)~QO@|pZ9A1p+G9+agHD-0?Qxw+ z>Es<-mvJ%GMlFUPTe5Z{!>@p^(p2To0JP+qPKT{a*>V0?04RSPZ54a7TF$rM@pA9V zvyA=o%wK!F$rjY)cAdzbf2rcG`&l`+P1c`OkjdU~m+Lc$&Y)O$KjsOBu8GVARdo7u zP#@33JKbErIU~5q&(}G%s12T1x_` zEQ*?-nrknqn`g>P3Foc&F@I6bORCh@HHW7(>t6f+A(-OvjbHslCo#yjxfeIJXu}`n zWk1I8{JT}7*7)T|rijicNP{!pnQ$D3o@pV{#xE{Qmb)E$y6PWLE-a*V1odJicCIq? z;^U3Z{>{)xscLeo$>Q1Nx?u}D`N5+tFJj5G6bb^vaU+|!X>4Vio_v4)L#-_d;s&hu zq(4->Z8=qm3X_qL7S^ZeP5{SErQ`6h@LIWlZLqNzIlD`DsBiYWW5#Q_AdWBpp4C_E zKd4*0m&^4~ed#fE-}dFarxPh)-S!Y&1D6Ed)rx7Usy!^sP7?47oZAxZr@S%+z9#OW z`OJ70mF4EFWmoFCyK6^xQ{EjLF$i)USOddCO(bQ2Bxj6vCEvEMW1G{A2RY`kkZPy4 z4acWs;aQHnIJ_y~U+#-=z9(6+pP!EKHoMuubCH<~dun|HOm-_?Cisp`DZ~+D9WoLCbuXs>!5YV|or6x| zh_6n7rP4K*Y(|A=rOrz6O*r68C9_I#U4`{J%d(j}Ervt3>wm3#9B&ciCd16Q4@4;l za;?FLT9Hf>GXE8%_I3Ubx;;BH%AFO7A+g4kE3T)mB!pydE?sn*o3q`Oj7Qg(gm{vD zAOf8~9^`cYEuT3*W2YUg+4G~;f99^5KABk^(>JoGMQp(XPRGuOb@%5mdtrd}^X}8P zrKvS4vFQ#58h<7jbvr=iM(#87T723Gi-o>x(gX&Q&~q|lHs8_8dfAZ~aQ?A~f`Qul zl@C6`G|q0%)i^LQ#-&mrI1~DHypkTDep!A3r+w1>Ta3}rlPaaZ_l^| zpN)#X;RjbxxmYCmi}+qR<8a!KzADrNrz)oF9lrBMW!U7b)qkgMWhW5K{+D`hN;;;% zm#9Jo|AWS7vxdo;*b}fW{O1t6h7CALp-gYIi11pv>)hrElW~72_&jv`n62| zSgDh2;Cvx2zZwBl7t4BIb!+Vu@Tq*$QVj8LgOPBC(~FgRDs-oNOv-;%Thk^&O!yE%%j;;#h#B9h@R8v-CYaSSz z&92H&1^oNLA?xo(M*oCt?0e-^yc4<6w0ac4>b-ljOD|Gg<+E;^2~3hUSL+DJz9 z8J}*LV5GAdKv0ge>b+ddr68Dk_!jR4sm>&D$&ve$g&%X@K=826S=2jd*LE!uw+>C$i2z-uly>Dqde5LZmD>a#A(+!z~Tdz z>ZC)T*(GLMJeWASL))irX`NHO2b4*EMoB6UOSOMRPG?oVfNs2Trl~xwd`PU(!*SKv^F(gz~F`1 zD$$!*%cJ3k`3R1~I^N$P)V+hbpN7z@H+G)}7QNPHtKxVgl~QH(UnAiHP zIJSmY>t&pDkiQKbW&Hc6|F)(1!=s8-H(fWt_!6G;xkbMhN7B`Iz-)$X$m_hqj{UH? zf~}f@zLv~MPpI7aHVqkp&+eh@s|doUzogpShl9R*lbLWH+^JK>4g!hTS*lF<*i~lW zH&UqWIRV`$UPjS?vSr*)teoHqvWV#DrT`9=KCGB+&CsVSAK$vm5#wV+Si{6`(YVuL z9ZgQGHZeW%#( zGf&DLwP@8FbbrMZy_6Ews9Y0^nI2#42YUY5i7)F3Mu6t_j6UUsR++L-V)TSV%lYcI zBn1VXCdR^rYh!Kq;aSn>hUV^#OC3Ap5Ae0$*!|tUm*(>}HJWT&DyzQ_Ys*Y-_d;8; zyqn;I<#O8A_u`jOFKPSlW-6-fsr%53ye~^`L`GJ=##k>4%6j%Y*6P#!b*wgfjKlwE ziqygsXl(Q7qyxw7_r0@mztAwR|9gNSIG)bqU$y)|_xq}^c>~q@^bXp8zJ2J!M*m*^ zr!a4R&85mT&T=lhwxhNa2DYucesiO#TL!9!@X^&v!x2`SLpk!*0EW5{nY%G8$;sQ{ zd^BU8F>2oc!|rjzi0hK+-5aEL$88?TJ8}4zbh4^a1=HZ__JbOv2sgcu>HafrtiP(v zf=7g1yBD*g#>Ic+-n6Oj9|sPy6E|X~eEP#lFsol^&HlO&jsA1r;iB@wWj=CIKZLfz zsb(8Lv(g_wILpDRjzbSVT~AO5S|R=&&O4}@JQ5N7=x@)ZlybTEY%pW&%YXo0+oxZ` zB&hcjYJWboq0`x&-23rQKAE>UwqBCSV% zsmqe6f>>DQrNBq1)l|3|5_(^S=E1yjX(*m?_i=r>1umjBAg!KGrck@cn{s1?u6vm} z_TNN@Xszj6Ou{7>PN@aukW0I1pHT*V$v)0CH)cChKBb)4YsC@g*YzI?JZ4s3D0N~d zXRKlVy}Xx4%|^JrCoDtK(@q|}gdTLLM@2|bB)NOHW`kXANt2lFuB;w0HSWI)GLe+J zD#_lyDSG}#p73<e-d=EPUl)JDx6^ zuT390htMjwKujxG6gn&V@KSvQ?hD7yG5gRSDG+1P?C^sdj78ubq!c1|I&0ZHl(jpv zse$L;2gQZn$XC02Isnx^7G`-Y`cVO(+MYcDdC&$~@Uw|CTDt7llNZVF!){JNg~zic zyHn!2!Uqju1de_F76MN)RQ)^xbPVvt1k{m(Y26iUFYgTY;vkB6W;-erK3ecY>0%?bF|@?pI)j+*SbjBlsC92p8WQ&6aK)&*s@> zp!n$HDN9%2Dlej9rrjk2D#xvFJDuaZB;%!yv*g{1Hk;N7W$N06}!O02dS?M zo^fYHai;tzqWFBUgT$TnF(_vPEC;eZ2?s~f_Lo1SjsA`4&{*LFTW3Dw@%r0R!`A3C z9=j_pZX}EAEst@!Xu2)jY9XIknSOr&BQzXse1zeA_a` zWz9HxAx($#_PlJ0`U#e)bQ*1bY%DbX-mv-v`tp#0s9gObhMo9q|01N#; zQvmhMd)y)N^UHQO({HTDsE#n-l@I z8!GFt-~UAar#kEb#Iwc~TH3GZ>722iwyJ)4@||5=kb*sd41-I@%>~6n*J$9 zFsABP*F7#uF*TDrIyI!vJ1ZWn8KV#8nW|s^cAd&sARl5RNxO!L|C;18%0wS$VtRGA zp70pdUz*F!TdnLK zl?33j$g(n@wa}F1>@MON{8R6P-!~k2ANBdkQ2_I!qhHO!6U=|^WPCFgfL*qhCe^C$ zRn1LE`;R%M^9*Ys*mlla2#XhB0qRB&C5>iSP>anwmc4n&P-IdV=mlhHOav}R(2s6(I8ntcp@mqE(#@KKY!S(|9AJ+z3Gu@xZA{sc31K(X3HoqT)e0qd zL^fVuoB&q$GoEZwd!UmW`gzuzqnM7F^a@DYmYhlvL4EA-W#V;PlCzg3>FJE7??jb6 zzt?D$9Uax?3;v~A`0SM90&bQQceda4+gAgNuznYm^w52@;|!c9OlRUMwWxwsd?ws(_{2ysJ4$eoXd=b`{T z^^PBNkR-k)CEsfW%19Z$3fk;vaRJRgG4PFdLEo}_9zcphn#v!Y8GkPiH@#4#F-1w2 z0n^}5L$kl7!K2O+ql4MjpHo$1C!Jz-M}?`}Or@o^mU|)(-I2$Ck8?6I;usqRR~PZr zlhI>8@UxSJ!}jV}z5?OwJDm*WA|7@G0WpfB$@St<7z+UDJ8Waj2> zGO|)$!x7=qBv!x)Zi3kwZH-u}@2c|4o@48bmTpjcef%(17OERBT!R-VVBJ{q{z|s!eI{Id%>h$BAM$( zv7)mlodr?#jeMVbD|qqzl}T&8dv4BqDXG14vU~OL1xGT%2u{fV*bv{xXvt7LN74SK z*`}?eAIChen?lo@V!o2p<;C8%ht7<@j>t9mxGg`_z6ruTqNcER(O$M8I=q>jiqD5z zo~op%S6K2yaIIyb+rMxX-rvZ<^tIU_`M`wAyL1LYlru-e+v6a-eY=Q+f@dk+XI-7Y zCnI`Ic->8Jv?QpVWkHOKpyp=jhWblSPg+2>t`>eaUQ3MPLM*6VLA-c|=rfuudb`V- z>v5OxM8!{L7vmKW5h<6mRC-%!BRwsClu>N;AJY-$wwy8m@uXw-cYa&A$Y%aZ+P7uP z_-5Y+-H@S^1t@Qo-1ba+J-T*zlNr5bI%u)})GuQ>*TGm^aG;#@alabGfP-^;0{0AlxEzf zEUIw39k)K9YU%h2KT!q0bbI0leejw~Su#4M^E)4$x?~UF^P^)EM4IZ@E~8#cZhVRc zX6Y$~f3&QlwdxpQQfasW7zgn!J(hL<&!U*};V-ottxFdlqqv^-^OWvYp_)aSYAqEE z=8~Zp4(L?6k`!|9k=(g8&|1|`)7$b)T$3BOWOLE+$xqgn! zx$aAm)hF#;?2(04FKd6%>Du$uKU;k6k)O_7S?-#K*x&D4PMCdKo5_?ArL}y9OowY? z7iL;l%zH5Kvw`C&q4%jPEhC2l$ZhXxMukr<{NHR3GiM}&R+`O^v|u(2xVa`o3T>eq zjq?V&C?jw2NIpDY6PYqf_MSL=4;)3dVWSh=D7MVE7dGzZK{d2E_RaV>Rg`qFjQ|q? zx5tJl`8(W{eDef;dTxrIHr=l9aFyOTad~Eh75Ph&1kL-FQ_s2YjtFd5a?5jH zgSEc84;%HZrXj}>Ty^dy9w?xsXwNShsnIH3L6$NX7(Q^}&!?i_)OfOII%hY4a2tqk zw|q;3D|_d`?AChX7CIZ)VoC8&YzqrgsfeG+ju~8%8fN|_KE@U0K^|j%4tIIN(Efx27F_Q`yzi%zl_eSoLnsoBzE}k{Y zaBV#W3_sZkPvcr&FM(3CbbFN=s3B)Ac5neJT+PBv8oBno2XjGejJ;TIS3UkQL+!W;Rxfn|JeBBWz1+y6*{p|XT5WCw7Z+?OoAq3l?L0gP0u5+y z1p`4B6`9p{fWP7#a1d8iVVVT*ksUrP`(yD3lD0eB2TeL=^?jXFvh{2)N-0&UUs;GHZeSV@e=RkYbmBIch#SFif&8;EW=F?m z+Gu5W4RTYWHsIJ@oS(L$3NB`UYlRKDVM-|L{#vdyaYb$fMsR)!**ZN6lX~JN?!cC)Vi6F~m`a1APtXKgF>6{=r+n(an3BPz zo{TlfcNT)ww_AP+(tZj@<`pPOC!I_c%QLGkoZOr2Ca32*V4e8n+QCcYmVAVJy{chL zIY6@}B;Is5ew}~k+InXRyC!zhc{);Hwt|8&KBoQQcfI;c#yJ1R)dh<~ZQ1}k)|&#z zlFM7Inz_$-@nvxAHE7^X%I4$miek3n4IDDQMRU%Fy8cb92O~^pMqB4}VK-A8BVF|E z-zKfU6i!pld*;01R+}2)u%>uWGCo)9t3&I-jK>LZ%CxT6A82)sOE$olwbbkx^Z?4h z$kn>B%6f0>O$EHdPo-o1IS#l=7vAj;AcY!u^1_g!np~mM+0K?=a9e1&4;uoBMEdRM z?~g7>3k%b_w2eOT>gEy6N;c8(3`i^$@$+puvFp=(GVG2*Rj>ug=`VG{#{@qFPgO_Jc_Fqc^;fuK9A34$usgcaBA|hlkRTbpcM?N~8pATN9nh+c1Sj;Z+Bd0d zVyfs{IZdd7uZEar#6*KJx#iJ1rivzv#yuem6tt^PqWZ8p%NtI+abZ2EnwFsJQ1crZ z3W|8Ke?I>z1-bVY`{}t4=y`N&OD8Fk2*8XL`@r)D{JrbGV8#Ti$!PSt*sJ!IhkG;S z^yYOQ%+(uj;XmM`Z?ufIv>Ptf4|BeFUH~4b=e5i1fxiB2cK>d{^qS%E@$kgNM5951 z+=lTxfLFEn4(6#35a5gFMv(daih8q)u?eVgb1}&75^nMHEpa8>Ua&*Be0ho(yV^{S z{*A|25omF}(7iwHX#C2=@3mXlxb1Y;`&EUKvL1hl9BKY`Fi;qZ3cwmeHCmK zeX!09$@lu}CsU@KW-!l*Q*LdXtPTR|eR<{{tiv`mYQ^Hr`iqEOBdikA>A2N)D61?@ zYCbI<9O8*1CTH`YwAO;cvUIe(VB|p?7+LZ1O=oBLfpE~zmf%ZYf#RJ*y~kscU#zeO zg}ja4Kw8nD!j1X5UnFjRe>w3x5lWy&F4l%Jp0E$K^%idZ`cF&Y9M*rGuvgCJf?HCm z$!pvU7QfHfAwthFl&ry)#iA_C@clS&mz2Ydx57Ao>i2qreWZbF#?!)MFd)SW+CDU^ zSbbtOTXWD_K|K+hicHtAD)!y*uC}W~4=04T`2T}B2U^odjEb;Mdh4H4)s^#vo|;UA zYYV7bD2-h6!z~ws={Nw#8Pb=;HDA;Vg&*&ql=VVkA5V}+H8SDHkrAs6;+d#HaapAK z>p$=>fCV(nvAOOu_>{%LJH9QJ8=2DgYu#a7$=GJ?;7&zXN_ekN|)}Cyb8Z>NB;UvRE%O~?_1$! zqu~bsX4<;uu6$exL2paIQvpo|^fJ$RXetzCx?n71id<=n^*>mZ%I+45e9}%raDC(m%vP2Oqw;MK^jvp@b-Sl&%(*ksjVUBNWy4iBgp zLB}7##~wte^<_@%erqZ-h_WyyO+cQv95F@KuYWl;(8OA52hcVDTxgY>uetS+l0~Uv zcB&A!AW7UrM(SOQ;b`nB|GV5t(V^N8*P=EY+nu4-t|SaxksH$>IG&ISI^s~7_qPs7 zRV?4-Qq_*0^@X>e4G|v{p_68elV6?x*!KP{%5}5eFloJ zs5}S`PBZq3S~DrnmCwtzIJMw1MM@mWiAdFX)O-93uEw{~HKrMz+-clyrZutovkjHN9zBK%rP8=G8sXsjn9t57I71+| z(mVTK8)Rbo!h38(l#I2@a8XHG`ZoY#t1uq#nby4I`<@AQiOzbzgu(U1ert!OnL28L zTMP_ac3mD%s=B13vBA$cj{^@R5q(=f9@hy@yH`HYeTb^;Ac#o`d;=9tAVH_XRvOV? zQHNgtE)j5)=QI`MBWR0s_~bm<-bdec@ONCb@pUQQ1+0mT%}G|_+C>)5>GhGU5hOgC zNE|Z>IL-}$`?(Ua%(%e{2?t59C$B6W{(XS?yT#wQpMP^r?M5!I7;|G0_m?u@WYm+b zhjyW^Xn(-%m8;*q-F$v=?6cLXGGzQKVc)z!5}CvN=Ax$Id}Uw56?J|1&rn1txw6O9 z8;;0l+VFCQ;1m4f1Hs^E&QewehIdsbe+!HnC8D%W{SYa~(;v2{Zl+E^Ijp?5O(&2r z&7e0?1CO|e@1Oi>`acO9|DsYKop3;n3&$=BfhQ-$iV( z0pHTY32uz57o}O_C#iI%Z`s0UaQB`&0mzf0gDGsDh3k)(#tPdlBaeb-^i;7DNY>$) z5oz;C>};h6?XAx1(X|Q!FjK1B2;kB;R$m2sUi)n1d98%n>^7x9a&ce!9jD7vUV2LP zZRos0SNx=0MC-=zTMb|CnGzOh=fU=c@2uV0Ia48F9kJ&3UG>MhjlnQ3A)W@*7p&_y zfk^!886U^1uW=P8m8QVll_x{kQte; zBaFfHg!vynomQWhEQlv`O%zCQ)cb|`!T@Q4&--giV;^U>!0G9?tzkD19XHKlTqlO= z8^xIHd~e=otUY>4g*U=sCv;IHn)euYM}@3m$pfV=6^%Z`GcG@99gd*K@lp=jSZ#~`?m5DkF=nb$iS`-u3c_oBV+e<*~*x5sjsH2BRL5pm4TT#IrxkH z$_F_cw0t6^1ElY9mDl{iMBcUn!NmEc%>QtUD_(%Ay-L;6y@F}bfsaex$_=<6vVtzQ zE99Dp4ps7dx1UB>q2(xdI-5S8=09`Z3BY8)OeW~N zxb?l3+39;KhD5}ffUM-XF;*Z72k!1GUKLWM7MUWDg~oT96CA(B;Rq zlHL|QO@Modb^33nOnGudGe1^Rq&B_D%J}tI5Z1IIO=&`%pyjW3-R`h#Km0khfIM?5 z_K3%!IKHjDK$&zZ>D1!EMNu^ec(w|DZhyC;$>^4#o$JoN?u-#5BIdXo-#nM{>PU#h z_%xBDJju0^uL;Ds8ZWssZq;A=l~fxNU%J<(PUk(@v}&FV6?rpv%gvo|u*`eVN;Wws zV2ruBFdo8Zlg_{$5o-1k**R8OS(atO08Ao(Cmp~Le%_f3Nqz7{k+zL3wy4_ zS(;Ld?`0b`xzdsJF`mzgg@xr_!Aj+E&a~m{5_zflaGSZmX!F6iC4Wknj?$34hy~A6 zP}DgO<&dqC3}>`ae`Eo!%CP4R8BMHafW>n$v)SN6EQo{5k)aQu_#Fv44J~`4B5;NM zt=o3@04y7WF;Wyhxa|v<{?PvGm&%Z!eh1)@tIB6BIH>aE2xUlsviJBS1S2OKh|Zj1 zOavY6R$-jdnfE+)UbbSb-9qhz`1Da@wu@;|U%I{j6FL zmz`1xdwHlj3vf{}4P~mI$R&ZM3$v{pIvG`H2u{(m#4_ zJ;Xy5NA*Rfu61(+E+r(p$H@CAQuYB1Ti^%?#p_NHQ=Xx@*HWIWNQ>3 z!)g}Ik*`Lq4ChhrvGUw$_rBwm@jC$~FdtrZ!i4Fk!9#cH&A7dKC4EzD_O73Xj1J>| z<4@9@)JLtP{!TZ8!0TTlQM4({nIpC0l5PCL2!=S3PL{g#wP^95|H;M)SUufFq2?9N zennVe)!^HR6~{zIsI@VyC}s_~nZDBXK#k)t=D=;aS>~Eq!`7mR{qpmT(zUOqmsxvQkhvto^FQZ*^@w@Z=i>*7AATmCc@xTs<50^G zY{Y(GIrg&G#omk;<|$Z$-Hd^ZNE%_sM(2ZW<-UJ99_zx24+!FltA54S6^iX6I9O_I zkY$tP%i9iO%R{J}za{mo!#0Y3a$7EUcijtkqe*WzQKn81s!pKW!_#N;CL|y_$R`}g zaqG9|56i5uIdek60<$N=dkelCH;-JVx%rN5fP^gjFY+1;c)^S~!1r+DjqF$MQ{hbh zwff^Oor7Qex4t0o;YC;2*4Qbtwu17<@bU||fy^7aXOc2B+LZJaMT-RVGHj9`X50HT z{W$1)+B%s6>|Aa^0SnfSQ)0oEVUhS7j%$+x(aXtS8xG>ab^fWy>Y&n}KD8N1Jtd$5 z!FWF0z--#|v=9q&E$FPe$hGAs#-TK~x5Z8Eu#5)VpSZFBz~R^@$G+A?PpXd;))r5w zQH6^+02|J!oCF}&f1>OP>@0C|A3p~}o}WzJDCVCFW~!5r$ROHFoPaV0Jk-Xv0w|q3 zl|&^-cF@k`RTq-D7ma(r{aZI5$KGUv__-EoU%*pTdl z2I1;7-Q~Kf2~VATqmuS5O&U^I7EgpL*N_r$)LaxwqiqpjLilgj9l2qN%>-EA+nkMV z(~X`58NcgtaC@S-xHvJ)&>A;WBN(+K+rSpS{$@rYsO=8U7>V#%_O@Cd^p3yr%?rFF z=(jF>q0!$|5DB_0V&6wW*{q`w>)C6nHKRKA?`Kqv&ClSup2H~ahEN0yVJv;%yHm*yo4`X`I)gSYnyGL5Vxd%)A52dpG)@V4^W1jh%VOK zPlZ!5p0ajK?gbEf?~7B@&c!UNUp}|F*q0jybay_5mUU82%593m#KaScnd(q8n3>Z$ z^y1!uNh#sb2Xwx7?(fJ;U+T1REBI#)!sb=Wp4v!%Wi^GvR!olVHI4&UHYzf&{tg4m z3^XQerrde(W!=lWBLB)YIy#TmyHQ1;VIC6ArqFjc?b@d|v;!wDgjQG=lWD!v2VnLz zp6H%b1RQ+HV7B7;>C+hb1dNoz$oH|$vsm>7mMPi5Cijwd-rsjaWwcvMmi@pIqg?prz8?I&lRuk|I>B9r#& zy)PzB;B$L8m~AI*WT{hRD2Zp4KU{DI>g9u)JYZUA<*_8;Vb=b%3TH_C`gSO1juRj5 zSc2IvPtNjHKEL0#42G}`4IYl{Xh}`1O|Rzfkj!}h_!~%d>(;*zV!!}>=0-DDyRgx- zK0%I@q6}9j5H*7TX>&;ZgfeirswI*5oe4W1JOcdlE?!@$4O3zd*SA6J^V@vB*ZW@n>&4mk z-g{=&%&b|vXzI~S#i!iE8WC#Kf?_oW6(DAsy*ooXyjT5jP#}Td9!PwK_ixDxCThOKcylj%B0Pd3XFzQMzDG+?l;Fm4%&ORmB3M2Sy) zLGbtikZx)HN?Z2QKMCY$PWwU9esYPZ)&?RlGvBD1ehf7DDmqNdB$I|DHHN2*p|C-` zUtW*U`G3Y}Hi!5*=%6P00NeS@;5=*M8feV)zD%wZxi+a`xT&SXdtr%g7f12*FsK|f z6#FlOyq=5l$hjFqxi8R4i>*(^ z!EkdYCy+uPhEKZhb%54J=he+8mxYw~(rOSr+M8dWSiyn5Pl1Cztj6${(S-A>9Ny>@ z2NrXZBK}?dL(MZOdbBFTQ}o#J111nA7!LkbzJP3VBJC{Tdito@xR2EjUlWo-TVQ!F zBcT?pJl2RVC%mPr%rL^$XZxP!&SF#Jy^}I4m`2>oE_##_&CC(Qt$$2irMU0EEYEv1 z>pAbkiGwnH8a!xpHQ zxYe>cPx12r!`_vz%Q)mL7-(28PHa{~V@1^wZ{s+VdbiTB@^wMF+f=o!TF%kRk zw`ae7!SJX1aLdH~a*$}$-o&ocdX@wJdd^40ej3WON0Q(E`Y4m^0t=L*r?vm`=K`Sy zE5ag;y7j8!f(j+HpH-=9vg@p*wFdwCCO%eyDyG0mr#`cOT=tynJ6BvE^_QS4sBpTS*unjRAa!?8PwDMp7 zIUeten^e}55=-&PQxnuC{0v;ajYBKYVSjbHB45AIX@fD;xik|M4q$!LG^0lAL2#;+qXIuCtfPVMpHh`ha+4Yp`w zN*VrQb=SqK{TR5EH@{lBJnBKuyfhPA05vSGW+u+vh}B+>){_Y(vL=?d1v|ATi5X!Y zDd}9#&u>!Ljt7Q)_5cRR{csQ#dMs#jjau4z-`z$XKUM?MG&6>y3&!1S>|Pgx^(@kf z>j~eTAU9mmxcg@PiGVcxjnej?cuu01c#k5i4E-t3KAlK|f&prO>UO1uS6`^wu_=5> zj{8=E zf`(L%Yh5_gL(I-c1qnCxWGmN!8BmIKBts0vXk3WsKU-- zDlJT5@O##OA*IWI*`!nNMYC6ni_qq-7qkX)q>$L`uGl*zMx~n~c z&&dO66p~QfDo8L*Ua!e9+w>IN zvAUB!XWTfe?^SdE)TW8`??%$z56xZu42(g&ThSJ4@t2JJJur&5s*k08sc^y$&bgbF zcfepb~|V)_S*t2<#!$n)3*%GG{4HX0DR+{L>H| zl%?bEj2cw2BSfMv{*F=li}^l{$#QxCG7mp{(HAMzNOr*s(D}Z8!e#>4AOF zHJJltmwrysrrkBoAT6bqX_Lmqy^b4mn`;wo&}ggK8;vG=k?hs!Qwbio_rD%rE{gm_ zedQX#u~#kmxkGj9UDXM6n7PwyV zu%=q+xYS#0ae-eoPj9Z=v$~n(MR|A%-+{xsYC?0Jvt$Mrb`ne^!D~E|CuwNfHPwi8 zHn10(XTXCFDizi-OJ4}8ITaX!GJhi0&lrmC4wUSVm-@6^cpGJUSKX!+|DJ3|E<`PSB%axwq=BF2kE7ko*l_+g^?ME8_WoLF@>h!o- zaq(h#iG;VB!PTRmej!7qza4)+s(R6Lkj()f^ll0lF{)Qs%;}~hEb;GK$9+>fr%#Bk zp2|#zWm zZ@KY{YY9}E&ePrw8nwZ_DUtSa_hv72rO~Y|ZrIgD$D3LIIiNo?$>=gjz07}Rygi4s zM7737udf{XV@bl_64eyfyhSC?A%Co@N~RrGIx#4J>iB@mY-`+L$bdBv^~;YX?#+`A z=J~|Mk2b%@+n;G`iLM29(&DRkfiI%FP_3LYgut&3a=jVUbEZcw$#OQC=NQ?a(7e> z_I64%(Z@Ng#MR9H^6=ET7pXH6vta>Jx1fGrx93>w*hP=0E|rxJ-IhCqm611Oj!O!k z97F}kSx}8)97FIqytg;c=tTj+lx!OdByW}g=#$O!XAO4O8IG;Um|o@Wj~Qd~$-K%mINGv$?`dfe<>%Fh;!u|D)(*64R#+#356#c03TdS9NeniVp_ zZ>D(>n-LDed>M{AG@Cx~DaP89lBm~L)1SH9n#KqzINmxzBDDT+H$Agc)I~CwRR)Ty z@Re1dk~Oxzy?@EXG1Tb*QY50d&8svx@G=v6JFE{4{#M^wQ+V@x_)$p_bY^bg=n(BY z9Pldu$&x&OR+fsS9dNF0bIcAiRNPlh?@FoM9={!mFU7QRVlaC0lw$Dkiq6l`j>5#> z8Lxp(II=)h|EH7)PgfKL>#-FmWo&)W=;K1iRK=IF${T{eNb6IjHNp*AZ-IbGfg&FPV`khIZ<^qEvNF~e*t8c_*MFp6 z^bvIvvPbMW!41WBUJ^uWZx{qEso72^*%}?|qUkZ!mbH{o5&9VvFhk1SX*$2{()aKH z&vzZ!(#5<1{vJ$CS|{RPccNQh(ou~*OnHgb3)SJMzi6Rb z{g2DHXXmRfWc?y}4yE(bP;1}c=JMenU&4jTqPOys1cntYSqEu}1t8_Ebg@3_%7Z*y z^KUx8>wvtW6=Uh@$_ja($-UoW^7Z9f>Dt3D~teV4h4O#P&Y)*5l0vowv*XgBC zO}24SEEhzv8={v^U23_@F?B4c(8oid07E;2iy|$1dhJ2Fu+4>CWr_b2FFc)=MfaYA+M2guGQ22t0dbNJ%3staqFH=`jku2h8@$fFXz zDx13+vZl-RbtXDos{6EdhGxwJv_(kTJmsEAG;;=l36)|MMD_BWaV< zM{aw{?JeUu`+_ zX%9iD-MajL?abe2^6+rXzzetbzF?m}-{R4_9tap<6Vy#fv} z=T{J5__Z*{2JnEwbMNNLL8i&>#n>|z5|udC)RdU8TB;GWr6HC{O=#R3vUNL{8hTZc zk~a0vDpqyCul&c$WYt;G$vIT3Z95Nrlvdz}^IlfEH=PCrvH9(=Ke}j{%(W+DnNwG% zw+2(%<}RL_m`vxnis&kQ4Kzc#XF<0}D8rG*c?ZFc|hZ2bgo z+24Skj%M(Z5%jUyJQMH7J_;`u0jrD54YYOcc;* z_Dr6?Ih1iB(UJ1#j?TfQW^OroFBIMRrPTh^=8B+So0$fNlfgt3=F$XK^fhDeB}j*T z;~Z0ib*NJ;yYcmr_0=Od?1=p@ca!=2O073el8L>#u<*f+yWFxD`YTiNBFb*LHf=8q z1TxKCWTl0>&wh1hqM3PbX_x~h$lRu@{Up=E$09x*hYQl8jyHMzjuOg+#l)7!-+H#Q zoDb5qU96KMT|s?${HTYws~F87jgke`MGGv^5k+|+`~K2+X?c$nJ8bIeWd6t1$%be= zSMqyH=NOQkb6io2F5g$avI0n>fM(*$vU)|xZ7*h;BeO1UUg#ItPQQvTYtE=1Oq;L>4dvWL*Kii{OYZ1%o$MYbC8kv zsGo1}xEjNKC&o!nsOUJHYnOC(iLD^;!81ni$fDSDycPP$^`oPe&_Pc+DK?YZln6yI z#1Osy@Qd$pf|7+UXL=C@%xl+{AOi^O(jNYxls$G-L{hpB?isr=P$_O;PoAP;!Wzw3 zOg>`4`E~ckO6w2?CvTo^twauFqC!YP@oInlqEL@q9KBli@72>lnu*U_N-T-xexo}W z6wrK__HXT%BQNOhK|WJwf6~HY^mue1hJ-&N=Dcs+^Xh!v^MfOzvi|1e%O{W39qSfA zFQM$eR-|+?o{v#0S6=(>NXt5kH~#nU`9wY_>K?5-aQIZIC!s{F0Dswp9dXkb*2v5? z)Vc9X`jnCToL!E`=I;DUSWpsHnJfh@$1W^Jefia3*i!2$M&1B8+Itr6)aJ_dgJ@DW z<3rEuZs0#|7&4?A74R}Q3u>Pqb(^E$%px%X&3&XsUO%&A;B&&Ea9?Y@3wnA-ui)wX z)hCm9udhZj9NQdo@D@x-^7L$Y2$URMO=`QkTeZ(u(G-#U?eilKKsm!x5!s3Q<`GT# z%9-{08RreaP8`|?7mVAQWU^Y%LJ=k{J7&WZVg)B}j#t2-Z^}wF9t-z|Yv4f;unG0+ zr^bQcIj^uo6h&y!w76?2uk6e;SlrjLP(l z1)qi9;gcJR!KVwn!Yp}1fR^LCBtv;*G!qr&v*8Y;-!6L+CO89_KYTfoY@vVnfzST2 zUttEqPAyfpre>NEOnPYe@19qwC!%#F7*=7}a8f)shDs;IpceeqGmWrN`Oo6uT({lZ zUYgs8du;s@5{mWx_3`n;ZZI`JD!+|crTnqQYGbg_1+j$Q>U>lpPBpeg>!X{p$Yiug z)_uuoWZ1Y}Nc;ga9Xi?s~7JF6CQMDg#Vq}|j2Gzm9vfjs{I+e|}f2=$$ zAyE#fbNL!guL(IfAsIHfJ!{(te>}>$`vsMTf&rZ*#4&~6ZTAnVq5JRub5fone0!_o zA%^?xC6bKGSw5oFXs8(1;+jv0Vd!D{pWq|!Z*OY_7wCIJ2d;rVJn949WW4@)<=4Sj zH`hv%$J~y|XkBR@C@Z9zY*JBblr?A2!Gzw`dMsMU1Kgh#K@YqL96i)pC@Kunx=f5F z-ZyfGGnoawK%*h@yY*q ze+BYW`xXtWW@l0qB^zKmbJMk1pW>%43pZfgtRq&+k;`k3t?@*VsL%RGvQE96Q$0WH z;ttX^m)I?s3p`eP6KRvXy(ByQ`?^;a+cDMth=lu9SD&E?yGk4Ur0gE#IRZ1t5f&PK z`1*x<7^QKh4RCM2b3^QBm4CYX+s{>y=k5|uxKNVbUi=-mmHLRGI) zO99mrXz>VQw|met{J{PK>m$Y8EQZv%Q|;E%T8b4Hnop`Kq0#r?ozP<8Zn+gwyd)xk~S;vXLsFtj@Lrp zJI0u$V*X40=X)-OePl4j&V>SGL`mVCel^Cq;L7r)U}>A{XAXBRuBxXPS=TQ)*$KUk z?lp-3jK}h;aB@yhdC9Y{>^Lq`;tISdU%Rx?KjTg*7QdT z$h9Nlc9$=f0x^FSA3mSPIP#cO(PKl;N(kw=^t1ytPVq-lX#P0FAoZT#`8v5oa|vE$ z`UaNC$1I9Gp`J}3^0G3ZBHf76Eq_~;GhTf{7w`{UJH0`KRg`r8!n7l5F!i5O=n!0B zs2CYuTDB9?u;ESQ8~b}zzCij!3%tNl^bX=ozS! z59G2T!fc2jnQ+^6l`G}EpO*HX=a6%Kn8?2S-%=Qj#Br*q{RZEiQ^q;n1f3w+WCty)ny~Jjey(Pqy4X zL!94Jr@9l+CRxcUXyx+b!?tI>+Ka216ZB{pOcwwU?5`hTV0_m8?Y=zw3z3w|>gPtG zW6LNo&xEgd;qE8xZ>62{vrvi=8L?4xB0n;jc^}8AWUe?O8=-_b z8qRc`dX%6u`tCSr#=ogfQUi3;-tW>mdfRh!u!1L~YcYjWFnb$%H%+3J6aOmw6W+=V z&&a&EkWArPTWz8oMUNi?Pw1+DS=RE$(P7w-4J=3G0HZKUK71BMqWWFq^?d(Jb{Ub3 z^C~W#lxKt-VB{)^WoFYp5y63|hxIVe&$ z;l|^)x#6YhHoWfY_n3PB=Cu%XbGdw-ksI zoW>FdRo7k@R~C5O!29j7fh+Ew)H_!LSu1LcaVe5#sS#I!??awvrp4-wp zJ;|8;84+Hh;;UAS$3RH9y*6C09QNm@7X!ov8S1BpXX&4a_r4yVe5?31rOK{_awUw5 zGAW@TXmGH%Sneu|U<@zlv+O%py|j6{I` zv;Ub{?eE-h{m3}~LhojsMv{mDAk^_b2LiLdah1?iPzorE*=5E!<4CDktqXvMsvKww zCl}9mbR(Q-z$>f=DMmYcy-qboS2y*(&V&4|@uQS9KFT03E5ng!`iu?lV2=15Q8kk$ z7g&pz1Ya$#wfD1DVbrz;*=zBeFn({u-bwk@PyK@nP@;uj-M1ZBpFEW`(MKj_ZHIzo z{nR9irg-}CJmKpIx_Yk}G>`60-G$k$fB#)G#a&q^$;mKSKMpl}-tv1rA+_=QMO~P< zT*^&&X@LC;ed`S)ubzw#sOu{d#NTQMDk^Gh;P9kU?bh7Ei!1zgEi7g3!R~*WWfs#v zEFpt*UJj$ec#e8c^A_O#or>}RcK%3OIQf0^Y|V81v{LDIZtaiWKXG=hw+S7XbZ4Lk zu6Q&P_x6=ApSBbW1;G|ynHfyVh?BRmU(H|;6vo_ljUr=FmDhj!<`3Mb`A_<+sWqGt zk|Z;6CVEfCBL-X^@lv9!USpZ~n{o&pNk+Q9-^L7|W2-QV?;8B+w&4(E-aQ#4M*&kM zQNCi26WK!ffAOvUDm{d%%>5NQwo(hj9&`o8ocU9t*9v31_9z!wko_?C^9VEB>RDcQ zEJ|i6OoVs2F9EHZily=A4k2w{i`8_oEx^ibU{ZsqLE9F}X6i}a#OKXp0p@iW98J{h z%%6F<&}9FHmiTgac=q*3idUf%*)K=g=l>etn7r0Vxs*Fu`)}zgsaVmFSTKR-hK@Aw zyKBU0wu^t~hfJMI(C@LC?p#3eFf0IjXeB}4@Rp?$RYsOO3u3DvLDg<11@5r{swTx8 zZU@vu7H#$qNunNrTDA{E;5^R@RY9Lh_2IIS7SJZ({(5d_t(Afj1@4Y@19J#G-YPqd z6JRN$S@h4@vl<(9{0)YQy97rw$u2ce<1@gU<5Xir#d;YdsA34JwKF`Kx3iZn; zCWmaN_n&aPL~ODMnnXm~9vcH+r#N4z$-c5vb{)H!k#MPEPsj7{p!z&FoQA87Fg>x( zA$+78a9MjA8RvuB6~bsmSft_}-@Ucvaxb^7jkYp}67Yu~xvydb0VEk0L%AOU2hT=I zJc|$+y9}GKhjse;uy+7$+MvG?xG2*!>1vP>y+kbnQ^gXFc}P+(*8Gv+_bV!@-Q_@yWx69E%6F0+cwICLCRPkH&uWNp}!$wZTCxv0@4Ulci0-2-W zP1yn}ldm6#>~iR+qCjHBDUUbvmT!e`#PVk3;PrUbubaDms0L!ovEOl z81!E|c$rr3((Jsj`RO%ky`9#@S&S#5lUnsIua=}blT^}2k{PWw(vZ|gt=h6tu8F^R z{^k~k*%71JkkHs6a-*fSpOmux%4Yv104Z!-&{tVuBB>u3<@PBQP~eZk;;R3`E?>z` zbJpRk3P1Av(KDt%cC`&$%F2NFHwv0otvrv$wkG!AOzn%+*TYFo02TAEHTn|0^Y@V- zKUf*KVZAmHZ$vI32Z7bjY%H8qdP+w5Kb$iqq%GvzGBF8s?&p#1-Gc)T2O6R?ub^l>uK3MhmntW7@{lxD{nCD9KmMeqdsm zI4&L@fH)`&J4qUBFng5ku+s+FYL5)q@$B}P7%s=y`O^K8x3u>Y?Z8h)HG^lPh$?q` zKR-`IWP&&WzwPtzyX}bi^(^JRLl~GnxWBxYmO!=G(G2)or4GBYfj6OeRNqsIA>tR( z_tuRMLI=T=1SKH>fnK@)PmvRUnevxbOMkvxXTES;p6rNF*NvlIc*_tGkCq!rhX{xRELJqZaJDgEmHK1Hxq1ZoT)5FY9&O ztoSu3$x7Dqryam&tq=Rs;0OPBu&rCFok!r~2f2+BveP+r`EX91p8RStWp)}rA{&xC zc}$ms1ixxor{UZt!d|Ctir0E~4rLb6TT&abwK-Ys@HN`S2pM-Dpc`|MlPuZ@a{)ox z722wkxJ$?04N<~8^;XMxw*HhiUguvQNz{~JGd8gVeIP;qAe2tYWPg2m5-dT>m!;Dq?DB%zW%6MXZq`@<-JI9604AB$;?OOJLS7Zvx8f;2Mq90#wnU5hf~V#=#=T+ofI-OP z_=EMNx!%`hp(UG2(Tdj36pNymuFXLYG@vZ+rFzbBNj}fJC_mnOZn$8#_Wp}c)mz8g z*4s~Ka*O}|68cFeqHYW4oXa{vC)vkC@cOQKS0HLnv!Mx>o!+X$J_cliA3QkoLwhVl@r@t5Sg#^SmE$VCsx zZ0OF!#BnQ`Dvsc5<5*w(hlW`F2*xrz#!ulh!Ectf!zMti`QI$-Exre#Rnb)*2>4)h zGZE1`0aCSt3#a3SsBn>ZLS9i}ec7RC49rQIQS{Z9U!~|n*``K--#9nsF@oiN+7eBS z`fvgL%H_8B1tdqp_0v=_KD|KGY;S7+^?pnoP*iI2+ygS^^vCSHsPjUY7@ki(VDbbT_(OHW@b&<4#l`1fqc<=KQP`d%u z%-f93XOtxFY-$y7Yz4eyuE)?XFt03_M+W0g+OfS(`Y8=|jElSHx6q>g(aSF%(hK6y zpI17}ma`R%7VMg`HO`|6Av#n+VMG$UBsu4{n6t| zIDfUclv!nVL_!`3*jeKVc88J3N65dC#sKExzcWG?Z2d2@z;+ll0|stAym@j&B_9tO zpf*v5R-PLimyTTxYXX13Fi5f^xKAs0W#3Iu4cW8z!K54c`1A>ZcY-edZ&%#nd9H{| zsb5kMu=-d!s?q>pv?0EfNiz{Fh%qB@7fU~W0xAk zLTGQV1%Wtc`|?FU-J;hCD!08ewr0O&GGNVW!|Vw+uP*0;*;{A!T^7~JH8(nJ(IuzO z#-sKX`pYpVzYW@rYB+~BVk8b`&y4Z%;Vo2yf{ZB z7NaTEs~yx{&hL9~8NOpXi34qo2BDSGWBqB&@fRttEZani%aM~_-Z~C_DD+mfb=u3L zzWi?9t5N%U_$YinFZ4LZ> zY)v)&RgdK%+20^H6kPSE`lnA(eBR$=*T&J9LIfV(f6q@Bv-W0rkV^q;Leztp(YK$O zbKhR@omqLfkC5>!y`0Xp^lZ1r;tYRGb@1re%=3=7^yK~SUV7gLVwjO88in6b{;jI3 zTLi5x*4B&R@Zkihq;R-VpU4v=e>OQPg!t5I$38ptIpVLg>eeBP-wMAwgvJNGjrypN z`5Pf9Is#eK)g9+j%;B_+m1w_~5GD8T0Q^Vo) z<;aD=b982;e+0s_E5hoDN@eqQF0o9`2MLbRnC*D3$O-ybrra@XJ#15nCkr1H(WTJy zU{pY1W+vuBAj2f)awO%$a&;N0&pTGH828UO4>tMA>h9Ggl{Z=O1)-{U1rF!D$zKRM z-M3EH4$9Td?t$y2_6<)mxLs3Br$7&p^{ctzsLJq@XTj1YQrN^n3(lKh$qQ+{t74aIN0TGk6cJLTM$a=mXBZ11)>Pt5=vwn4_01CU^S{IixZQm47e97d ztRw3$eVd&k8frn%2H~FSBzv9gcwgAy0QH-{9BIriX{MZDo5=C;I9?XndA`d1hnDKY zq103`JY`?Jb;g9bR~rtF5^d*i_79ys=xVK05v7C9l=ri-rQDC8i6HO6>Qt@EGW&hh z8JcALp?9*}e{odM`x;^kY)IzYVj=!Ba(SmBdP!lu9!~~|K=Dtb>EFD#PUHworbxP1 zqHvF!i#3W2htnXP!~c@2B^)<~!QB$)(Ky$JKS3U?xTCF5oOE6yO6gWe){e9bP_Bno z{hhR9Y2~)cH|!zt+Y0~969`oX}=}Ce&&nJ#+yNM>9zS#FP-JS z{URxY(~P71pi72YyjO2(ZJ6j<`Yp7xrX7?G(V%(2tnuAGe8Q5-yA?bioxxo%qJYTJ zyNds@hm5$?kx4zC2>y{Ifz^=Hdp+^E?cEY{9qUHv65-?Fx_fQN&loKh+yTDU_?cMm zO1QgettS`@t)zidX~(weuDn#q#WDBEG`^ARxh_9%67hjXy9L8 zQF$}MAGr<;z?jZozU&uc);9}I9eEbg?!L{Bk1=*`kjX-5f4lR8zPn9je`5=whGK$R zY|g&8FvYZFr9auoQYIIGa2~v4P!UgU9*-Mv5tt5jqD$)=6Qb`)=m^Tdn@HPURlzgA zx&d_RfB-79hN;+1@&A)lwLO3^-c$S~2quxm)m*<;4@I+j}Z-YZfR%T@TQN7H_&dV;wu!z;M?+Zc{!#IM- zbi332;7@rE)X|xa@gaWdZ&V``yjeW85YvMYF*1_8w@OkqKkDuw{*ke}pbp8Xva>46 zgl1mdF5xof8l(=aM5T4I?PiGIj?J=m$s(=#P^rIiC~h?sP3VEY{3VtZN~ zbu|r%RSBL-wr-pB!<9afpi;^%)K1iJ9;8NcAAIVEc4&vYFa0du+F?maVFgm46~V@# zDl93BaW)I-aqJ1Sz+TKeNdtLRHk>$C2z=6W7jsm44a>n;$dWMYwBqEw88Rx~b zh4SLqjD|UVZQ&MsXkudVFY*!gpWqFvD}uP#CWe`P1{ADz<9n6iDq*ARqRdFo99qG_ z*;gq26BCm>t|%=Yeh%a{9dk(hu-vvf7lv1WmiC1MhVypQmrRv0#sN=ee+kT&(w{q6?t^Td_ zLliU8KxCEGK=0trD40chQ~UJjGoP4h2K(i!Q$6Q}rZJAij$YBiK6A9bk6zr!SNKyLe$Z`4wsE}4>GFJY}LCKVb5csOCWdertMJ>2@2e0Nk zBjHOyTmRS&R+Jj>uZJKYY#YBb3{3HCW=ZB&d{tb5p-S$`s}h=iL+_ zM|z-v-6`@k^u%vM7P->)6t+@caW$s2iQ?tDx&#s74=t}Cw*9tRInv%!=pZ)%oJe!x zj=iMbBQxvIAQn1ZW7%Ii%>4yMC)u*OwQZ?k7&I*yExNM2rE~q;ADY&RO#;3%ddpTP6;;1{U;VPHTg(1v_6_|T3T@|`s z75T;ThErC~ViGESZGE>nFjE(B+57Dp?9Cn-^y%W>d9uyKN16Ih0v<)1wW2p>(aDVc zlJ@(Pajn}}O7@`ABW@vH_NJ0#&14SOHZxqUo{vlm;q=^%HImA9?`H5jKtw5g6Jk1eRe*IH(ZVfu*!y=J9_+ zAK}JQh@?=p8a4&9qBzaUZzRrTr&CBBnk+a&og`e)h>k=fhU_aEDu?U5%gN_Cl3%^W zP*KH0((m!E!;>=SZg4;2uPJsu%V5I7P1flTlFon6^zHDG)!#1%_EcX|7cXEes@L}#C(fQ$Nz zP0W4q26^~f%7A~~#MWOr*$H#Ie-It^Otn8OS?DqeN4eePP9ml6+>A6IpHW}a*K;cZ z=m*;P7G%G06}=Zb~hzz{E*jF|iSXe)oF>f&b(UY)0^q{)zp0vZim0 zyM_$YDKQ^}7(RAW3Y68Y8RAADzQ#C-dtlt5%MSGg?Vwt=zyh|ew`{L&ig3+<1wX1MZa(uvkXodR)&{Q3Wu2{gLuXELv}2wzz>ihdY(ZJ zhXAxkZrlD(p2Nli`&J^|O^X*QxyMTPEw!sPnOLTRY5vLheHh)?>hcgqN5d}p;j#<) z#_PF^PJtz~yfG*Sqg{(k3Uyx6Yjr};bv4V6GnS!vqmy4rL~*@iDYE+IYPK9&JOdm5 zpLDCg%4THR_moxNiXqu4E(qqJIE5dm8kksMoPTS)QVJus#tP)V68LBGNKd$O7sUya z!g-*>F!e-T`^AKCgB5+&3U4^si=?aL;Z$>Dr5f%%G;6l5uMeEd$dxSZCBR)LJ3(#k zN;jntEM(7}ndGS49F-Q`j@e6s?boDt)6f0LwDQXh7Lci)n5vwau2|{&b(0#dV8T7o43H(4Rw6>rp^iW_#;)kRu)+@{9a&T!LF$ccrh})H= zMZOb`u9Wm3&m_zlxN>u7#29&t_Naw*)tn;q2{Km#9KU20UR*X^DFT0cZheIuF3&ihN?%HJv!lt3LCBkFF1+;soD~)sq z{VJr_@ITWK-TrfC)Gi_QL9*@tT%9Jr8x3R56VuPuy_bHO<`6 z?ak+J&gz}+UyaxY>XAuJAse%W!$1RZ;m`Ffdzj^zEb{k?)+BOaq{^O~ALl_4!#IB6 z#4g$<>i9*DjlvgzVdSjq@0%)YsJ zlBSP#7l=k3{aX_7H}Ili@m%JH^18}atX=pJ7sjvoG^@|o`7rg)QWz6Q=_)=H^V{0s zi37}wZTJ?1A}XSH z<5ZC4JEpe~vCK<{^m07sCyTKLv0EqY3Ktv4bI6QYOm%dreKf>O%ZIB|j?@BH(u|1H z1-6+LrLwD|Qv3f4Q!Ov}n+Iw!$;)45Q#xQ$se4igLTNDdPfvFYz<0&toI*aWcGB@S zywK?OlN;3T-H*{T;qf_42^`j~t=xpUT;#vFTI8Ty|E(lKa)Dk+aMM<5)8-gJJHJ8V z*2r>lw4k>BOP0a$^N+e4i@SuV%*2h5aYiOkjxlGO23?9DQ~^4SrM3RQ@cf{+w>M=m zgjZ|c3L{K$rB0oA1}W+%dZKfKUHyevK@kt82{6-3BYwXB;#YIg$J`U}xY4B)i3kXurz^8n z$)InZu2KYw$U4gUn@kIyy_ZO-V0`Dgak>5K&!jBQ19ydDaXaCJ9*M^LD|4cuCK4{h zpZ!)^5F9{+pEOvF`_R~||?D7LU(udyC zd?BS;(m?vEfF`3h`SFCibDY1R2e_eM(^?_$F2_^Zvefi6F9xLo!<}ql*g@s zo`(*jg))$p)KK9yX-z#Bw+g^f%)B#KWYqRtjjM3S!+yqGiD2XenC7d{`qg_5bewL! zy!Ntdb;{utfB}mRc)E|Yhmkci1E6AJMHk~%HoZd|Xol2^}L~^+v zRz5C?aSO$H@P@FE2-m~_b4$$6Vufimnyw4mq=8DueYRo8^;`8xD5i^>JiQw|P49vD zRN9k|W+$*0;0(L#FpzAua!odr4Gy&EOwe09sE8KfCdfJhl>*@Nc@1b$^t0loOmGWu&*u(!;brck{*%U8Bl`9S%<&>#BppAdC&7Ty6~ZWq3+vk zJ+NEY0>3KVp~w^pG&gQ?H2l0;WpY@f0DCGnuvmW+O=(71e#n(|m>l{D5%2@VS+w>j z6VvedOz6!(;nlzv!(#KnQ+c)$Tm5jgeKfa0e?K?(dnhk=n%N@5GoL0_;I(a|Do}$p zA6~ITvjnbqfp7Vyz}*6oCSWDi3!wcQ{@)v39r!{!EFtk&#b3+OhL00%{$yNCbXwqS z57v0C)GLiAD`Jq$G+UE)MD3@rjng!oFowxjuNjU`XSwVO10zuxSLl(g2r--sb->mK zC9n)|m52d&k67kh>xyG0lafYKjio-pf+*jB3RM+A@A)|Y=!l-tQ_CJ*!TfeCqpE6J z@8=k_4z_dPjp(=!jx)HA2UycJW@q#`S6Fw94H7;G(W1=u{Pc!!G}WFL-G1|3a~?h< zuH^>=Q+~YR3nHgsO2ux3rm2A+@Ts-F&(5=Bk)COMco`u>ZGRUU%i&pgO4s zPaP^mUgN>!X)oUhvV+fyrp8wFeTy{@ld85qKvN%h(@}$C!4gU=lYw6TC)x`uj?&<` zQte{3;y~f;9@@03%f5Dq)~|jA?ULh8qoe^l12JI=Yc${%?^nMi2&};ztOvZU_fOEQ z`5=%dZj1;Lfjkjj`nZr9>ZXNKC}0=>0lv;ozq@7vxcpJi+3EUu7rNmKyn(fadVZ_( z{b?&Hd~*M6<#Z{sob*3R8BBLG5=O5rcW|=dSz2Hb1Jp#3ZOi@+b2G|PmTop2rCCNE zA}zLX@99r+_KJu+m^xgm9~%FVzl+B744$$Fl7b8(LD=T|?Xahoo~v6HFN6hsh#6Zw zB!2Q7hL~)$K>PEBFT;#RL`7m(7&4`f+$QRXSpYnuYeCN92WC-K=4_{LhtNPlbe}b6 zqp_s2ySbqAu=loapl?0usi7?>c*ZVp&Xau~*L;{SUOP0|2?RTdxsYBSiA9##JM5#C zl88%E_bAL39mnk_>884AnC41>uOL@}GQUT`)H&19s#6@WXK+n_LgAoUt6@7$0_;+9 z`eWHE0;n7z$+_QYQ_%=arfh-`#?~*9(la$B;gc&7_ip2P8*0ATT2bDvfmJFl<6g7Z z;3SJavrvG)DP88jcf?LK%2>crnvVZP8RlaQyF^oq+CkR0X&lxVBR?Tik}i?=SW>sV z`zg)Rj4UP%PeqdMVDTGn^-#))yurgh&x^~AKfeO}uI4{9eQy1s^}gah$?SmLHhUk& z@wmS;{^eg~vzN?T_V-`jf$1OUIp34jCkbHYpvBe&B(V(oC8MC9)OQzP1ngg>cORlR zjS6~B13W&TXZ()pqs@nzfBKyM(Jj`UQ00hBzCP0q%J@+ASul94LTy9o%Z4tw<(Ip? z3URfhm8$-e*4#*J$k8=El9y_rFbG;@ zucz5vv(Iw++C}5c+{{03RXP~=3}R~+9jk#hL(PbC(31?X4%hy15z{GB3{Jg<$M=ZU z384NY634%1Gxq=Y=SdJ|PvothzEl1#JZLy~5;hsG^M3GbZ5PS*aOta$GS0r6!n$-BEz$P`wx?JdltI2aX zi%u#tM^}jq2-g;mb$^)X+x7MPR=iqctW?=JcX&Wx?4ks=rVYal58_-Phh-h0nHpWE zQ~?I%lXR#^HIMf7o%ud>%=H`D;=qEknZS`|P<|eJ?<^2os0ZFZri{7X&;W3@+VAWfd>Bt`DI-*VbeMKf%0nZ-OYUxje&N5G+`~v2ptC?bJ^_$zEavm6UzsL) zR|AKux+n~z4zmke(8{R$Ss}7?UM2BhpwZ6P#*SYuqv2+y-QGQSNSxV_rx=R`X2@&a38kCgo?hvFq zMWiJJC6w+^mM%d`S|lYzVgYG(-@Cv6`vG8g@0~bv=FD7YKr#im#xLNRG-Hf4=-}SR zWWsX%-WDzbT=SC+Wc|Be;6X1JGr*)`BQw}4Y#!pftB=~FJ#77@rOuB&8q8%>IlKr3 z{C*Pt`gW|uwxoD`;LDQxl|Ha-Z@^8~kDJ4Dpo}Jr2WGd{vW!4F@&l1X`jcnc+e&F0 zP(PsAX!e9YEzU$(Gokcjk;wd7%<~N%3agtn4RPPSnU~B1-3zC;jk<{>Scs6v=WO5Y z5^7u$sNF!!jCc|n-lVA=qnEho>F(17z|VKIyX&!I%D8#B!qArShEpF;cr8f=+ncSC(CTF{m9!2ytvHT=_0HVRKN zymFU4Tk!AIBV2J~d)+^+tZqj1Y|}puCI0HjmC}gqA2pgegD4 zNM7Tvgyqy%p-=f-mQlvd>$5YnzTQ@~pavd*$x82aC<_69^}ZadqjBd>zQoJ^hTKo= z>r;l#OMbUCU0>3*BBwYh=WoS;d^f@M(2Qh4+6uz@fujWqXFGR%nH%jqT7`X|ucO%z z;HWo-bw$TA4OpW7Emdy2YUXkVRcfLq!{!M@aYlPI60@e2>*fDoUppYMm z|Dz7bbyD=FR7=Fv_ClPrZq>PCBRkJfhseH*8+7=IZPKEYL#bZsSMurUIwfs> z|3Sgem@emEu_0m^p|oRza?PiIdUhd@+6S`i;|05IgCrUtBB*aN(lV z1s9g2k5cmbQuage{QgSu3siB^EDLup$32_8nT8JE@VS#$-W4t!`NsunFI}P^P~p!q zVRQnd;m7U3fgb1_kE}6*7&Q2?cI;S6eY&k0+5wa6BGCxf)PmdwYfqbyh9&#ueTEFr8 zyB#?jI%XuyOK~$U|03<*n)z5;#YeDQJ}TkHojD-?h&bVVIkECFrft}|zlDD}#oYU{ zFIuFij-b4qP*&Seo5e&>|8G9HC>ja#UGXt8z%2Y;2)iG{72!dQ{>L#&$w7vbUyC1w zk5#B!JyT-Y75Q{5DVpAQvq-ek?&sFub=*U??Y9!y?M{9dA+TW9k=*_C^LdJXyeYaF zvne#4i^&HrjmQ4K;I{E*yii+(mi&54q4oBvmV!Ow6lU_}D1dCbEfEaz-rH>~RAj94uYN)O{GKmJ3%ZVWM8+5;~zd1*| zGCmyGixEs0=p^r|es+^*Fx>EO3L~Tqwfwa4*}^rT(wKWYOV{Y4r^Rmr7(`VvS`cKC z>xtO8tNP`Y2Z2Ym=rmIA`asHqVj1oyy#MnRU4}S$6HhA2fJQ^oVd1iT zs-!5*wJv$P!X+Fa6{&?kF_!-J;nL~Ha$M<#6PhjzF!j!TJGvI)MG6XE<@YqVCVuA{ zN=~CLz$xlr+RjG0IS{Y*`*4{oQA8j7P`cLK!t=MDwfM=BisCE%o)E@oxs2Z>ye5sa zcU-E7401W9RL`pZ?_w{??ZdLGIJ-15|FC+=Rs9DeAL_Z1*=~S~F2`lptLy#s>uwhz z3le2^I;(TQ#VY84A&!4`?Q1n70K|^Ow~r=KVqz9LwOdbtc|(kZ=?x24uB+Q7oj_1tzJT zw=&pY6U;Y~qK+hp^7aP6G<@QtCdPj2_qPWoL_<_t;-1)qxcn>aLw&J!>LUQ=;29uk zRYY8a6DkTGmM;76K8-k8$8)VuW7>T`lB0>F*0`K5Y|Xso0{lCVejzSsA0TdUYll zcZ)bbdXsT3Uje!9AU^Sd6xFoVquv}x&9t^$mpu%irT~oaJa?w*cjv!{gy8W~P!(&Z z^Fe>kE^=UnW;HuZ;4`>vr;y9z6#bO5AKldhTk1$EVDmw+l)qB(#s{y+Xf@x7?cw;C z!E*<*ibC47r%!+Xvyo7nkgoRtt**hRmZF%QS>?ZnDMCY=VA~W>6RhID1Jf=0$)+)W z3vWpM!1!;b8W5G>rv2es-vbYYdAy?eEc8Cdg7EA#N%Y)oVC9_6b@>ZrvsBGp}n}D(w_fU&Nz{ zt5qy5x<99$3l!VA-)VkaODp}#`QA$<4z*lqnrAZA)jJZ{~cdIKcM@l`Wbeh zU0m4(bAgQy88?doqVIn-ryzu-j`DK=pP(|8M)_} zOt6624PcJ2AzsM=k-#f;59wK9Y-Gdlf?P+jMo`B`Vuea#zMH3k+LpLm2%u?E0BLTc zgI&7o8zH&mEQrtp6puh~cA-O!Z$%`zQ!*T!iHP`*>lr?LF zar`Wz1=bDzim*>CAsTwAs#mp)f8-WGWN|II7|_; ztCS4fjOJWp60fMGOqtDFWo7PSZpqWv8u)$Whg_}NH zH%&C8vvUq>f3A*L`d1BM%$4%W!@6+-WwkKrsTs{?SfthAWS%>VV3yl`w3z0TykU4~ zKDP1$)QK8S=(;!u{tDhKY@AUvj@zEr6M=S~Pqt9mY0BWA8d3K5Xv3o(wuOgG)+634 z3I=)GkR^~YINmuQn18Q*JwV=mxUTHC_IDdgQok1-3(~9Il?C~Zm-d#>xZzcwP zS2`ja7bIkag~s6tAB$8w@$O@qV?1;8(BLORn>nBozS8@6P-WyUJG>PJ{ecaE!J)cO ze1E}Y%-Z?kGhA;4r!#wLkKo(zplye1&nZ&^_1^#qJ^3I_B*wM2{LeboAy+QMwXM<; z=l&mb`(62Ch)R3++o!@Wpb91@2>ho1Ao9yJJ$7}aN3u>hp(U{ttvJA5qge&;o1?UE z6}-sqyvpcLC7SM^>;FM@2JksX-O$#;Jqjjjr+jf{A_br=ySx|*Cf@H!LwBkM%)ql`%MZ?T8XiLjLt zBc3%gssDW>i>~|Nv`eSWF>kgD3~XS6_>lT}e{DS{&{y{WlgS;klS#~9WhP-E!y(5> z5E#vE?>7FyH-COR5Q|l5tP&m<$F?-qy4Ods_%b|>Fy4Pf=C}U{_Z4;WZf+Tz6`akr zaq_)2_>vx~`9Ze=Isi5*Ms~Qu-1Q2^ydlt>YsCc6L!Q2FXoXl;6g5i&naaPT07$a! z&E&HmxeM~=lR4l;$J;%Aj;zRgUICIFTU5a(ow{@GClwAnyD#4Z%jX!un0izFnD5kX z1p2QjOw4WAnL!0{@XS@JbRVS`6hE6)i%2)!#RC=+Q!<>09ehU@t0pna1SaJL2(1tM z6F%8IMVEPb%s)BTLVP~Q?$V@RGUny~V;`K*{MKs; zW&Fl|1#5VqDH^f$#wVuGU?T+|NJTB?|BPS+a9tTkX;q?$^r~bMF2;)Nsij6R=1$!F zXZix$>pfJ^U@i@01l=#>gX(c0MhqV;^a;9=j6&nQV=~_!?wXD^n7{zS1-{a3{}J_p z_Xj#vrBteztJe9_Hh)h_TtB1rTg!;?E%NiG>)6%n?NCDAka!#J^pYJ;?rmPFT>zES zWe=(R!;QER&b!*&=__qvDsr!&vhy*py#ie&e>GIn0%B6E0FpqElO>NuUV(^GF5pRa z>4yLC{G^Ubszowv-(Zhn5p+}$yD`nH1GH!6{z5!!%fh6=x=`Zo?K{4Jkj{8%x=R$w-Gjc1b=;xh$&r~Ir0ZR z&4n422V(xN#}_+QIzAvw@6OMB^Ch|X73TR4rsnFICS$jODDjxrszMqIa;nC8fM5xA zP@-@hDAkAld#<)E=|7Jwp}9dyymXe(E@xQQsAI|hC;bMTP9|<3;LVbNJnNnALG=d3 zq<}RR8PL1Td>Ei;(u*2q`}I{kI+D^Ltc3D|7VoP0*u(3UUwr55--`#+pOhFikgIpa zm6|_X*c=n-Hfx3%R4M=WI}Q}`}hKK?|!~YVT&hj=d{Xe>vH69SJ@Iu70L_;rol(gq@WYFlqC;Dfk z=Rx}CH?UA0Y8t)xA;zX>4-zzh7dFbyzOW&kcXR&d(esDRbeg){Fc&`L%s_ia-%|U<=92-MU60ofc=;;>9HXf3s0ND&mKjBa*O$2ij-4PhcCp*V$4f}2_l*dgad&N zAi7tO=q>Srfrf@g=HqSi!mPK97gU)w$@{!~g4h5$IEH_R(^!N!*-;gcBj8OUdcp{4 zsl1-Y#>6Z4h#x2IJ;vPh5f7$HettPSj6AAq*faY$Y8F052m%xn$V3O7X{~{E25sgL zmN%yeR6=u=D8dLnGmTk~6;sB&Lda4G^M|b;nhD+OqI-iq*S@LDc2v;)DbY+={jpSD z-+|bEcO|iF&qSA?c#}(SNA5^g%BRyk6*U$VeF-LH{0JmkE5TgYiXr=3TOr7KY4WZX zjtoZ{n)(6;tJz>@yRsw1o(3~#UZ3BT8;=lr4RX~`WRtNVm363Z5lXz*I}!s+9~(fU6c;ysLv+Yb--Snw|fr6kQf_kTLm2DyQ;qTr{MTEb8LNr1&qmWEeJL zLGq2rn%7J7JMdTDw81BH3reme8V3cr`ruXnC74wMGzEa52in&w$V&gebB0sc z{RnwmINV{^&ba35>-hsWAsDaJUBH}Bj}tV!-ADNi4{A6T)%q}FGKJDWju3&^w^k<( zK>XbUeRRT5=hwFc&sr%^uNz+^R6p&sl+Ob!odcG4*GIC;N_q>lpm}#u!DO*9{+iPL zZ06>CHNqHik_{t8QM}V?VL|o?>i!)&?E(3VmRvYA<34DH6SkdbKG_hkPEVqC9;#On zhA_ebS&o)(T7#ef^n+~`Q&HtknG^i{GV}j|U=vmE9zvUSFJ)+l zE*S10=1PhP@i$l748DsZZ9zPrTdlcxq`}6$1}FCgDY@n`0r*7nOSLCuu$8y>^T)m& z54Mft9OBtQBd#zi$4}&QY`{n5!P{02_Vy}nIY6l7?NWNT5a>Ebn_EW!lH*aS#pCeicAD>9`rXq^Z!Ei95c))k{XYT{aF_9hQ z!ot{0Q*ce+Z55#1Yhtwc2tuxdjv8ra4J$@XESS;PgLMwS&qA6tgP&{m;Ii65*oc^k z#7V>LtjHJkT5Bx)waqE5KVbkEdHNtVem6x4x!9+7^F`rCnh8fniKlWVmi1M{`E<|X zVeaUa;JZ=P4Kp<9`+{$OYdBE=Us@nFEY~^0=6|Tm;dyselER#P`TeADDyY_gmlM-m zM=7MZpxQPHVAvv@&H!p`tT{ZbX2_s!#p#${p=Buz^tWhr^`9XP$h;2wo~eR7PC(i$ zx_2CZBzOAm4?4wky=YIiT=?)3;JkaQ{R-FLwrc48hbX9BLVJD#cI1KZ@9Y~?-0KKu zem4SW4ObVIFA(ukzW`3fA;+rrMRrKs@-PU`(aT^n!fv{+0>8m-!sDJN8 zkVY@cn4;{wdNlY`P;G2!%E`)RpxAmCW~mxYHtWQzq|0`)n;429Pf7BB`j|2u(2^NA zV^{AC&A9Uve~OYmh;!&t8o*c}YS0A^Brx^>!jO0K7lGs~k$iZIK&uXYL*Hv(v3AIk z{>3E)W5HbnYGMDjoW_3yy4b#S@&On}`DNz zLYI`1xjFHt_4nJT|8?61K{li0!|+#9k{XNv7^UvzzrRA8SE5h!kbt|IC_A6U_;m31 z_Im%cs>u|^n~Mff^72#fj*vy!pWY}6=RN9Bo`gqYccNM4%o310!6C*Sr#kfRmT~dt zb{inoY+^|)mi7>__~Nd&#=}U=No6XnW)=_cRjPt$SZXbleGMev0HioVdZ!f`q&~w2 zRCTFoZjqrm4WB^#SCZ?4+k$6pOtC`Rxx>;O;wolUu2VE@5Cfxu9=j2m79pszEE1x3 zTD=MvE*E94)qo*?nsA=dt6dv{rcmG}@IHj`$Bb(DD_g z5?(S%F!!>NG~9Q_-W3I$Nm}8t?N3;h8CBl^@K|x+v4*HN+g--oP8ZGnE@FltntMw3 zRvc>KT0az!d+u}FL6z4Bb`re=vCrvDOKt$&{7%*`NO|T`RS=?cfn^alK!ruvP(sqH znH=n-aI(u4tZ z92sZ=#YMd(qo|GcS~nnI+l5ScSZmg zKj;`prak$3$6WhISEfGu;l83E+jXbTJu?!%pKVuq0>MEj-4?G|K{bkaTY*x()L;<( z1_;FF@x+$63y!rxdiSD!72WqcoBeWG0p+vjmQUN|18rl|Z?#2z4!_*Y2B`avwJbGR zf`#^Ae?IP>oS&Do5!I!Nkw*xna=NzWSW|%7Y`z zUlKW|)h zT7p#23}LxKZviL|f1V(pF)#e&27K9cMP2Qg`_*o^t8R+d@Ty1QHM+UDLb(FwyQ@>@ zmoIV;w(^8it|Jm|19NM#9iM5T+{8~ zq=jpB>tlcWS&N{94!*gdmr%#ZVlrcfN(la6_d9loq;v9 zpc!FpwQp?Mn9>gffL!Ux%BKe6YNfRhYfl@Qc??%Q0?oAGyE(HOr|?{xdfq*1TgRK z6rnyEF5Fb9Pc5|icM6Gh_%qc4c3bR~MqRd%M;dFpP@$jRMYQ=D*BMZ{! zg{Zh_+_H2n?Q&b7@M*%ipNNZYU+|OO5OGUnzS8yAnSBt&a^cZT0+jRIq^JVJw9eeN z?x0OFIShG5Tnod+(juaxR!O|5q9JIU6e2I%&X81DLKB$UlzR$be(1NQtXgQ9-TR(q z!^Q{_p{=r!2$`Rah@FpuKU+kTY*ZN=Z(lpkTfh(vKHb&hPy25>U{g-j%q#~823^p42{J) z*Ri0z2+~m7e?y9b0k8`@)-AKfcr6hH1UQVNkT~^;EbkOvP2z{Fu)K~6-+|U!p`htL z&i=Z@x;ct2$itA}z&JxDkget>RUo#+iD93<(~V&%tia`0N^Lov$w0bF2!<;Q;kSP_ zFPlcUTtCr2zpqV420g_6ClEJx{v{SACUEyy>1;(K$>Q>-L(AUrih`vq?;tL-SJoTJ z)gnvh=6Hkw-6)N`OdlL5vI?OUao{$Ofdw&sO~nv{hJ^!_9w}V=1*ie&HA3$#_~B_G zyEdhn0qHv+d#RN}=otqGA&m0@FC+ z+{ka{8*n7ouyMnE%hl*rvf0r`k|)hn|9VJ>-0=DNFKizx?f1Ap@c1 zIhAOachUu*#3l?41?BWFHI5!o(h`7jLD{u%a(rB?ASfrD6z|9&hwR6nXLv9Plczvj z0M)OBxcn4MM=m#VI zW+YzqDihI`m;!&1-bvfedV9KzanZXY)CJJlX8S)QlLlVCzqpkgE5nK`#VvjUo{;`tWLLrgH ze5cPk|NACMyh6kRszCmu>%4dUJ2)D!SrtY>jYYPg0j7|PSEu7Zyl8*Sm#CJBZcyZq zy*RaRMEUteDxhPNahdH}h#ZAAx?Obes~y|;<>jgo1)VgnHj?0Pjc;h9`4y@E&S|z9 zl)DC(szm#4`8V3^_qONe20R~@ev>}@=|IRCP~++eyqd17}}#Qui_XI~?= z&^PnXDYR|@t!M~cdWDV7z&K=2U<(R}j|3u6{5D>z{TV&oyWyU74g~-L-Y*z7BCoch z&}_x?5A2hstj%6Q5;2dO_Xmg>=i*;%#i)NOA&<}DgwrR}ly;MncaC~z5kWO`o7LLm z$z zv|r|I>I5r<>YEx)0!zjYmevYQ8p))!{SRpt*vXkdY|bF6PS3?zBhM*@1H6uu7U=OU z!q_9oA0yeShXQf%>Ab*UcS~WN?BXD62=nS=JDS!gCfti$qyt!jYH#;LXmeMGk-vfdhG6D;&W z_Qdm?Ua|nPl5x8r72dW|NOg$Er&Os}%6<_|kx3eSM@Oe$xjQCfq^Say z(rCHC2+L>^$Lgo^vmT#Uu0!<`yS%oUh^{_T6L`tpN^O*4mAaHOI2VSrJzL{#jp!8v z8#N8JoIyCH$?hC3^%m__#V8@##2qKfVfQ(U*~c;CVCLW01U2QXaSb`08WPoExXek3 zq$r_mpD4PYHN44Z-|SO<0L_3BGUXrPT4oBEu5J1|FsP?NVa4x!_X^Nx|14Ck`{PO# zubX>(<<&0SnDnk=6tB$$)=vy1=Mw zy~YN`?n%f^*nqYJrpg~W8Zh?$OV7?usSqbrQQs}OyYZE^|FCs+;tAm)y>HUK)}e~Z2~dswzXDY@jh%!Dd7 z#^f~|tEtPh5yf^NPi&AA^w@GLr|n-$g$xtBr4Y)^~XsovP7 z-bBM1nu_Xgn_=;E`05rGj}rCnm8bl7aN^j|xEmq9*EjEGavm3SN+!q8IJ!od02|Lc zd7Vr3fTJNE6^e)cK7dH0!JvT%0o}y~CT(`|X+&TcW_RD(yl+!@F60PVH<~~1$rA*P z(o)Ie0U)9edftoLZ7(XJ^yC|)i1+_<$VH0EJv^^9t*;#ZCmDBX2ck&gdGj=ZieIPd zhu=@*QA+JIL9Go{xs2Td>_^f9)NK_-!S(o_!@(dr$ZWk)>y>A5wkiynY@nMy3E|1= z%%?yu3gkrbL9`IK*9eN4aSiBY1ooSD;iu&$;WPa?ly%zHCj}&v=HOoa8e$ITpMfU~ z8EEcqQByn~g;VsvtM;pt z>Fole8nj!i%8cy795FK32*N&{yocm*wSL;>qNCmvAArb#M8ChKGQf@0YE| z)GX35DHa*TbO1Bq3q<2er6$Z5WUORh7DWa-`@8T2824vlztblc1WN0dGbQrb_Qhr%@DyjktR z_ux(V2D{Adfbv1fwRVclkFV|=J={=(b;iRAy)+<@d~U z=P_Es2(=_lC>Gre5KUIk)XIH156Vcy9h*ORk0_8YgRwxf$K0X2T9s7y#dE?$^)+d+ z15yN>ejsK*;d)W&gcia0$+<#j;=o2iAPe>Z3}M%?<8S+UM;%@`8G*YMn6jS?{^>}R zo-i6b1BlSx%&pb%4+)mOavA>=&);i}V?+03{|KP*=ED{>3M%U5{u z&b{Kz=|RjW-L3+l{}cj{o1Z}E*;E#@iouBStIO7{;G1h4_SQ&(q=oDmq zXD3VEBUn6NWY-R|55U+=t00PcD#dWt7)7JkQ5}^d|JP3({olF9N*t z;QFK&zNLFDw)T(XU_N*8)la6i5Szf0x;~T_%DaY;iFqS_JpE);G!!v}n|8`b6rQ^c6@?3UK_M{gvPj@i zVt6j#3+3|HUEH63hj%>t-q^n)25jk?H1<Aek*pEK0yEw+q1f z?{~THuZ{rCBC`U}Z46G*FR2o{awW)hxObruYGH=LLvE`Fc^Y11P9z`^k$~ms55Q7X zMbU<7C4g!O;1xcQv-dEsCx`wfgCZCryiZH_N`0YcOW_*c@yIeBH60G*1C`1z5A)i^ zR#$uMMx4AJGitE7oL(4b#D_4Nwh=bDVgj@^va62tS6t`<3uO#g*OtGAPqXvw5p~_- zW!}Ie^L1$$cx(`bn>J008>L1V3XL~}Omh?`1%KZp193FvrtA)e3B^fR!=SdE3I|Ch zK4>hwx}TePGSfujN`gQgC6ffTi+cUA7EMXIN?tFyYBFDs^CIg@FH2wyryc7|?p6QL zcLa7xEUxyx3Ek7W7NY{2Yy_URpI5}9GDn|wdO4;!fJ&b-!uBJO{YBENC23|?WBx={ zpt%Wh^q7} z4^7Yqo0i0ZCVXZ=lGlX)GV&usy*aS?^1^|JDoC4BrQ>;V6CXd zI{xk(|KH(Q*M)s>Qd}(^^_k<^GEwtrH;*; z0G-nMdx@ax#9iyi2uUqf-RPfW8NKwqmtm_c#&=2O9OboHsaQ^zr3JzTs#JjrM?R?z z=@IOVfx6f*z1~=*7nc-|e!bpFlrSgeg5*x%eFUUFJ8x4a+N7#CF0>KwCt%mg%ss>> z?4izH_|P3eoQXuFK&Bz)YZA}-GFT1M9;@YV4=H^vh$=~Gbb#jz$}A)chyAJr1+N9^ z*?*g`2|rx|T9RcLZV+gTZdkFPnC`P{KF0N1huE_*oHL0iX1DMzpv#rb>-oGvT#h8yR|iRMNeT-joU;;^R-Zo8d$iO#MlHQ}(P z4Q(%&Hz%$ZrhH6zv4>S7?pQo+#S0?U3){tOpGW|T9AQ)Ahmx&7oYKdN zfZ4PuH2&T8hQVl^f#cpiEnW%%JrpqnM)Wa3h{A~g+l7X>s9y=qV7+3h#C+`@#GCYJ zPVj}L5exGNM|*^bi{jrK8N8A0;|>K(ij|7SffcZu7|m zv(~Vdq2~rwSui~h!Z;-)W&Ann?a%`$$A%e__TYGa^dJrypgEMPZl&lYXj@trzKS%Z62x9->2 z7(MN<3ZOw~C0VlZQmEc;CEzyR1n&n~;Qsn8SdI-To;!i<$33@dP$4q?Lz@x_UYNGf z1CAWeVjoD!x&b?&(6TkM7XFBA-r6Q;~ZE z-+^pdI*u@AENgc2B@1#r8w78@UmR=84HpUeLNLx>G$(Co&6SU=SA{`=wN`E8cfF7-u)6`!%fzc<{+iW2xTYQa{nQu^q(NiQ^V_HDH8HC$#vIS zqlqFRgWBA*d)^=Hf}tDJwEoW$-M7&y&z`iY7N=d<^|w7*#CUD}?KoVEm~M9f1BwB| zO{}O^D=o$Wh?GKcn1cXT1G2dXQILqq8?AVL*QpyY)-Wf>GGIgD;Gxn?4sfHffBC}vv$1c~co-R;>XZr~Z#dGY`UpFSpPxx7rCe6;R75u-wxS#}S*xdqgI@W+wfz zatX-N#;(;>ShXLlF`jP#F~ygrMvgVqyuN0@CcddAP}eGx$5DKck2QFxrlFBNh^l~* zKs1q(wfJ_#w2 z6X7>K_^pW%Q}bx=cv!AD6OnDc$hZgz}Uv5 zdM)Gy{(@x~$M_4Z=f6WJdTzj)EaieH_&QQXa_nlm$dC&OfHm803>H&0MX%#>i|=C= z)=u1rv*14wrGp!& zak@Hl)x47Y7#)!nuLIGV5Y3#X;EcVTGPrOqt_(V;=iOUF$%E>lu>(5~p|#YZA!Uop zOqn2+A(xyKUHQh#OaaseqRtWk&EDrT!(o%rXCF%(MeUnOjDTAIc^dvpD z6s7oP`L)+LpTsk6yW#!r>&$y5*XwO}el>C$2_p(dDQo^6I$SUArK}S_N&yRMvM}^%FGRSC`OmvmAUe|E`SY4yZ`gIMOD5(2hcbIKlU|uLI(eKgx?f@0&Y{ zC-HPBb0~|N{WZ6?&Ny3oI1@ms@NS{^VSOtd!!NHpsGFt%kAV)|%|?e*X|ZXHM;StW zNM1qApK7ICP+2zg?wICk;aEWn?gq*~lU!Lp$;g*OEwh=cb4>*O*SKKLga)d#guL%L zt35q|b4EAOK>1tm!8;2cgK0u9CwCq&CK7^Pcfay3^bYru$z}2uiy*#kp*pOv?* z24Ge~Ttau7g5|CWh-0fEq@Y3gU1fCP`nTdWqht^ke5nSPnEoNAnQ06yQIBe4cO08q zLocr4YNPivJjf_WO;m^*$p@m>AEH(AT_J<4PmBoZ1mA5>|7=n@e$09s6^_Q_mXwT| zsPZ`6<5w;yu$T~1d#`gXaK6HdOCaS*!+009s2vp~>qDxmL7mVGsoZB$0_zRI2!MgY z>Axk?>!pP|GmX(&#huc1^Sng#Qi%~)r7eIvkm5|94484r}m}fa{QTZ)V#IFy1HlX4@XIIaNJYhg+o)Q zE9<{XA4!-Tv;ZKL+On2R;;zu~VSdI>At=p3o|FY)S0&&w3&_Y)aB$7`D^n^VY)Da` zg`^zQcO*qbqHeCvtj6*mXT8PN(dP~)uG;Hu&-7uUJJQZjfzzvZJMD$j$3@gt)RzA! z=UUIplj`tP$4Qv9Xg#I*{rGoJI*F&pwn-+zBZGytZ(gn#7eTNI`yW>P!=V_>nN+ zJ(tD`UDOMR<{dCGS{j;3S`R%Xi9xHK2XA;XY9#**)gVCdVxSxXt14v(yT89q(&SHG zlmE7!MOnGDZW|QzGZrNuLo~F;>Gp}`UYaVelT*(ZXWUw=;<@|jGF+@{1)yz`e>75X zV1MSZK26Q*ko2SReAb0y=5M`T_2Z@bZ^}Gi|He31v0{F8f)0Q5OJ(i17xGgm5qu^H zvoQ7vtW#=&F-S}F{sSlnldr#4x8FEiN=sE3DzY)T>$Pea(8R+Md5vxK*G+Yu(xaU7~R~@Nw#0opKZ2{$-1K^3FOCkMmN&bzO^O7&P`3~ zc3vEp)vSdlA)}(fc|1zX8gK`_|iPel2rd*P({Yz{QGhiG9vxq$Ppjg zCX;VJS5|pGllvckx!o<2L#y}q?DW*~Y=3EccUO2>x2syttQf_8{cra>HKN+gZ*b~R zcXz|<-GG3`Z$X{Y&hpCID(R%?uO-ucnN=EAuk1z|W}QZsBQ+o}=EDV281Xk_Nwt## z;W4TIIqG)rhbvS{Y#f7%o2<@b;2gJJvN}E`TFR_v*^ao2r#O-V@mLWZMO455<2ImY zoS9e#>1udUumeevQ22YF{cXz>D*FWS7Lr*A#{GF9mcvxc_A&DxU*MJ62H)z{$5coq7!#-nbg#SMUl%b4GyQQEygeeqiCB5n*d_F=n~maO|t3c9e6Ecs$Tu|w3>Y;*Io$G*DkBF=xGo_H&b6GSQhx zmyH%F4r`5~bfixL>Q-CN`6E)4Kw6Ya<>Y2Ph?EPq({n*T1o0ZC&G z_n-Tip|2mtDj{`?PNi!(x(!#4GIIQ8dJ{UK)4V`DoRB4i;pUesXWDX z;4l34fM7~F6{Z%U-!G;aqF;3iB2b6`~rSsqzR6 z#LP<#?(OYu@9%f~Z5Z@sizKet2lpFQJ6`F0YsFjN_=LuUrWVl2xL`%bC*~<+K^z~x z@0Fn;*UP902bM@lu}=r<`AO{5jK6=ja0OqffdxhV){^m0ngks%fE7~q2>BL0xp`Qr zgPUL_nxRZjes{en>-DB0B^~#djKLeE*(}>(myKXUbRNyuj5@BPW~%`ry2menShG1S z6f0ed990+WTBIP0>F2GO4%&e z>F~+gFy;>nQn0pJv1n{vG5bCm3-|YHz5UlBwbcMNuhGeVykWE}=Lo}*As3v=Jm%87 z^v2PsHIV7%x3C#j9B#^LR8dJ2TC{rgqPq`OD;0OfAJ4oxy@}9%OF0?XM7h}H(o?Qm zs12zS_INN-<{>Y7P$=hcq-p7&+sew87iOm9NN2$jcf~v~GWemGf~k`PHL&UpCUOxKf8T?~Jp@13J~Ax4%2qs#iLb zFY*B~&F`7PjrPS?LC<(9XSJ?V)NMSLPvy_I7R6R$9=)u&`iaFmtL&$LPp3ToeD)^g zcykn#jJ`68t3@3#%>picl+P91)f*z6%OJ4^N+tM{q?}6?LF|UT5-J)QGCa3^CQ;A za2y%0qn1RkX>qL%Ero8b^}BowLHN8lz#rLPJGZy2~JBYFl-t<1fJUR#N0@U3gkI?ofBYDd1dv%*6RziVmY z;dVNZRO;v6LDf^c!wS24>B}Z(EdR@z_i}Ac^wwp-bf)0vNU>NLiJ#%E(ATyyeIX`4 zPX-XrPzqHzU4KDFEuh<{3)m_56yXhrqJdnKQln3$e6l0M#YA{@IP ztL9Tfw!~VX|7Z~bGFY9i`l;Sz)5Dt=hIpPDX+>w!ZM^X*72lcYaVy~eyo6Fm*Ta_X z9i|Ns7us3lX~>*~B28khwm<A(_-Eh>^9`adu;$7GeGp}LF8%Lh0!Zp|&jDOb9bx1LZS#VHhLYZ9<+Xji%Qb?^iEO}{d^G^w87;z0De z&yTdcLsgCVWW5~(PXj6;c6=&ToR zp6J)`lGB40VkUfQy1%slI!WNg-JW~T*~Xu-BC6^3=zEF5zJldo|9dzkUhaC=%H-~E zDwVE{n+T<+!zV`Mu3Kii+)hv4hXmnG_xsU*QBn)7u1Hu{r+yqWg5_VnEzHI-_BMqt zZpF$;NadN~wdQZU|Mu}8ynih29y~&&>24Cx@yubUS5HE2ut0mKU$?(4xojlGFfmbo z5;YCoF1v(Z5(Zk+ITlT+*#7qe#424e#aWBNLSKjB)KkVJBkV8ydn~^fsAdUk!Q7Wz zABv3h8f9ZccVI%LSQq_!&yVh)4?Q@v{8v2wi-LGVdI9;<|As-*RVvaPqj-8eB?$(d zQ1d%<@qJQ3fB$GS46r_X^|gw(yK3*r>Sq>`uV0H>LTa#Po3e1-skg~QozoE$eWcf; ze+U47@UJmgqoi*f%t1K>p;njX0$uOq$A)~}?8Uxs{43lZ+kU9g(ut?@NLT{{X!S7j z0)$=)Md8QC(kS7vrNl)WX{lsz)CH`$V8@0}fvm4oBFe|O*Cf578?pZk7|>v~@A z+%V_kxV$lc;g7MtDDsPN?O@!`pni8qsqhd}PhahL!-a$oHSVL1oGCCK>+jBrp&`oY zpL2&{KwU?*xYY$b9zo(U@k%HmHhh-=zU7aE!1iif?GS=#^kGVVp>KTr!|6GlgTP~1 zgUd%1+zOtq4j7g%@_XNyxK1@Ep0Bf7#Ci2fUvFW?v7B{_zWb?ER>AfZK;%ml9pHUY zS1(mhqJg>D;x%BNQj+|r^kfYz6+!dw1W6A>WAP>nBnqa>gL}gnRIAv`s9?FrsrvQN zez7IPqKIP&S9_6V?;+{$Q z1PBZ7OQ(%)rN|7yMTns*T5-F-06t+nAAGKv$3^S*Ts|FrfaqyNT$f``Um`zYTS^jSID(Hvp z{edmd`umR_HQYc`2_eVBuN5&rsizF|3v-oA?N)m5e6YQwP$YIq<@<>Ew+htVbxaZI z)LdI2?lqb#fe#)(?$vTt8b){%0(j0_SgQ@GDD9z0?C_yyJ@;`)KvO)!$)ADp&v^9?by@S)`d{{=x1Jd_uXoZ3QhtohA+ijA?2}(Ie=B$;?G#*Ht_*=B>7kDycZGGsNPX06aPG6G5Nl>)>e|~-%U%mweT^S zJGjW%!$dH&)07?je*d37!AwK&8c#HP-Za+vdsSAOgV=8&MF0sziVAz`^cSIvPVIB*qE4 z_UsV-CUpH`;iluY+>`Xv?;qk?2Da}pUPj|rwA6f2_MUO>K%=%WsAk9(C?fSEGE< zf{&gF3Iy$Ei3T-{DwmlR;lUjof3JN!P1It5waX?9WJasIR4sNs;(vLykB(dqGoSaj zM$0n;IUyOn?@My4h#|VP8`872Sacu%$8>yu94x+(>*YRBxR@Y+k7up!f`!){divG# zJSb+s+8(Ss#+z0Io5rz7)k#6yA2VVr$c1bkp(-Cd^`;5sezwethx3f7NnL;~e3~dw zyQy7NwploK9E{3!dKG!=P(I(h>>UZ@-XNTUZc(M4X7OmQHbp5Rz=C;e#oUsk)W(ET zOt+YU&0--GyAw`c$;73Kj9}H)swo}q_G2MlMn#m_V|Z8yf3SbM?0yJ8#U_SEO$rSt zA)Il-&Dr}>r?pC`nVif7WcHPo?3LaTyy2*5;mVTm$INVJXQGq9aNN5GXRq)DjT#5c zz8nzPID7RLK~V~fN=zxAoTK)X8lI_Wzs`AbW(L+2A>L486BdCqqA2dhtSgjU;2tm- zkn#efA->SCZ@{N{Tq?mDcxueXZECjp9WtDoRa=rHQ?-O&i`P!~V?%Dn9vm&U<$AXdX#x@Dj_MM+n|#_w(gADY71>(Z zZN_g+D&f=E*sa9rG3yXJF^b^@y{ZdGZN)eK=-87L_Q2DscF~QUgg1}V#=f1K>1|ua z-M(O&6*)U7GTi`$4K-X>%zR1m-pF{T%df$!=KQ{}*ES*o?36_Xh(989h(AFqgvt3+ zY@vK6Yl}OZkv^PXj-w4aF;JgZ8H1p2xh<}1)UC2Sz+w~)b72FMcDWV%CNz%Oh{NVA zcD(RpiA2s?-tog3bDfs6WiWvf5wUN$%LgVhYBW_HPBdf3EK+q8&@X9fv8C$ZXqyJ) zRDr`7R>RgK!inRuMOgR4kF}_z>{kcd#%8`DJKQL)K<&CQ^KawW;*MhJX@XQ<&xs#x zN*LUc4JwLfO{FjL)ZzT9u+iWF_ zh9Xc+K?Cgv?{}fOEf*m^l&>qki-kLlx8w z{{A(4IDG5bR1eW!WBQ!aSI>Ssi@-1(;?*N~Y`V)HnQT8`OFGI>^Xv^G3Ut*rAy{}d zqIxKxE=|DE+O$+guKBE!oiP5g4s)l&HM+L_g0_a_h zoeXb&CQ>~y()4bfO~VBvBq?|dHs2(x2>Ol+(g}ZdON|76Ca>P+ptzA=@g1oic#z=)?cmW04G__tv|BRVXR<~;_FHDujazE?wFQZ2I)}&b ziaR>Xl%}yf$moZ5#`mk4A_s6|1>5q6v{zcoJ5_YsXJ&9@v0|82cg7;FLLZXFHS9za z1I>!KaHkx#7rgFT$F`JBKvvdm5+!nHdANh+sYYFD`zmD*W^jQ~PA81E^Iuz%Dt93L zm%(q}w@G4KJ6`Z{;;H`%`qm)M-@)wLh5hO9_`XDx@qk%7$=ptm;~#( z!;_wQP0v_$!Ee2$f0H!G?TTtRgSm+17z0BHrpkEuVVnP}>A|t~$gfonSP|gqYol8) zw8jVuiAfTba>w!#`uPEnSe$)aCwmiIbp7r83Mx`y#SV@ba$rkQNyq*p&t$1e|5mKm zw7)z3N5-F2$|?z+w54bRkTH`M*>s-D$m4$cSW?h7Pw(M1NR)acd|Y zd`bAYK1sD1{S{WlMC_vA653+Wx?Ks?r?FxJ0MciM1c-0*fzHcF30b3cE8={PbCIOA z*$lkv*?^j~iqb)}%}LUV=om_oy^{^eaV%g$F$11iR*F#qnj8q3Dp^sS4|+;r6mgJ^ z=6d?L+Om*M9yix_B6{0Ci+faP6Q;RLahl)nLcy}$K4b2i1OBBcRo^W?;4wfy`ayxL z2cU#|&ja@f=lM-MCg0z3xAZoRcWDB+NpfrA@x1989qCp_^u`9Gjj{7hcM}>x86v-l zpc_X6$|wDWmLWw@I7#U7UecW(O!}YyvwQgQw7&+uCuG^lF{TOJx{xNG1tBefEy;V^bK?82D9oF)SSeQ)637jRQ)f42D zr2+)S@1trmWW6xvlX`9Ivn-ag8dF`1KSeH@q1K!kSA!`uGfgePgsuBzH?!g7rH?A^ zK)Ha1!|M`9H)(nzAXuh9i;j2YL5Yb0)SBNfSG2|1EwqaF*pKSfKZmB_(aa6fkw*NE zS5SNGc!THw-5r0@#y#-t#kPqA&^vXu+_0>x1hOK1GLYe(z8QGQI=VD8C zmV?DvyC%$O5_6SuiPMXsckah@Lt8^Qn%{bzQxg$vr1F}f5f)!Ln=s258-WEsp)wUv zfxTy@P~!<2n||8#J^XpHkrQSiD#$lNOBy^aI-p7Rx^Gc{PToUP_+O~aKLW##PgQSB z`}U$GsA#BFoY?Nbq!a|!mDnxw+LUqrWC+l4L<4j{+D^qXYxi-5^5}4&%b=#r-9-BU z5cysMI-eVv4#1?M|8!#8vmp|blklQ|>?!LXiJ2((m20e!1}BCRW$yr{7U6+K^(M97 zYeM96EBbLD$)(`7sxrK~xB>t6CnwI@iddLxBH>Feqq`ebbpiC%<~BOZR<8I;h2ls) zg0i{ax~IOfK-qj`kci~o^}Ze1d5758>7&X;y*?$Xzw96X5e<{g0NecVauok~aV2Fx zaZ?=?HBD;ysOSU~8VhmW2_7pK6QX5ef}^MyjrZyHP1C13xYKW>zikf{)eIZ)-_yiOlhbW-;xG8=$?iR_>unKM zU6zAu)f(%(ajDTaGa^MdLnZL`u_$;wJCTj8B+lGd&Bbm&=aO~#I`Z6wGRNbBq~_aq z6jWi>c+-aHVF4rg<`C88J_A=PGB#BKnOu>5C`PGQ3Hmqi)y~QlBow-X9Y4>O*3o@N zuWFZ{^riP*mD87cwQ}R0j%0^Aw7e`HCZqo{_SJ@;6$%$BS>&I3Y{g=&PLnH?sRZ}G zj$jg{leUY!bCq5-jj@PE%n8F*Y^scJd`jrtc<3CnyVKw96Fy3vI(EWYlM;?FJEg5| zuekr!qpYGvQ8ToecQoT1VG}@i+y4Rn(Dvu_Ff83)Dj(b@)pkx`s!0yLBb{n-JtRiz zGC_B#FIwD+XVxNyVL+g!1X2wxe=?a!;eNnq^X0BWgRm~;7+(|ByM4@tw(nUx;-!0{ zkkOfy4QJhM=(y3I`jb$lE_3`e&JVPVH+!O?u4S{LK)b6WG2Jd1)X-))b=A(s;;4_T zeBM&c91a7CT}wL=E^H`v)~8)oSH#HXCHf&n)t?zB5+P~@NM4UkPEwO*MV%I2^OAAN zoW)n#Eyfo-&ZGT(5|m;L-#4q@-BA%UzHqf>WH@<1y8f)Pu!YS;rCNVY1pT6s+%{!# zCk?wkEA{@D)oM~tOV(m>p!1>DKo5Q_gp{{fEFpC0t&Sam>ic_ z(0ZBi*8wc!)Y{X!A{WE?3pCtTY2n@q6G(BzD#%9@qsE!&v&tgFKlRUf`5j_cPByGG z@Mm`LD$pl#-APTbT-Y}&ziM?gCl^99>Wh0nR>j+UJypAW0Idn(hyI+@-TS+4x<{kkuGyc9qyCf7t%s#?0ed z%{M>%gE2MxW@?dbOLqRpO^rs8p9GwA_EM!^PU5XYCi~#O9(c9pINbuy9EJkjF}rP! z^$oQA_P?Ix-&WM^l|GMGh-jOiBIHYn?&Fh73_S1}*$XE9h`TYgqZ*H}%svI55yw0K za&QH4Ba{905cya-=8sF!ntJ0m!XYl+*?ue!(>7&q)(3F6Lit}Ur!j9`G(wmDURrrq z+4Nm}f+xWm%%4ar zQNO=?HYY>#wwd+pr1@v+Fsz_UYdKE0F%~mCIq(xm68L+djHmQ8mFgk2h%)qkq-ewu zKU#;H#x}k|+bbgs?e z3;2f<52>$LWf~KCj4n-C^CEfBXpTJ|4B98stgk$n4hXT`!_t|N?t><7fg1E+5V80e|eAite63^<&7@u(8 z%FF9}5d<3c=ZA9Ui6`k_pA|s&jlDj0kb#Fn^P&Vu`X(x9HQ5@2x}raP8ChN1$-G!3 znG+2+BMYqO!(Bj3)=_nJNQUtVOgIy3^MBWTV^(mt)_SGBj2tG+$;^o4R(MufAyqyL zq1r&KnN3JDCHm)8ZkppI+06Yh(^eX3tKJPW;Vdub>H;-?SuP_!-PWyNS-%D zYJMf_&unIybTD{N!M7|Jq(&lW^sC)m88zBosMd}hPmq*V(|87G&*+~`-!i0nwoHsO zw0h5Dza%WU4T_A61R-hZo|@}(VH(zp%+hSH$7oEYd1SH&CY;hlc>I-y?|pu2Q;dtE z`KSV<2Dl~)jhqFgo3N98S>*4}t|en@N_<3X=fD`S1zO|xzDH~(8kKUDKNpdmWZoYq zHA2I@aOGsu$j{GsWb3*}k7Cpe93HENA93%pYkpIOjpNeO@;v-%8uvo~{&IBm3^3zE zds)IJOkupw^HaZ2eWxM1090>Zo2ynGf4~;Gkep6y;I;pdzaLIhIbGlw?VuWIm{ zuxp($$0sT4jVh;fN_s~AP(G->?vXL2-{}>2KcV+jCW?(DZ|tOl{}6Nq&!r+}n*NdW z)+-Q6rB>|v$R#F(IWscXyFF+{dJ{%5#q=CSRo9OtZr)Slce%N|r$1vE<<@Mxmf4d& zS9UALX$o(?v~5~8e~|Ho6Sytb(k$JmaBZ%6a+gCH z#1JnNiqy$Q7Rbmu3rh}SXCLpB(#FRpKC&FPbi8xG7E5yd@U?hDo4%E&tZ#>76S1u` zg7!-zwBpNbBkRjb(_R-L`bE2mK`I_^}=-2kk8CcjD zseqaua$3w$52XWOxhwD4+kWG!S(jhR6>K+_-H+pws3m|e6nAH0-H z5d27IfWkK50@QDl$8Fnoz+sT%2J(BEXYQ(FL zlnef%-4D4*&j{I8SeuT=Birc}G70tG^}Z@0T9=tf#2L_iJab)@2@xyoPy}R}QI;wi zbC2KZ#GoANUjQY?EDXH_I#Fi5%h%eXjR22_JyzOZhIccPFZnEcCOP13hD27?KDe!+ z_&hT=414$+4704K-~ZM+;pyM|C*2=!dWUG160@4xKNkY7z(1uX4vRMnC7oGwllR$0 zNnLXliJy&Geh(l@VxSC`44@ZtpN~i=#Zg8|Q66YpnJ&I~;!F zc+3pw2e^`@;b!*^+qN8u(jSY9bLh!0C_yt=xWCM1*Vnr2#iM?ofhHp=(-Y;5F^{ER zDwWUoyLX$(VrFwAtK}W-68ZyctdH#Vr$f6@r%6nxIlG|x-3|(Zc^zH(Vzavt-C=oy$$#ASlD%$6O=~` zC1gif|Gj>AH}1g1_!^rxS%!aq%ivxiRr+2x1@zjS2q;EuC9rMLfM@4ME)E*A0#NA{ z=saJrVs>3Jdvt429KK_yP550HO|V%fERCWOwzY|i@^r|qK!+#<{^sn?cfqqg2{8Kk>6 z;SSmH>I9*->HJ~sN~y`+)|qJJr zCiTX>PAeX9^4RqG+gRk>TQ6#ZHA4U+;|q*yx0f;^I3IY%uy-PM)oF-IQet}Y6Mf0{ z)%!;;fnbiMl?S|!p0*gjf(EO~$gsZPn-KhJe(E0_7v*9jdS^J&_@MRySrb(Ul2n^jY{zg z&&OQ6EXUE@J`O|7OsLWN%{B1tNRF-sGQ3i&(oPJ*&i(}8tsmv8qamhJz$coV-lLr( zetminA)uiZZ{_WMp>Wv!oP+EG`X^HugK{zUqs%^l&;G7X-Hcvl@}etV)f&x z2DSp9&#;+7jo%8Yj^__ZBOW;Yx(za{oTqlQEl0zIc0H#$wKr$SZXXNhzB_EKwc!*W zp#b|beB}PF+cS0^IVI0ChrM?Vzx`X@JZQ1I4WN}SWs|?G%;8g0J#BT7I{oTKlj60} zyLva;%GR*Hvb4wr=!M{MNP$WG{Z_At_!ha+a^jJ%9_RP_VGj9?36{=4cWEwr&Vf(f zuk%dqj~D^ZB~5In>{V#Nfz8!3@>BXM?rQVA0CL84+>mpHC?81b&?^@Io%6QImpRk@ zj4n^+iUXQ|QgGGCTFNhTZGdF3SplDvn+tN-1Zvn_GZxe z{h*8-`8W3J<9_y?_Gt4Gyiez+rl#gWZmuLQON9mrNN$`rQJ#l=?WaSSZHiT9<$w9- ziY0BGRRXwBKBloDHL<%bK^sYE)eKctRtw&Jc$t`cu6bv!9bQi~DEjq)>hE>v@!i}W zOnyMcr}Bh?I?DJiAAH360W_kK7D@w?kg};4JY=3e-v?+&`R0j}e_(^5E$ZKnFv&-~ z!zF|aOiZUdw2r$~iE?_nQKz2Bq2sMurOQ?(c&<|1eqptaAvsd3mt^iLy z>tRC0fg+S!C5uw;pP^~%jh-%>hLl93qONHB=GQ1Ny$q3z)i$3B)8_M@u%@(}#(KIY_UWhWu$ysvp_QRGihCw=;T}OZJ>tfL%@<8FiWyl13)5Xl*pOol%F`f zUO)&0c_iB_p1caa=(e_^1(61yKNFu5%wE8FQIrqb`d3+P&NYts1&6=^B@n#c3q0J< z)JdChR%cEeV6vDx*vu+>M^ef%Sw!YAdj?yf?v<<7+?=7aLWnG$NC`?LylJNEm0P>U zqL&RIOpKQ1CJRe-4x>vjVyfCG1Js^=J(VDVGg$eDjcAWx@9AFNH!8JvKWax>%0$ga zIAp(eVdk6v{%oKT+I!xSAbCmgTf{QE4vyU_Ybhl6!tRtPhn{wbpMEI{T7Hcm5FiR9 zQK>gIbA<$|@f>nfI#aG3CX|epJm%MZE}Dw2?ugP+9J}K<<{}ABmre=>mv*M%1R^Wv zz{R4wQeDn}n_uArh(YkbC%BGi$<&kk4b`FzASMZ;%)~QUmoX{AYW?zvelpQ#LAesQ z+~^`}7Q-?>i(wE(?&;%GNmQy5)`|M6j&z%HLypR5Z_aqVbC%`tYMui5})f%F=}vsHd6Rjo%1wNcH^rh0;5TnUXb?-)mCdR+0s z9x_e2*+d+q)vD>~PwyIEo=x(@G!0+%?;=1IxY%P8TaU!ugYnyRG?wBN;rCymS)zFQd)*?$waPHpaH)(9UJ ziqH?@%zCd!vXYaoXR1_M6uJ~pbhU{_7y(md%~>9_nxc-pI1NV3_!2|c1y1jZZ*KwI z^ey*X(b^(jJ7Jr)F*?f3We3)PhU;W;ah#Wa;Q^wY&PeVU=<-8PZXbr<6TFdQ+|r_! zNeDp=r@i|R?fP}z`%^5g83jyL_C5vKBy6ko6}m1Z7EteIVRk0&-imhB3dhnI_J4hJ z+*=WLGZ)>vA4a_F1?eGBh3%e!ubvhpBt}Ew3+L_y6%Xw+ZPy#T`_5(v);0Z$f929w z=d8Jsin=Yzg{dax4S9Dxznn`+j09hkFeoH5DI$cGRK8{+?aUYUFRNUp(@ik&

NYizkJD;S$u-$+I<@Pw{oZUSb3U$gMVgxi3JxJ;OqMdiryl zH~O}aW1erdgCnNabj76s_6i@mp0+~18YLDeK7-p&qPSPsULI(N3!gD0&d!LGgEqoi zB00TC8O;Yy!BTYnxVcdp%cA*l;;aYWt`=d|UbhMgGZB@a?n%Uz+lAYTb|3A`EWV)5 za<58o2OB0{^~Fr7%&ezfN*X!TN=vAjmXW9M5Z}Bd{kKU-@b^9=Q0gouJ}v+&n{?p) zx%MD(YlYoAPETt3B261}yp*-WFf|a#`quJCs0Pk5*y4ATNn@zi{MX6ycUxKjolPL^ zq|b+2O6h}<*ttT|)$DfF&bjl+HA7a$AVU-FV3HVJ@AXIyX9(z9#z6K?)?;OkLrtU+ zho#z9=VVKh=2Uhvn{xfBq>XHK9;Kp_GnI{vjmLoZ++KGG0j{Rd)XP=ECKNM_P=w<8 zp8aGv{l~9WlBx|{X=V2Uek3g-Dh-Jiw==!Mh4JenzO7}Qo@#^L+H0eue#n+DN%b$? zQ1?nJ@l`Z}-<15c=Jrn04t7+2tP1d>Mg-`1ow`V)lozDyYK-9w^m)B2I5&?44eqKk zxsa8-DAf|LmZN=U#7GI|UiL8HVhAxq6Pbi$pFx!{(AIO-$KO5Am$$3c<*b6io5ZQ2U;xl_$Y}D;}wh4 zZD%}h8;-Ls762BV{p_kkbjW&hvNI?kDe0Uy_V8|w5Dk6i_7_8&=^z{4fkF2HPx%}0 zXzeN*6*{BQR?MRNknm8R88Z{^o0`bXn?V4LU0D`IdoMqaVNmXi`ucX&%*yzk#?27> zX%xHPR{lvK$C z?*q#JzWfK~ne_9)7;^rv7!s2-zWH!pvVY0!HFAD>&1()eWe$o@^L3t(mp5LbgqweB zND|*iQ^>-|6`J)``C78l*VBXM)k@2hqV{V7rg=SA)q(R6B6$Dk6S{m}YNjjNklm|f z0gI|F=cGTP&EaA`2xHnN?(&)NX~vu9<1G}j&5waK{pm~P@0ANK5^|DZ|5KHQc+eyg zBxFsyX_ks^T27TW;s^5>ESOd?#VvNbJ%DgKtuc`6juhQ13wo(XXio}w0l4TjiI`jm zPE-_|!z60uX}cV8n+mcyhO?N>Ah$5m@(KOZuxYdhLP~LHf{angJ5P4wfZfZ8U#pi> z!`eg5<9r{(+I-+1V7bWI`Gv#;_r`+2M&&^S#*(JT@EsMMMGS3bHK0w zzQRFrLA=}eV8XM)7Arg2xGgtLe19ja&#M~(L04U4h~qvf4{L8-rEnJ}WY%AIC&>HR zk5K=?qB~O)xft#7|%#1iiQeg>c&N{bkq>O+Cf)^#F z=jN*GQCkh%aSaW1nV5h$9+aWV`I%+WYqGtj-ju-weLSLK?s450w2pHcxKuBG{3#;D z2IKc>ySW1(3RHZCmA>kVR=vs}ykdAi46Pfp_EycHG#8(>C{jairk{LZsaOw? z%~1*jYtE9MtZcXR3G`bjR{q^H~rrZDcGOqr(-527G{TJjFjchL<+Nu}t;q0)Y^h~?0}Yh#XYtOjdQZN; zQgaa|YT45VKpbnwff#;I!y7r?_h%AAzC4^lZM-S7$JKFP!rtnr}7Q zl<;%9U~wVA7%$8pp;>2b`@;ZN8J0Wm>r1toPmY|@AhWC)>yJmce{z}nGj7EEynO}> zZqed(B1ysE9WIO+$X#<7Ypwo$aJ@%@tiJ`evkHa&@`Yvl)Lt?K2!Q*P(vI!kODV2K zu!GkvdVv;UjjrAvE#~cSOj)OiZLd&~z&69GrTssyHMNPm=RFA>B1_-KKkT%{ zw_cPD{zA0Y3S)1|qs}S+dt&Z*St`Pb{HWCeblUfwG){rOB|yO2`PnU@MZIxzG4#00`NyM|@Q&9!EFp{ zZ#*dJB_`Y{$m_A83j^o-_}cND{0o6r-13D5H62vR0am6>%Om5DDUGp`lOq)ef(8Gq z^BNVe?+*Tw(~m*9YyeF9gGUc9p#-}Z21^ys9@2mtRCh1MlfA;&Oo=kRIEa3Z&Ag*= zMpezQZy8^H2cs=nTu3<5eeIm3tJR7|D_*mAM!`x5P$n)(C)Qbn;3n-aqY595#R%D8 zEKe9wkbYu_x*f80`_d^teI1Y<4Y{v&V-nFxIsC44m3*#GAoRu%IeO{52#I*f;6H;| zdUnTc%ZJ<_Z`34~mtDnm(%?FO8zIJ%Xk+#L2@I03t$)FcY`nDGKEd*hIuu=L2Nvqm z2VOeh@}wNopy**1%u^_yQ8W0Jh(=5XpSWh^NfPI%Eu(hw5-z^+IC<0+GDnI){k!A8 zXBs+d3A1i?kNqh%JUwAsTDOU@;RdFyUB2 zCNvvV*DJYO<&Ux7I9B%1=JRR?6C(cCL~xlUqfGn@~1Ft(qHku41z?T)ti z%su*hnNXnr1?8(v4&4G7YgE#o!ARy{HlG#IH>l3o*hab*YyALc!-ZFh>VQ@K!3CoTXFQAdg~^|Bv$$W%wKn11r8^%g z*S0PLJf#aULRY6cYVe$>rpe6TpPj}=c-ju(2uMrX7eHL7;DAV+XceeY)6d-||B0?E zxc5dk%0T%-V00MTM)rO8d=DR!;Q*h}_4Nz&thn+ZbfP~Jv9Q))=3{Y>??t3-K`Dz^T`^Tw;@L{}1iNRpB9er(STYpJg*g z;$Jo5yE{ydy;%eBaHgv3VLg82J-NoYMU3~;E_+@7J=ec?M{s-?W8Qdd%Xy-*tRJ;D zeXx<{nT}2}DIBl4>oNED9U|XPI&4TgFBLl?I#`ZJp_@*Nhf~LZ80RxU&hv@Kd~9>U zRINy|K+p2JnJ-H)y-KuJ9e?13o`oj4miLghZ;a?@(DjX09D?6q66NzO_V_y8Wm?nr z$1K^>fOBu|S>%2xWvo?I)f^W1Wluw(%B)ptZ_yr0qGCm>!<@uGKkK8O2vCoSF7!(Z`z zP_yw0c|`(sd9sJV=lN*U$7K>OqHNL{U~>B9r4-MytYKN`^27OsbI~pf^TLF-SMi(Y z5hSZE9duoXW-0kKCa529aUiN=2x&gYVr!%yjc|rOQfo0`gBptx!*wCuw{Avy;z({= zcO*J4{lfd+W)<$uQPtqKUdT_qaqe_8!M6Jci`5(!&Ek=#8y4{iNqrQr^$Vf4D>-=~ zZ~U}QC@O11`u%|-I4l&K;vb_TBeh0KVINMts9k3yeMPf}-j_vPjosUbnZWq(8~`>S zC4}?g1^%acS{Ri#$S-=**IG^+^g?((#lLv6dpC2qBK1dx1{#P~;}2KgCOvl?YKUX_ z!ys0ryVmf9ju! zg?gw7xhy9?E|O0CTbJXzQgTd-|J0fAdtVBiH@ETYbG@+o2?!vghHRxDxtyA%=4k2K z{ri!tu;l@D+;OV59M_g++2qIf@5QUPg9zPU;cZ|Z(RWRyDlc#LWefku^(gW0{f!~u z;9N|a2tx0|M>%3>brkD9A8Yzy0j9|dJ4t3(P0@{YJmP+K=0Pwh!%UF1!}A4>HRDNL zNS=k~t_s`fp(YOeyh>FWxeJk9=W{x5_fNsSU1F*9Uo#$cvp5t#_;u1+#v4=9b^9Z~BWY5FWEHB#|7%E(*w^vsQ6_g3rQ2v_M& zsN& zjk^LH5Bk^6(p$J9G1R>p(*LLUukE*&s;RZg8ksUPBkDSVRfDRnk55^DvoiVk2*wjN-Oj_DAC9LksH&NN z8dwlzIQmA!5cJTGR@zDMg+5X$ra=Hr-`MHGGNQX2{pH~W2!-OKn``nYdoXx)rTwz) zSDatXvBD;aM(7h>jq3|yWY9Syf#$B}H@S=-AD)_{OJ$WQp&I#=Gnp=*TFV@g&N{Ib zt^O*lTg|L7dC*takZ>*&JiL7#tx`A$1P|qCniC=V1rYnTvDu^K(MWAdFIG@aG=Hb6 zo<*N2pX-|QB!lm0F}TM{aCmXC_ zShWf&;nya%CSTH1EBSR}&Ugm;tX`Sho5!-jp5K@>pLDw}5hLL-n0vWDVi3*TnVhp4 zi!c_x6v$1ygoCw4M`4&&v8403C2o#a{gb%J+l>?}(mU;9UA7yBPl!1R{>2c}LTLF` z+X4`jhM%#ej*$KCi_Fv!5x)27QT5?Xc!FQk?XcQ(96%$84c1F6cOO1RT~@Qh=K<5S z+-RyKSHCi*$XT+HE*6;E7tmflio zq@P5eS19#DO?B1jJlwo7xZGD9mWAq? zJ#0hmBIE&a&`A#q>h;wN0!{n;%QX<(+vz^%xy-Z)UCfh7#~_#LH!ba7tQ?+zh`0R1 z()SMpRVUE&=Ic-MW~dtiB`$KMqTaeGCk*-Ar@h#?wMA+qPR+GABu|rqBarr+mTO<# zg!GfM!21p*+o#t&tE)R3D^*3{+4Nz@djv zb6T^Ha&sw-hW0c@T`d|}s5Jb5A3O5TuFd+@OpJ)i`GPjFJatKLH|CF$Q%7_%To&IFUrhGQP_L{y~_Ch$MaVxr9dn2%m7_x_Tm*}~$$urpin<_`;3*qO; z)Pv6==#fVcLOcbdR)SSM*5~nP_ZSq1eH`#ntvhWE3Rd;IYa)%D(FL46Z3FQkbd0ZY zI#)#A9gICoHBPSeIM!#Vt6Pm%Vgh%8$5J;ZC~M|<4qbjq|Bn4efJTA^R@O8IKQTCB z*Uv@+I_jr}4oRzDd?D7oFPv~Q(pL&^Y|rcAS3KQ4AKQiIDM6lm;V+G46n z{=_+)JEihlUDBwx9Lltaf->$jagi@Z%uVepoJX z11E|o#BJu6SBosy{G0+4!_qd@b^e_n!TG;%0;Tr_c?om;>IG7|{nzKanziZ?Fv(m| z5j_m0xyj~{d6D{okICHs-A5xK(;h)+Q>V^IJE}9)fRRt6D3QC%IasY>*fC`fVYVl( zcdxY)6Xi=D_?5m_uc`WTuzXf;`7tM{0jI@L}ba!$rTXITBB9Va+79Z?nWp;`aPIj-s3%%qF8N{j!5Gb4GjGGD0?i+7gkkO1(zPT&G~P*5DW_& z0goYHQ#T28^$myzp+90`?!j2^q&{jeqO6?9**H~km`fPP!&h+{bSxrtasJJ#2&lQY` z>s}CrcCa+mL0`}N5XX0>9#b~$zl0=Q7a>O=xo+w`L&hSs8=?^>MF{pH&J7B%IiMzo z_LJW=TcoLcA1SzcRTJ}fXzTP|1oZt|R(st7uE!~>;ZA{n^28y?GXbWSQ`|XXbdA7<4bk6 z;f@weO&q`BVQviW?rC_-)qaHtCZBW-0fo`pw+)r zO@9e9uyg1rzUI3D&HZu_mdOUy@@zl}AsSCL95?e`^wH2#t{DjhU1*!C(3`d`+0||~ zOewM0`ruuS4LQx*IWU7NMY*&=D%5f|8*;k5W_cL8ytdY(_W@Vkw8!r|qKu%%WQY%J z{>%vZpQ*t20~m8;B_mRFGYP2z{`xR&A@{IQi0P2!i(y|{`n*tfVl>tMuH08)M^T?g zB|y&X9coc5xI__=Bj*<`ER`5PMT-4ORwm3?B1%{5o$r&l_QjvPn(XG49+LS1KlR0r zrGn`t^ujV!SPI8MXTGnA|g&ne&$KPdnFpD#$v7e53edQzXwrM%O#7Pjj)O5 z7CrfQOk<@9v`3Y0Xs$2F1q};gwfhx50G9#alNk_@ zcg}vbIo;o|K;+opMR7az9aWbx)d`i%=L=x|=*~IcO-ybL<-LObex@aKWl#vIrCg{V z`eFFV!Am{q!`b#-@o2!S&JU{Qm-MOM#*1fJ>3iF9@-0LDcIWebOir_sAdr}5KAT-{ zJTLUWEZ|^^3=|NQ3}n2tG=;EvP^GrZoLgNga!Eyi5Dorxjk4{}pFiX1lzZP;+9777 zLm2Z_jpn~y-cy*DGwi7@Cz+CnQHP`^#iALWPD5+?veBRSY0X^EDWCO%VP&9wQg^D_ zxc<%mG4|&1P`_XQ_-ja%ES04Q$-70e6jJs!l|;6&FQM#9*~c0T_NjO zLJ?ydYYfRYXl!Gc?e)97@8x&j-|y#p-|s)`@$i~+UFTfSbI$Xe>pH@Um?rFt^HE+B zqOY`eb4f~crM||ezfKMxAXd#?ZNH;0nYgwl&pd5bzlaXmitE4Mpau8xU~XvIZpp)7 z)^drpjn`=7+e%pK(^KyIJA8gAG zE=L~(jW3C-^9y%s(~{bdX=Yus%XxkW2Jzfe%ca-#65hR4NtAxAJLF3{UADSijJ9!~Q#XBRz-h0awj_x?=eL_!Y;_)?Bvi)#0d?0BWaO3*b~LjuM4pnQC3brPrC(@hyC-=JXC82L`VNf_-XQgx<= z?T292Du>5V$R6Ss@XB$Dn36tDXv_DNtj`h9b6%_P;f=mAXM@1AR50mGU0C?yZ}~|q zXXA~OGB-&R_oL6TR&VXLXq*CYxejr@#Bpk=!ZYLPR|i_7 zXs6F9IUQkvjKLJnzm;)2J4WKW$d_V6yp(I`m$IYESGd{Qqp;tCEOiLcslQi)Pwh!q zR^h%BWYK@&!5#CYBwwlhn`7}cEAsoch+|qu_`*aho`ijBv(pq=kw1nR9pO-W^=18; zA^2UcT($M-dH3Zqm!iTs6!M@mB>S9Nt}b18jnkyo>1T_fCsNEsbkiY$J%Ip?2x4JG(*ZFFl@`|Bd{$xv zdIS4vCF~$wl;-p*3nXy4D*CCtf)nT5N(Ak!*zXpwX?|{KdvC<6d^;j7rPD9%Nl2hX zGt8Kp`Z7CbvAG&1#VYRw*LR-}&yqiPDOw@c-RpaRg0J}+zP?IN+Ta3j{_XDSSJ+9T z$4(ghwGS|G{V?Wx`o1BWlrel=1CXHog5b~2rj`lX7mTzGa$b^4Y;NaTo-XJ> zXFt8-s)LA0LZ@PW`^+p_{66|ELmCzn6U(BZ8+y=!jQ37IPdR?xr7!Jz1Q>R;<6W5s z?^~{kM*jZD;oUEq7p$y9-3$*%X7_47?w3Eg9`!YMi}~F(bgJP%1<%cSK~ ztseFB$QdAVjh}!2a-|h@&^<3~*`prwB)*xmTK$m3+P%KvQ=iWt%4h38POD$n6TX)h zD6;ka$i*~;MW?%2CD=QMz%$hkM|;6sQD^a%Q1QR*>#N5t_-6F4ptaruI-IC`_2`L< z9a>@|tMU_bxGWZI*lMGALG~hP_g%1Dr@O`dIwq(rq?W&~_@2JuLnC8snxzVl0*~4V zd@-mk>M0b-G_p7X%U$FydWiGM+)KAy#_v^Z0Nt8t2mHZYOa9)^uS?aJrm7QMH>(Uk zXoLuXN{0ZWFAoM>Ut}JvcIW3w_u=|hE$qjGfE*^h+XXVtm68|-(>RZxw@ZC|g9~D; zHh-imAUAn;|Kz?k_^sxcAzH$#jmik`I7r&j&z!eLFXkOTo zbu|9F+eemr3289Lgo!`f_U>pW7eJ!HZ#(kh=P#WJmv*cL=Gt~y&hGLd4o0jOhYMx; zldh|oQQJ56@%z?8rH?|_8*0H|X33A|4R6}L(y|>8Z1K;3^(~Gv#Q;yWnw*Rr7(n)| z76TV+<@EEUW9q>!8CTnFd%UU#d2;4hKyj%%b@e3<^i>_IuGT4j7TOM5T}&a9E0el_kLf+JKEdxS0B#*Rga$j z9P|E`EA#5LOQ1zkNhJH$ced`Q6~{nAu%%wj+^1Q3?&08HHUjOZ6u?Z^NBl;ztANb< z{CN2RMfQncTeokPFsKohnhOAY;EKFR0M8I-kg@?waab__(#yvWzz&|cTfyd%M~J(X zQ3zSOp2c?DwmG!f)XViI((`vmf#Tnv-KS(3k*hfK%e%;{`QbIhas8C0_4Uuv8-wHH z&s~%(c~-PWGj(||PakWhIduWlQ#u4tFI-D;wLFLiJWV-mE#%#GZnL*Zp|_|d9Spq% zt45?>fz!)oP%vrFK;`f`Uz$K`YwJXHku)uP9yZlB3ypI6d1UGY(6bKcA$PszRHhN# zo{}G1j^Y^(McAH>qWXtyGSnqfOoJ7+-2fO&5xtXQGukvNbbPtB#W03vJsoY|AV7=v zPm^XikD9(bn*k~*D&Ow8?|X9OcjoqXo(Z`VYS3DmbjU{hT-8N{YYm1^K4yY;7T?eI zk#jqO;J-iJU7oPhqG+CLs?NQ)B@zh;Kt--CWtVqpWb4~I-0!{2DF1~{*kH;yJ24CnT2+y; zN@qZvtLVcfs1o2^XsexOa`ChZD6$N1{sQ-z%>`a;>*n{-v9WkB~ ze?WW-JzBG0;rnV?7Zo>@Xf5+;qli@Whm`y$%Qba44Y7B}m9vrgUB7-Fy!wIJ6_%pr zOIE}ucdk5-sp&fBmHP19v$F5$TxC+x7^M?d^5u7@kyXx%d#Pdgr^d+%PRJ|2h4vmK z#?@aAK>mKZfA+FYD@?WPO5gYNa`zf8YK@gBX#0S~KCoH5@nOWYHoV9~Eq#x%4L(u$kqZGnH!^(* z#s-9H%h&l{E}yozX`QrNgdPzQae<6J7C#)_iuU`Cvn$0X5f6!pO*@LA#1YWOeuI623pUG-h=e3bt5`r@RMf*=Mb1io9i(hA#5S%krLQzFj`=bE;-H@5Qj zouUQKbxTgKZPmFj)Fdou?z^?D*ywEFo3S${n5zPhp_GAuk7G+~guLmp6!rdYt=gl- zHLJT!Nsqucp+VzMcs&)~Y)bWUiT;~a&$_T0*@TOd=IeM-xVgDGq+I4ozE&A6j2>h0 zr^RuX2lykpuJ6f)D1oeUvG>`6a=XoY75T2gBtK-^r&GJRAjn5H{OI)Qg>%838jjT+ zH2-6A9|%oN7ZnDHqHxHUIV?SgAV2Ed@jXTTZNo939`cZ=f1}s98)XzJcEdwP{I*#; zYP|6ytL5f-G2K=Zax42z2|p!g{w+Dp+hBF`ex6JX{1t9Tu0 zddzy0@g>yU8-y%g-|fDes`(1q$?2~-ra^XJh%y=7M8a8xCEZ}%)&hzTpUGX4w+hRQ zS2N5-`XBydw(}cFFzSqujLP47kExswV}5i_In*!nN8Hr$4pLZ7KgTwoGny%;8ERf- z?NuxSYm#BK1@omc%M3+pV0(WU2z$r-=lB|YFyF4Ux<8k>tYtoZ-{QEjDRa!K47Czu zd8cR(5SEr4b|BBZ_*>Z3Rn$_QV>?pF?++t5A*=sHdT!!B&|yhLx`UP4vTy z8&9Z$oh?=#WZ!hmCzg}UUoCtO=(&igS@ma5S=~qdx%TP`0s(2;<&Vr}sI`@$nDK4? zhi$v7J~^A75Qq?j>sH9kFtt0eAiSMaYOD5KTWwoY7F-J1K5~iK)d~7bQQ3nn4u*Vt zl-FBDY|wf<-im3K ze^s?=e>uwLshb6#nEsr^*at$RQw%?lb)CbTF>7?MZsyNvjRhymPl<9a6~R?FmliaZ zt>kJf+HM-IL*nkn!oi3z43IG+SXvmnb2%CrpZqgXw>-y}e%!cxj8`^DhVDQogw<$PMfO!qQ)%Td%h{qJ|5bQQti; zSteBpSpUI`(%Cy((P!U}fzN7v6E0-ECzyq7ePLTV0%;RV`5QuD^rcA`j9d0bGrTGw zV;Y-NAff)Qhwo752{Ea^KO1ewBYhVeni6>bmVAxlWkRN_%@>~w<(4{x-!IiCtKKzFF=ScRY_aX>3vV>z3-KxFisDh)-lA zE$c2NW`6{V08I7utp6k**1WETG}hU1g*_}1Y;11u(?l1;25Tn48fLcK$`t|&iG2@k#H9khCZhal|#XVF6N*_F&b zSF!W=FK;82f0dS587iCLJ>uLrY^zb!5Wo+mdJl`DTfA7-HYF!gRW`V%U;X(pu-@8d z5jJS9YX0u=-*%9$bBkvT{a3a`=<1hNhYr<{nR|soyUj%44GRx>QCK;Ptv5()JMtjQqJ4yJ$B zS+6?;$5hM*wd#*%JMTI6ewQi)X;Y&`U==>+_3Dr|zYc8+;jUyt?`j!%bcR=4J!fTQ zWnw|YdIjE_kFB8T`HGzAt^{zrKe{DUc?erZd#n0$d_(IoMfZwjmS3gcks4_n^t?Y$AjCo#UziZdWHWb-R6r_fc-e5XnxxFAf{%!?BI$wNnGZfiSV z!dQ-7#JsXqxGULESaokpbtpUm3K%}ql`Eh0cl@G_V?+R4n&x~(U1>sM_i{R7DwV(9D@Bz(H z|Bban-FJY<{z+y#m%nbR5awmrha|dCby-2>AB6$tv>D9$tBRUscHIJUcLyue_0GJx zLE5?HCI3$NfBG_izi z>G~5J1^KtgT&Y`hvDUihZd>W}ju(7bwL=u1s(KW@oN~HuqBSP#c~Wx61hsTS${?WOr$_huXYZqBr%e-5;`Z;kZ{Ue9>FX(4Gv|KiCa)XJ^IyNSGx|%CPT{)GjR2 zE6+(3zrItlfyb3@8zBIMUDN~@c-Xb@vjx~N-!|!B%)s0zy zR?`*2(%KU$gZ=^L-9xu41*j%J>|8!Cu2!IZ73_v=nbxWLoekI%))pHv)!;;!xa+>= zMtx8F5(x#5CEP4gI1F(3^zA8J+NG__B@;wnecA`uR~5bDP@=ukz3kJyMvjFw#5c&? zO7J@Ze$+X=4Yj_^7V;c|TrTWAAgbCjJR*O4q#pjrp*f5KDv&!W1s!`TgA)5@Od#Jk-coICsJb zo%pbe(|i4DGmH9Vh3tNMtLcY#8SO)uTs~!H?@rYSuue9*qhi{!>L>3{mP_lbO^NYp zz8V?f^|Iz&%nqxyYBUDy7~~O)E;x7k^#GsNun2tIxZ029(Y+bi;|6Q8*~bM>5rv&L zZYZHYpV!#0EeiApc35?GX(k(3Az@{qbEhQc=&CrIx{`RGmRfROM8s437Tdp}{#oiQ zku}>o`8s^=yCZ6(^pTv+x%}MR+=)+*RcIOKVXh#;NO58_E;2*6VPTm$J|8Y@xl8x>@ z%iyFEN3XyP#X)ohc>JBE#(Kv+XSxGwIJ-HGkmaE&(QqfMpH@t{`YG&dz~#KA{Ftm} zQ9RFUIR7QcFf9%oUI8dK);PL4o{FQ}Bhj!cr#~_1(*9Yzi<_$TT2N5XITyz4+Lr#} zI7dGAGmV|TXuA0F(r&*@4VzN-A^gnDjCjd=Y#A!eG_Q}|#|6KVN!DMOBzz2?>Pgr1 zt2z|3^T}1**83gQ(z9*c)@!jJ@6};F*GfkgJ-%$bw|2ZLo2{N-StwKQ;WW#d7r`DC@%6|Lw?$}?bFA!+l=LkkDnIM;Dw zT1D~i(!11In+dJ(+?-3c2;4O*4sw$Bt_*fHsqd0dK>ut3E52zjgs;%`yYH;N!^M2Y zF4x50N{3czbzj$<3fCOJ(J08K3LXT3QZqv9ah3Dfkf|5p-6$5H(i^`&KP+Tr7uac z`MNE=>*Q+l-dD^?qRZ@Cwp3Zi-P#LnNz!1t;_il4s`GA)CDSkqvR?S$#rnNL7l5$) z-afm*XE6nrQ=dzlr3_a2I)ARVBG(6-7k}|JFC}y|et<8Q=9rw!jNs%WfpJQWgJNzB zIEjEapMqaOizfyEZa-i)=8be>t(Zh4njlM0xb~N6?trqT6=A_3YrXZouj=E+u*?$BGJYm3XIvEY1BPRu4CDXc`)F|1o^KHrQdDU>$NK#cR(f4 z;2`t{tl8`?whF;j{|+p&&9^8<>rMOFO1vvt5Ei!~Ohs0|D)r$!h$x{rc5q<^;*_Nz z%dcFRSTddqDyL<{{Kx9r_Cm^PT~YU?>sTr5sIKn?Z|)xRTlw{1^2vm%HQ|S?xZ-6rV{=9SEX%AQ zyn}ReU=5viobODx6maN^52~uFV#aFQNkogWOu1de(A(PNz1QyEr*%X=8ecWPfK4hM z3KV%(x$>uh3xkx9N15wD9(TZLM(aSIndUK&%M_)F3uALW(er}=_%9qf+(ly@=d7MF z_*1bcq)jC0!@2D5-+esm9y~yZX`oC%I8Svy^EHJZQuK1uM9ycGRc$8j}N;W?P;CB6awK5~j zkEr;ZXHMBbgb=&+OfE$&``vIyBQ7L^7{vr3Qh=LqSQji|$t)0zMceZ&uZRy_5@Opk z)Y(zUDs0MU_iMQZNdW$PP{80X|Fo1oa~5W`-;qdbs$MWSY zqceY|$S3YY1b#FNCg+8yKB>!E6zaSS+ z7=(x?61r~~@Ga2)972ZqBSA)CmUiowx;XXa(+hZzSuTAIMbG-Ofa_L7I(wk!wm3Hc z*U^m-Vsl!W2`OOJ5j02@{0*o*?e8vx`K0F&HLUtoxXbNtVmikaxFE~0+PT}ipo%i) zK#CSZdo=C})ZMxe36lA)JEF7k(8LIRHjvs1_k(3YWHofk`YDt{hNYp!~ ztf^T9W=3)(G8S%40ZrjrNX`zWL+2ke*+ZhYV^eN~QNY^1NHeY=ZJTwvc_A`l3oh5Q z#U_BdRUge1?+?j;zuzj zN$n9Y+Z><28X`#PFQM>AOi)IVxoSpnLDs1qCrAd)?W_GqD*hx#`~xY*ajCO7IgROS z$l{tn>ugS$q&mL~@y3dI!&<-Bw(P&*@N}v)B=$=K#@(fGE3qDQfgn<~Aoyv+tQC_p zKRZ9VsB6-UD`zlI*V3TTvAlLXJS!*AK)|G=@_D(0#6Qr78WnH0MJ-3Agf*GbB>K|6 z=55n=KN%O7$@NV*`3)5%C4p0{!NwFA_M${r@WubT5Y?DSXnc)BsZc{<8H&sT8$a}!7G%cj7DDw7p}!x)LiTNO6w}e;kc&Tk zRC8bM25g8h~Anr3qt2dOQ9c7|`}Nob5^hx$ph%K5rh+ZSTj<&YtYH zNsrLCVpbF651sR|w}e!m0UOyT#1@oITPt8mfVV= zv+-bUyy{Cs$6y`jF56pa=3FzIaj~%+zAUvby|@~CNfZ`JA+1Ls%HK@tP&YZ3sM z*8Mm+c9T9UiOCj-^+Vd(>hFwZ4-YNc7mB(5^=vRmzlJ9Mr^9pDdYXt{{j(AiK9O>I z?DR?5Erd)?~Ne(Oj=U|Kxi4X7kxsd9s{3mOSO#fCX+E58G( zxi2?*4$BmW`bh(d{BiTSZTC^lVUDV=PP+bTI^T)MbMi2)<%CadsHm&|{NBR)c@Tt= zsP};KNfF6mU67@dqCuy)YK!9mx_DJ6W82`B}zi98h{ zHcTw9{Xex6`gv%%6~1k; zIX}>R3U?T?0R+^XgV2tj4l2N%@E|XZmD#Zxn~M2wNhc=g9W&LNrcCBmvnE0>*tr#P zcax%Y*f3*5th?0X(9nuw7-3@nx{-L>ZV^9Ar%$t*nukkU;bx@P9g3VgLzp9V0XQt1u8SDar5V5y z<`5ou4HxGGN?Hr2rlC&e7Z+u%hd4*my7kTn1@6-NXy>d3^ijg>{9^!>OtsPSmH@c@ zcbD^@`VxXRkFpru>eD{R;`$K1%IE#%O1{?HFK99%b)$dz}6ovQ!W3#XL6L&Pf2)C z!tRu7?#P$>xxmi4RdHYKj_vJ>*5}!FE zV$R&O88?kRh_k_!w|6vnd7wYh71{m`N}P9S=Z_LMN^PkjpZi9MjQ@;2@Zkp#6GYek zOsTC$^|KX*b#pVduUgJ)0IDG&A;JEhmfdfB6tI$doK-391>t>xrgJQu2l*+pL8(#Z zToVgWZ5PSTax6oR8^K@)533ug9yF6p9&{F-qD8bt(}qH?Y*@^w33CY`AcS^E%~hym z7{3o%{Jo)quH%Om+p9dLLjO>qh7jh|Kq}7nR0gn96RMbAj!&@B>~XnVYdOx0KaACI z%|)UagKXbS1YBt!X||x=jcy7K@Kq4b9Np!D`pT!6a z>`f4XEx5a}Ar7~SYaPw6DjvOg)4Ko150CC{>K1E!fsDX#BE-BHc&oZ$QX=rfQyCc< zVq*uPLMgz|zKDdRYl5E>&@STvHe3_NYz(6ZyXY^Bbb02&;sMaUGfkH57l>;s+GBJ0 zpGp;nz-Upb$DTXKqo$WKP;>p-3cq1SCJ*g0ur%Jzi-V%t29$u?&m&lk4Jtnrkn3v7xymFE@9VwBW>`OrNoE;HxLZ7N9WVSBIx zQp5d|BSe>lmT~dn^FP&iH(!9qvB*9bqx<$(E1ef)FxOj{p)YY#SD){Yf>eKCCxas| zfuJcC-qI)YV>UpXpwaaZQzM|y8I(Y{Rk>v6liT2CN-#1Ueju4#=u8>+y;J90mJ>bw zxOd}eZnDY|;B_kgffMr8;(+R3!M9Ep34b`$9XNKjU~0Zh&PKg>cssfcjzEWos^`cZ zSS7E~aYZF7aDY3bm`mFLP%@~W3`T9ann>k|+RGEfQq|sA`h4Qbep7O* z-iE^-7qE7D-{?xeWa~vi^jP+fc1aTAielWzer$xA7L!8JR$_kT`&OU3XBgcf(>O(Y z0lOr?ymr6vTkR~Y;m{_Ws?6eM>;42hW0<{{R~I_5ZV~{Z_h;2HPx@S<^zK296Err& zv+13b&igvv=-O1in~4vl5xGJ}+cEAx*`!Z{>=^K)oN=>-D_VJ@kKL=){jc{K8=o{i zX;!$3?YyfN_Ef9Vje-C~jr>r3!j9BzpfLIq4n%NGa4Z3K^)IeoJo8{Lc5qJl+>60X z9er}02_d9Q*e}c6>`3^M%CUbch#5PCMwLI7Urz+OI#VD_Jd<;}aE`IHmh>LW_vb~& zY{VoBJkzCnEI!$5Qw{fn2r`lwLS?~<-NHIAVn~w>vd5P4AI@Dq^8ijHC=w#0*->#i z<(8%Zh>jgJJFS)@f9flx%aI3>t5_r2H9jD#CV zSaUHmVb(aEQ{OmxxU?1wCvimFx97AHydhbXI``u%NM`oMNNWr zq3!{YQ(Du(w#j<`OAV@ULXE~Ha1{Z?wDVhgk>cy9|NYm)W5?v&Zl7M%qwWN(16hU{ zc)b|6*1}?4n{+_iRfgpUHtQpX#CAa1fN*X&E?nPDva`@2o*a#(AC%=cmrHoaXY};J zg|Pg$16cjnl%ntHa)}G=UoFuKN1!jPHP5Y5E~qFBxV$(2GH(B5#g5UfOPe&gh_8_> z7ETc#xVe@0W;V;u^}cS4gY=hLER_}ll1&!4w&dl)p!0qxM@197&70xS>_D!DKfu?~ zo&aALDFuZ$k;;*dz~FmaF!m1`?qC1zr_-|jLQ_$mISKL#1-o5YJN~i^;*|PFa*eV< zc9XcfTH&J)Vr=g%hqIGh7v=@k$hyqo!jxmpljVA0m!Lgrvix&{YZ+_O_~^|?mObE5p=J{soIR4mZV zB`+KlTX*~)$z{a`!B3MYG``GVr~#e`)VybN^)L$bWZU%q?tiU2eZPB%%E78#AtzE7 zURAM*+$h3GK+zvqV?JO3ihNy~n~jkNdEW|3z>E@D>okoiiKN|;rU}oE^33>Je%~|i z*ymqIzG#TG%Go(~U}dP)+hqqdh_08_5<)bTlL2+Hx=|TcFvt{NTK}(MRDde9975X- zvs7lE_vk4M!WPHRw7(Ye-)OobD<`)T{fY4^JUm!S9@lS|sKf|6E>t+4;ZqNr6|5K( zYjryVhocFo6p*{8E9{sX@kdyHKHJbv%6qlZmC(*d>H+XutCX!yC^QgM>8{E*!H_4n(O3C}>A5@>}9VRCYE z*4!yVf1Rbn&k4m=&9F!1q5!6DTZvUOuQ4G7;Xg?fQm;Sa=SVr?Byz>csGRYnzD%HR zv`b+9U6teWCpt)}oE^g-uA@004GVObK+|MiLQ0-34C(qtcHOu3OKI3^-c48OcSTz1;75?#u zCTgb90j-Mn>Nelp4jYt>5b+RD4w+Av!*}L7prdOOwJaym_V%fxC}uQL;xo-PALmf7 z1+hVpnK{3Ly^8!NS|ZY*vfXc?9>qVQAqRSAA`=Af^hzIn+`7K3YfV-&>pw1^sBGc7 zqmSb(IsC2v@IT*q zLPq6WPRs99O^wlRx;)Thi`(+)6XlaNVhC+3K#ut=0k`#a|B=Ck?1eT-tkV*I zw2}s*y~GFlp5IY2w;Slsyiu)=<6oya_s*vd5{0+cY+*UeNiEbxJJX=2xIpt}be2`X z9_?)pw8`5kjmR!w6%pbr$NGU#VavO9*b9nIBwRc3MxwU`g_Ni@A<&OMQ#H;x=}C>Y zqkxR#e?$3Muboi+H#-7r_LgSuEcQ@8Ncl+SS?QS_eMu?rDr{kgWooPZ{45U|WQ1ql zEdsyONXh^;0?Ks|jRtf)N6hhpUX-)_dk~?z4f%xtRWJC@S3?Wn>Iyd-sIkrxzVXg; zcU-T79RSrV?VdJr>x_8a76?cwfX5rG2gG8>f6Mm%!(CU2BD9-X#Yp!P?_=g!Qo(hb z>m`4*-rn*I*5AK>znSc+Foj0%hUFG1xB{PVusonyMPP#0@Ofw~0_afLf`7tnFeIx< z8X;eTc{@lwmIl=hh5ZOKeg zW@J~p&O&~|!1QHH4^Mm?V}wQav3XVKt~Z4XM_(x{Dms~ zva(prUu%!+9 zo2^U2;zrm;52U=%xWb=mB*)3ELfEN836e|;OqQRo>${TR7JIn!iE;!0v76%mGlEr8 z8VRDzSe<2)-ltzu{7)4pCX4sx?xm}hs^{l^cipaoQCC{)shji{XbBoIvX1rVA;GF3 zd{Bf%oU2G??*^-bK7&fr>#?6+lqsZEfsd}X!Llo2Jl|M4;kD=i6KSnH`Az~Q%Gr!E z9qD6<8ST2r3F4Z?exXX@$QpoFI)IH4FlqbWlX$P$h^ZPY=J!eRk_J=HhMBdvsMT)hyTPbz$Q>VVe%uiRQVvE<~ammp0T5rdQwF zF0Qa)Dgf}O#t!~R#5{}ay3@T}DWQJ;MgN+YNWZVwq3#EluSYA!C#6&sq(?U0qtjn} z+6ixN2Ju6iT$p9&nmn5&wJDIQX8R<-@@IZaXoI#8$m8ALsn2szpyxnljMd}C+0K#Y zS9+kM`Fg6EU%PX%$Vv=T#-*2j#y3$8y#$`_T)sY z?*v9a3V74NH(2C3v5BZ8yFlhNTSgC*pnKF@BGpn(`u!($DXju;L1S9?WebUSawLz^ zte7#Co?kUb5!&2pruD4y!zuh+z z8%AEDK870_Fu-y9npGFA;G8J;^6fs+xJQYZUZWSFx^1ke0KBKwX!dCbJ547_>x^f0 zV#=i!dC@OlazGytqaoE{STf8@I*rfz)SU09JDsl=bXy#s+0EL-L#dI;BfmDRLO>Ml z2_hbC(f^-9boV5RvP|jNG(T&qSl4{o`^W1IX^%u&057BOcKi0Y2&>%Q7VT$&12=5F zl4m8(yHk+)Dptw2ziDAW3m{bDn3RF|^O@F$EG|<`6F^~g_)sp|WM6nfQEz31!n^&hbTu5`^;8*ZaDXyTM z&d;{IgK~wL?33;7x(dn-gPh;^cwKe3CY~XHam~lC2?`F{s486ipNxKFDI^XDzmDsw zc0N_;j6KjDcC}3P!%0`K0HkqW--Vn7<9dcsc=&ZKc|Jt-mr1hPSyzfapl5InAguNp zvw-Th9d;4OHHs_za0F1-P>nR>nUgNx?mA1D$V1FKU7T;++u171^|o-{MmU=G%i-u| z&djAl>3cyg`~QZB)}+8fmB9Ipp3k-@w`)|f&N=PckJDQnNpsbZ+j(t$WNo=6Jyc2i`$LS= zk+dIkZ)aW)wq>`YW+NYp+ZA%;-=w=>-pr^0ALRNk@IeUgoUx_FvJDA6oJ-bJ&T+OZ zhRxGGc;JKXn|1?v$_#f3N}*Oughb{++f5XAgfM3d!-*u>-672AvFc9{N)!QMY@9D( zd1TB*CVR*9eFf!Ij|&w8)#6FIRt zU)`|F+L_k9-P*PkMvk0GJgs9sNmIkLzqv!XuwQgFE_tOBS@5i4_>bo2`^Q1S0SyX; zqN6w#-+strsdgW9c@*yAd?G~c_{*U>SfP;9``dzR+nVZ|;{1B`Y_NBDS-Cu9J_ir% zatDp0z`T_`<({tC7KPgs@kkj4`kf#PvB&|m8Pfg`Q!w_^lR~9@O<+Tj>b}jspmFN+ zv4vjNt}{Z8qmo3nZr?Ojq^*10lqf$u(Ge|};LejdXr~Fh_lKSMv!`T^Sit}8SZLzwT#HjJEkWS>~nC`b^0wpl~5m}1qK36ON_%7`NT4s zvHPY$z*-mEkR8B$zegO1sHK^sNcbDc0y%FR!poBEi~2z8$6O&t=DkVi;FDH6R}f8! z(L7^HIG&|TqZwV{peww8_P76*_52q_W_4`1u7(mt95$93m_mnY<27FPmFnHhzp<8- z{I0imwLL)`o_iHu-+<+#kRLq8sd-c6^6e^VkCj`z@u*tT$RTK&imVp0IL7Q*N3cVt$B#hvt_>@f_=oDI~+IO^th9hy-$NtAL!5|QAc z2+w?6+9Y3U{I>o$Kt&=CsDZ&X7q$Watjp%$((~{wP3-74X#A9SBxh=z=_hVwGFknkLZn3b zWB9)Oq7sG)n*6oRT%Yd@N+J+TQH6vDwqbHTB8Wy)_ETKTqpztBJaI0{is@GqMQNX& zKGamdb3wcO-q9Uj21FHsOEd^)f+~uKBYhCQ4LTZ<2g7$kBAxI`-y84)ilCvZ`({M- z9i_}rPm3FCi4iZ2W%45@!umv6hTiDUd1yXmM%^G>EXYem7Za|yGX_z&+YpOr02$T# zzMhx}B+(JXgj9=Z6lKf0D%8I8fVF0KHrHQMr+Fj}7)z?9dl&apN}s;cRI%y3TvhZ- zS!5@0*6LdnEl?kgU9y9tK#M~FC^kX-%(r$z{_6V&nc$uVz%uvE;|ckvT*Cu&5`~49 z!b}T?xaSru?zV}yV9G}}GbJjh@GA}B#|-v4k!`Wwa3BuW1ivEiNq-RW z(bEVjhlH&Z>$R$ZY`1Q;M_^tW7T%5WuNN2;zAHmxn1JxG$gM~y{H}G4KBznW-}}WB zf%+e=?eDWclO@V&jGA!Kr%H6p?~K0RmvBe+N2gnW*98vl%S>jED9tbq+^NYBM@#T@ zO9=_ct68#2J z-oDuCol%cXzVo=&zZ_`h<_U8vE0C9e<6mkXFaN@4`pm<@OHj$me^)3|0D6?a6%}|0 zf6TA#L5#S1%Af|PvB*u+%qB3L({5n8C3Av_521(Y&n(38Xs^}Dcv80d@fFY#z<748cq^B@X|>lw?Kc0E24hRw9p7Cr(7Dnj$5z) z9O@uhsQmUP2VI;;UC)p9O~Td`WG0vr+{*34LF){U2-8-aEl6SHk}o47+ta_1#E$eX zr6nmdghTGkBG%;rx@oik-j&T~gd|~JH$plV*>@wvR_SDeaMS8M!eW6(ROF!P5tUS& z#r3&9ML`X9t6nJ?Q=6jx2)+(cTOHsQrm#n$q1KIJxEVakqgGsZ2M=@?>K4YY47J$gI=Me1j79F=DHJQJK)|otlmMF6< zX+`6Im_pq|04eJqXJ`xVB-7}0Nm>%tu=HcU!QB%lSOL$$c zZZ>Ep%eC2i(KJrjy)oNRLj2zJZnpnx2bVITiKjO;yjJxYMnD*h1#)sag z)??$JkVCo3JWVLFz9+i**dy# z`x7hsb(6|QtT4}C(9pmdZu~!zV*gF<-f`xrCe|wC4E;3pM1(ayB@x%=*LKYkf9@4Q zY+zaI{9&Fp-3`t1obwAycDA;LwJ6m?3hkmSzAqmCvz97z!jh63?w?;Clbah z;w7|;kAQOc8X$xM$c0GxO4^0U1@^^gSHxbd%EH2qpzT%z!B2dHtOu%R6$;+zAmdIA ztUt|tr5RRL@XkmhXf;L3TH~*Wki8WiM*Szr*BAgYd1g=HPAGQfUd~9Vxc>3=hDMK) z9O68?YwYn3H-R?~U+Uht5q=Q&iem@GeyM$)l8?|({P2e;2?E>z?ewLT2?gz9aLbdP`OPVJO8}ji!eNJtCVkCd`H1fiKdQrOZ@2E zHydZpRC)z2|Gs#KlXM|;?%4# zw+J&z@!nY2iHzeC-{;p|bRBb(_C;Rl?8Lj@cC`S6V0Q_1Je)jD4Q6T{`94ddPTXM( zSe4PT2xQATBI)#FI{T0TI7^FGpvS~s1#cEK+>mW4HfDgwM?l3cC=9h#a4{nIhX}2i z{ru6@=93?H`c)-$o6RoJ7<$)<)_HRd!+-2NcbM^C+c`SqME}=&>k*IMIL}lj&l|M* zcZ)Dp_^dKuADzIsY(E8=JMJ8&Z-kZ9aQxOy_)AwMy2w0X-ph0aIH!_`BgeADy*7mf zyVhXGe5!dEL4*})8+HaNIS9asZs{8a_+EL#bFvfPks0*)^F?+_{~vo_9Ta8ww!2G9 zBcTGagb30iC5<$Kgmf+464J3W(xHMNAWMUEH|!Duf=G8QAR!?LEWPY`{e9n@b7s!} z=dbUX*%Q(9>jgo@#@r@jTL|_e0)i|I8*TLMNjzY;Z}mdFTPp?(xH9>s z^%|9ACju}Z_HJ1LXD@$%srZjA=3y6V5%Bun_H@=PUIb|JQtW60etaK5l2-2I_$(qN&b*oPd^Oo+XXDe z%~x^4H`{@icK~YvKtb)0j0_Vnz4mJih19eSaFxKWq<5V0F9tzyR#d!~9xP5)q;G_zP#Mv%)p02o1QnUU!QUCX=573P-SS!a%vl;|J+mpx&( z-N8lv&%3js9|LWKS~_(#c7{F4V4hVKZoGPEhrF`iI&2yADKX)pZ$#ILKusMmKz#uW zChjBfV|JO{M0aznig*=6<#>n_XVD@#aCutj3<#3Z#^dw;Fq^r#392bAU0vm0-A)Xq zAnhyxuq6f&G4Kbo61+`@1(^1Rfb!|+icf~~5Lv)g3N)4uU^UGK>4!*V+=~}s!RXK_ zz+26^nwc_@*wDzF`~?_M>q}^Ye8~<`qsw z3tB_BZ~H`vaEL&F*W^DBFYg*NoX{PnV9v5LnRx}%=EOoYGB3eZB4wOv4-I*lnpR4; z?+a5bpE>#`7rqCdW2BhrR}Q%^1O2NJqX*FTszK>mE5J5(s6V$65|)MmpK=3-3|9S| z*Ftu!2p8&#cH%~aBfDC?P)ajNq?{%olmR8DAv1~%*Hjuld4x)FnwK+c5|QpO*Xt=<6F@w!GC94&UgpX>Zx@KSXt2t@Iv}VM_-9^CE0+=bU4m`x*#-{-O`5 z4OpVT-NYQ@fi1X!NzMHp4hqpc<;IgNbyo5&_+v< z-lx}LdH4=YO-B&qoR^RIQoWF7rfqI)(gT21p}KM<&;32ZZSL9x=H->@e+#+-g6lyp$evJumDVjk)b_j6omFvs zjqz8O3q5&)BQ1!;1w$okOu4unEs*A>zyQdDuzDY&iC+<3I z^BDv-iMM6wBNI*R(g)EilJ3I_{$JbN7s^1u{@+8g+nov6PvzVFXDdhW#;dq#h!JdJ zmtkfDI`5`Q18M@OMNn0DcxZ%=XLXMwmU%^tg(U=Se41KZ`O_Lt(93h(e zvV@m(u>Ac)UEVZ<*7sx02J``bd1cijM)$Q!9anln*~=|1Ja{^8FOe@_z{aBHX-CB#Ri+#5)e7(%gCmelVU1ouZzrB7S zd;!nNs``_Ad|wS$*%n1fBI=DpIzkdknwfsTm?`JrEgQ!yOgRh%&IysGLE124PQ zvUwdn&&@Xd@^M>&*~ouP+rK$Sdx0oVk4>BrD@)m<8xU0vFXoS9fAdn&$M(RjQRvE; zuo$eX$5m0*&{10SO_6s0yvhmTmbeuZ%Hy-lB+?^2}aue(-c4c^F*8o z29!hvv1A#S(~@=RWSJ`Y8I;Ti&D~!rY9$nf-is=x8+6?I+_sffJkGX`;{jLcx;$wS ztM#SnAu!F5h8U>sbxXaZpaw}qbY?<)ogJe-XMJMWuBU@t6m zq6sI(MJOl9{GV)e-W25%55Jt*flkz6{!|=no)dJ9uAV=~jI&?o52FY-q_wAG7?`d^RW@Wz_=tzSCi}C^VoN@0< zTrsJsCk0@<`EL*AESciNq-L$Xk;@yl85F{wv&f|K6xgf3L4<;qb** zLoE+s#^ zZxOO))XBtL(J9lu+@=C!%6R+Nu`RQ8O}-PeWJlv*11=(bHM!v@wq#6D8Ro;V&}k>h z@?ms?-AgjFI!aWnZFT0)xdX4-Vy903uiabpIGW7=+x8^+R|7HxQIF8RcqyHuu@fnL z=EkJ9SN#5HBFK8aMQKBClR;6hB08i|ixdD(ZWs4n&J07za^9UE2U>?5uwUgLTVij; zU;+&xn6R@P7@YgLnqChSWp~1$Z|gyCCg)Kohvk)|thZWSJ_&Hbv-}8E;7^bFZNc|I=t7e;syX`j zd+uxqr+zJ0xjCPcqpjX>`3#Dmriba)n0HRU!5ymm+b%g|YBXdXnzu4lJW?I9PS0V z30=pojVBH!{n>d3D6vU!yiVw z8~SvNlj2wz@QbwkzHPh?0?@%fd#ZQM@|S;{lu~f#d=}(%XOW`t0RKZR|J$=GhT%SM zm$5)JwfHAZyk@q~kpvZ$(zzedN9o~Ax9raQf&ADq^q*_zS%#b2fcUMy*GrhvZpg^q zd0fEdbxk+qiSdXrrl@E729|-HH5!M2eE!L_eL;YQ;X)n|&l36-O@FK)k7Y)2IU5Kh z&rlo@o<{m2%tfTciL3lAYq=6DtvZEag^-tPW0hxA+fQQw zR000hkT9)tV(yUeVlbP_&82Eg_2*ZV7)u~Z$Zfk#3e++&=q40>D2nBE2B%3$9GtNyHdK?T^L(!EcMDw2DHxv;GsD-I=o-|Tcy*_Dua=`j>Hk6 zJj(Xg&bVQv`BC^0meau+Ue||y&m>hIQ_~UKggfHadcBHG&=V|b!?b2KcJ)1DA~rO0 zNTSK$p4J1xpos}OxX?-h;>`Ei$Cjdx&K5$10KIwjb_U`$f)N#4N!-FtO}9+cLzYMQ zJMF)m$+5{eCt|XflWZ!LSKI!&)c_f0&fFLioRw%&pNlQIohgfeFMd?;2kd)_fv&U~jYuL^fNNUSq8 zk99Hss;>Wp1iwQOVfbdpDv!!E>F5JK?ngReQ$F2BmsMz^g+*gAs>!0cD1fb{(1a3C zXr{`MvhpclG2T6EzV*{|c_ulaNxDd(Z+6Ua^HIk49;8u?_%8ixIrp5#&zY%xnV1M?U{Xit`C#P#-iyB+ir5fA) zrvlK%s-e0Di#tf2uXfN`VT0PbP>WjQ*$>NnvpqGrmf$d93V4Q2E(aZJ$1!>VuPf#iGB<3DHJ6`hfi%*OUa((U z)nN^m1JK+n@rP{674`@kJY~hb`Rd4YR6PClnYc>D*T(d9laS|Kjm}02)rzLJa+Yq` zZCa5V8GGSTr(4k2gMVYj=OL=Giz7Fdl3$y~&2jaHXE2S`&9&)a^4}Q>sUf3XmD3>= zczYyM;RKe;w(y-z2kGLqD z^3BXo2RV6OuvWs#;4aDQw}tIkqRR(`(a&2usMG>UPy zq83`6T2Tujcp(i1xB^R!-sDDnxv#>WCk1hIzvJn4;{$H1(c-$l24Z)S)l5e`QSpRKn>!7M678O!UkG?0}T0QZGAu3TlGFPX3fk99FMEautauDZcW zgZXInSGvgQw&G_~?Zc^G;te7sGdnFR=^vn10NK z*oR}A%D6JYj4z9bUv^L5p&wZcpv3V5)Bq7~!@?RSV18<= zF;0ZH-i=hZzDM3tOYcPW4jx||a*w`V!|X8#_Xgc|bgqAp+YlA!)9GOtt#$8vQDfYd zwptu+;x@Nec4!-}6wKq$v0YVB0jaEm*B}coSG$|`hKy}14rN*z)r>A<5*#9xzSAFX zT8v9c{JHf$xlrCN)vq@5_Zjz(p+8;8K)jU((i&+K)r|K92^}wPaUdBmz@+H-J&=K{ zAC_NM3j&*{jRL|1&Lspi-~yaKdM)lKPnuV>Vmt^^f3ZwP37dn`u*Nmn%IA8_PN7wp z0GNfA(WI7HyH1dxL(JoFVWPX=j}V=r;%PC2tD60oz`x8qrHj`33?3w8HzLJqJWLgu zCw_X8pa`9PE2<0CBep_Ns7&`q)0+$QYTq>WLn7k^8-!O=;Bcx%Zw3b2l$h*RS zF+2JXbYOk0hN|Bi?|vMVx@btAptkJkfe7exZ=*{UNtqWWfJN5x@Fu z@haqGh;;45fBhD1VJ^E-w&AsT@vR32U3FNk&_+;zD3Mdmm-YbG$qdo2iJ5qhxG4q>qE4}`T+NxEIV@<(CI(yu;T%URUl0PE2Wtt zDln@#x`4H&|Vdx6rl?%F7@%)QqDQBQfB072x280~HMd50)W_62x zZ;J_^d~-0kv+>%y6PE9>nl?lncs0t+xDN2E{Kg|D5s1Mxa404Wc*@xm65Janu=GQe zNR%aVveLD&&B#&(1lp!K`*R%>3>_PdzR)zP9Gj#7T?2M3(7q=yra;&$%YxNek|So6 zbW}P`$0FC{;Q-MN+e#^1ORNOY#Y2i}Np2;ih1Dm`J!kGw~8Du65@ zxUj{CFLj{D!At~wS@^l<(==5m8D}(mIlt&IqN~(>CnRkp7_>w2Pi~cLZEssAD)nN? zFNDIbX$ipR!U*Z2qq=Y=qM8`yF^LWqsCG-rYR7ahF~d#pUgE8?RjuJ0fNmiGmVpIW z1|+Sgr)ThH=wjyPYrGsM@Ae*iJQzLL5;XQDD6dN|s`t9U{I=QzHoU97w^n_Mp~3+H zye&w?4me>~$;Mx_#JEtcBa0qUma=t+6nDprR(7CG0qSc*81oer!bW%`C>Vqc0J<9L z?8L{qGYJL&Jr#~LK<$-<65{zw)%t)!m)GRa%JuQf*`qqI;kqqv5rm-h%1@Q!(1U9> ze9#;ao(CkH7>UAzEr)6Y@GHj=OShDmb#|}LuRm!QRQa< zO1I*n;}(EJKx1702H9lD4EP^M5G&&@IirQ5((g&m+^lp5%P7e*bVRQ*T(2Ny3f$Ma z_zk738gpyX;g>g{P+k^bocs4la3_dM@Gdw*vuMrrko=;46T6T9?JGtgCt-gFGzrM- zwq3!b*J6d8tth7D+ixDSy#j$G{%xNc?#$QtIwQxjD01LJf?6Vb!zM=-9WbF87wwUl zueDXcy8}-l&MU#ayKb}uASNPRV0EJMFrd&c{e-+AWR3&htJo#fJCFDDep+JBsa2%PDi)d(jK-kz>W{AQddzNZh-#>w|e9 zdjrqubvF*k3kc8w<(3QKg56H9Il+j1lt+{SLrcB?9*f*7O?7_Mam1Xn_Gqxt+U9vj z9u{pURplOo7+r-o5n!DV5FQ{E8Z$5(UX5GEIKf8UYj&4K1hAn{LY(n7oPn(K*cad# zYUHaUmdj~7f9uu2Lqt(c9yZZVLj-Y{zH8D{R$~DH<(m9m1G2e2`>*Xj)&v;G+>R)O zhLuS#Qo$6s`4&iJii;^QLQt;Ef0zcxr4OpRf=muTcXm8I>^*~dbd~yI!>2#=Sl$M= zcD?1HqxL)pgF3_iEfT*_3Hh(A&Ad>k>k&cJ9??Y`jZw^}GT;gSPQ+QI9cPN8ev^^3G3r<5v6h8`rG>!4 z&BAa5PSuOC_KxTkhBK0p<7!w&m*{>c$LhT;31@Fr%lldl$4bHD^w(+9GQd%Q0a5Uv zF@wxWqWob}B?G#nVS|w zhBL$d9yaiey!2JTLD5ME$IA9v;KoYyD*tZm<;6H_;Q0B?3EZ1fw6H;tI@l``KP;UXFwQsdv!G0h(*!=hZ;VN@_&uK=46G_2GzHk)%TD?^szDU=%80 z-1jpnK**JU*96dVDIPrst~sFn$64jyms2os`2Mvk5O9M2wST!O|FuwQ+5h|n$wHX_ z>q{=hzfA;JU>dCdRJP3V7Zh5y+%r(sygUp%uPwBgsa|K>zh@s&c= z3yW|^>!(jaAR>WStyjuq#PmQ8S`eA4ih>UCm-*j^=wEI?&wzka5Qy+lRY6YIZ=uM5 z#9h~(_V)IALHScnibhzZ7CljsMxLx5Q@E_NeE5sX2*`Oh}_dTnc-mIQ7t*g+Hc*S_7SavslZupUX?L~A)wpXd|opT0*u*RfHCx85( zy*B?!DI8WRf_O+Xsce34ZUj~aHuS54HfosI9%i+YpAhT&t9ygu1EOZb$+zV)B$1=M zoC~WTTzd1P^(393OTr4YWKaBPBj?9YgtMBF<8RISdvvt3#&T{NhP_29q}n5q7W4Pn zpQ_Vuc6UAy{PQW$dSu}Cc42G8MC8lG=vPn4w_eBYbG-ye`5e;KXSVFCW|v>cOyGw{ zM1=IcJFhq1rT+=U7r+5yeAF zanz76z$AQK?D3svrO<~Wr=^)p$1xvXXnVYnfA^ePu`RACQ0+!|vhG@UglI6|v`y$< zt#vix#{KVZ;~h#Di${@Rpo^8Hzh)9mzID_VM}d?>5}H-750;M#rQMT zCP(pA!Yowc-9FWltgN$mZA!Y-+Qu)F>QbOo6mZwcPrR2?73~AeSIN!EH{6!J^r_)C zNn&f}LG8OPmfi`jb3UfcbN2m#em`rkgCKR1;qsE7h!7SgGy!!Qoc?M#gA`U3J!6dH zHHa>TyHa(eAK!2f^`z_bbe(j5JcMg(Mx^9B{lqfF9E9v2ldNUr1rAnY`+lgznc|1g-Xrk>g~^bm16C;_VEF;#SRN|+>Sdrm)_Nk;^$K5 zz5cE90Ig})TsAd!wY}#pUU1gV$+58P=jYW!2u~;S=5KGzaYLa7baXWOBo9`qGF(+& z2uisI+v?1J$Rr|fF1;A;p|rF08(VPG5ei-9At+l@9uj^62$j= zZ0Xy`ElrwJ)^7VKorN`O|dfsD55<|2aQPNJHei zCZZhn4eAM+`)%NORu`y=QOX@{SRiS=w1_X&QM(NL8*xtcNp^+)!ljNAm^e*Uc*HI> z>dAv`T939xd^F2Tp@nY#-@8ZC_L{Bv~Y z^yVQo(P}X|KdNSbdJXx@+I6h_Z9S&zSRFoE`al_Ab(MA|S=crqpH^scT#OH6n(zLm zGcT6kr0&!6l$zU9nN4}-DCiAgP+bgF0=_|tnk!$1Y>rWkV*BJIo{;uL^)?BIfy8^a zkyNjW?*v0D2MVuE-%-qv1#+v#9Te0(wSrLzS1ncr&o`mY+|u8#6_X^kDpN8 znbTZOmy<0`4`*^lIUhy>2AYSTU>*VDkFOrIxRU;&7YQ1M_+3lnicizge;Q{(1;S4`lCKhrGv)|989# zDcI3V*1AVz?YnGA;z}_N(oT1k>X=xPnL1X&Tzuw_5V_X?FI>W!M&rIKx(Jli%^}=F0_dIkM#a>H={!yYXU%W)Wyz;(`5SMzz-}-%S~s zyjOn&7Gnx4PJiDaA=dvQG?AA1icI6ZSiVQ^oz`cc2x;tjM$b>3d8geDmOE^R`!|Fe z(RUWv7>29QEkD3T+3gj_>+E1(cq%V$S;A5%iC7+a^(sfpay}NL zB<=6S?O#SE1-dO}E&T93%zEHhI8C2EUF9QuZtq|8UMbW6@XLv7;Q72o+>_$Min$+; z1-_+D(S8J}KV^^l_6YP^UDfjG9VE?b9Yb{-;3pco|Gz&i)Tn%zLXF+YDO2dwN^P1J zD31L0C{&+E9LY-;U)Ys;zv9CgYFqp*ZSRJ{H=IO)M|v04`IvVXd`6$Xoqxs~j~hst z$Ez$XAo3&iq9YIkN+7;SkbIB`l8}&Kz?+!sRlm}&JVf8lerG9^>RDAr#Maf-Z6reC zm1K!Awyu95V+PwE> zaD|11m4Uot=Wmu;{*L8H1(LhY*KH0aJ(MUbFDui6LLq^dKXmED4TAWo(^QF6#ee>I ztnwkrfyj@*#_#H}mNhaIoK*i)yu26H9T8YuQgZ%;lT)k!$ha-#38c=I`0|P%fF9m& zv4N0=SF2Vfc9}TfEC?T;&rbM4p8M?21y7JSxvqA>a4{?Ww!@#^n74WT{zJwfGBqCf zw3)-mNFEg^C>;5S-q()0!D53t*Wr^*+RBUiM-bxCqo}B;`+_zqE4JxoGtJJkRq_rZ z5Mv#kiPbfCFJ@5d1KDm1%3uT}Ocs zQiwl#a6dA+cB|(WBuA=Fte}6BR|h1GtmK%q?Cy>r+zz=|i!R^Mb`@aY$*lQm@j=cr zSs8ervR}V-dxrfRhi6g}za8H3Gm5${In*ulKNNBpyFC5;iu9tbO&sh;=EAZJj-kd2 zn8Q>HN%{!l_TE>O4C}tDNUEUUa}ODbdfSTkG=-5_&`@1EQu7w*^9XjQAlU~Z6(F>v zt{%DjwfOTGqt#tmRt5vTzr3V)0eEQZS!f7sh1S6IX_DRLox+9W{IHzfGx6sOcmX@l z#8JI@E&bzmcuo0jo9szz<8Ch(JpZQPWioq-_o)Y!zWYYYB|Bp~_aVAI{8H z#bfa9Ib<_4Cc8G9P~t3GPp@b9bPb;EKJee^W}%b;_JB&C((WnwoHiu*~yw)8|ef+Jsx!82^6xrH`I3;Jxcd zR8e#m(*qhYFXw@S(+63FF(-q~$sm}j7EnN<&*HiC6NjO&nxG1o$9|GbkB8Kb8Gf*E ztTVVFFlYNl^>)(^!BiwvU7QElJ<3D} zJVQAnNCrKOwSLv+&pFG*&c^w; zif^T)C@plF>FDYZeSO4MN0X#UWGQHI5ZZ`C3_U(EbDpX2-`+@;35E@&K4JJC%`E+c z3*32c;uxa-^bYfLh5Ew>7gj?h8Ir-bC-7vk!;X_+wR#NgucCAJj%;OdiS~>~^te)^ zL!=&Ag+E(FaB|_u-~?n>xqf%?5M|StHHXFl>4hMWnfh;HK#q9UN7{$_*vr6#B-|%A zFW-@9CEP3ceP8Vti?bcLorgA0D#ihq>Mj_r!m?^BM_5f}CRnla*-=^a%4Dbb+=bNz z1o=`*jRVzSvx|5|ur6ZA&HS3B1-NE3?S5uo?vwC$2z*q>|10Mt!{Ds(m?{HrEI)tb zLge8Ez~uHFG_OkM>|eKYipXTz2R7|F))36!3l-b#q&nrxvwLat%+NjICM2tjw&DrN zdigPPlYW$YhTZv9u2ai2ijtp`5Oi!^W~hS3oI{Vd)V&HOQ@_+cNF5jBG{^~B`l za|RFg&-j|s=S!Z4T82+8?uMy?c!`6^Z6<&4>B4jli{LlEIH)<)Gmf$Yxf^6-;b&W|(CQ0<)0YG=dyMYjLcU5!4gBEO&4KTJhvp^3~)w(<95NxWhH5#5K6)2G1vrp)!{&wnChR%5<{e6KLm6F{do`V}FthJQP#3-LluxwJJjO3g-?PpJ247hV4L_sI zrlUQTY~L&M6N(bJzu{}+c~|zA-|6|ggWwUbBPy{71v_%q_N3n;*=dJ;tq0kKEORM} zHk3q;#p-O*xJ{TwMj~!%aOaAMb$F(@S8@YbE&tTw&vDJr^QKIe<0&jb_s1v`&8m-URCjQ%Hl_k?Vp z{Sn_W&~CSq5xn z(GLuTLgW$#jd9WvPdIn?_7KIT-O!xitKVM%;Y52d+Vx_D$~jIIRKnq8L;m8M4L|ye z?~4D{L*J#pTH4y<7aJoNZJDDi^+JMkxI)>p`Z$n>L>7P6Kxb2Uzhhqb)IQqx_eiP; z#8@NehKQKYe62%XI}j}_O0(jgIlHIkxm8i$^KrMfsinr}3*c9gPEJ{1{iGBVDulyu zX`*Fh)QTDrUA^grU@rzn{T_yIL5Q646ke<2i22tp9$0$Atu7o9*UN{0*c!10LUS(C zaLwZLwEoahmRh0ApWH9>e{j%ZWdd<8>ZbUu{_c}{e&u%PRTUk;w`O1iZFs2ad=F(K zL4&6uV>woF))IaKRUb*D1bKTr47rzh|Hg)5coll|%>^3YEHRk=l12FW5)W1<26oMf+T8n{*@ke^5?Z#!b`O68imPqos5sq8F{;QIA|4v?)DCmE zCzpi5nvs|r0QM+AKa9>K0Ixne0AB6Zb-8sGg4u(@hlYpSKb%ZEQsQs;qvbQp;BwDy z^FnD4Aw+AH%hE38Pnq;WET8y(!c4O>`Pz&~FJJRBAK9K&|Ucr{Z*PPaXawNGphsD}m~l|1=DmJSWR zv@ZN(e~AfhI!P>czJK8|@a$+<|LhH^(tGt3!mmO*a5+?eXc+gxsYNX zETKrL)O3#8H8($HOGH9+Pgups#O;_#u%K&j3=s}A=YxBDN2?%#TX+`HxJkYM2`y~(SH)bAzKZ5Sxu=>JZd%-q&YcOIS`k-B!@+H&^xJKP40f2hW1N4MU*}dg( z)9}-)r>aKOvL<)A?J#-r(d)4sIeva~HI@j8x4%?OIpF$Ox_NSvvx`cQ?FX-wOnJqNI-B{IB0hn?rrTs%A-Id=F_ z@_~QtV4{nsJ`5{TpryZh4?i)I5mie+FQbx(&ZzgFbOzN9w0`H!jA*QoR#=eb_0b>P z`Mmey{VWbtz?cE0mtL_sJvBAx=;&zwUR5B6v7Kb_k(l}~W;*&});ooaV23m5Ro|Vj zB{}q$NL-2^9H?`4WoU|Zzkt|P!?B3fgMD&1nXenE1@YHw@W}1#p2t8yzJ>rt4yezQ z*WIGN%$rmsz0OFBkb}y5HHgEzkmu856V`{13`5nsKxp5mpYcR}4p(3s9PpsJuzXxr zwG^kva%xl{UjdFp8yg!=NXX4!pd2E{ZMt2U5EFGK*L|iZ`)k{#K@?=g%?>k&FLs#f zA>2VL35braKkxS`knuZ^)yl>?d+;$X&&uogH?%C-?+=y223U3C*&}3>CXd2@ZF`VI zq;GaTHu}Gl(D4|mY(bnupKRV!c>oFB+9yHpPLoU)Yg`8&u5=!5F$RnO^jN!}2Bngf zx!bUI%L~5o4e3;w_g0hT%o$m_56+MdeT)Y8VMlhHXFQ3@f&||#iQL>&xCE7a#1-yJ zp>ImO)&6WBOiZgLMAhLxZ<~&Bm@d=nVH!*KYxY*XLl)ZWmrdZa;=iprS)v(IU07%% z_!U$4sdrU&bCkU|*s_)OMjMi#ioDGQu91|1jR$@wBcjR6jn1>z0Dk*A`2z7~<;mFAozVI08c4Q~ zqs~?|Bv>qd3h{Dxch@UWMs0Ij$ecgwJZBmACIH4er0V@6H#us3Br;Lb%@Ntq==lmA z_>Gl}uRv)RnJMpW=qVQ3h40$%^0h{|UoaRbC~RQnJx$y0dzjM|fZi1p|6!Z3D0HX6 z2xpAznD_`9fdx&yZvs20V4Y8zd4eA0$V$?toZ z@HpdR7ARr8*2Fz`C>j43GtW-|c2s?N5%pF#hu|82@QmUjsH?|W1rVL~JVtfDEKE4U zL{tF>Blu*1Tg%$JpZuMt6IO38PEq7D;zB$whxU`8`B&z*3^P{(=P^*4*2uf%SBwJa$yDKO_~Dtsx4Vjr5BU#Y(#6wKL(%A0W|*b$cUK$08z|@auy!l zX?Tuf(FnH>Ccv8cE;mMYv>(j%6(o^GKu0%6+3Z)Rdg+#$s>mCKB>WUVSG|VVY(3Wq z`T3hVv^%UoYSVqKtrtC~L(hEo2r2(Z8o?M#>7XjlsxD^tBSTdI=fvyoSd*=@grDO} z(E^DZ!-MV5@b1xE}O*yD(Fpq6RdyT_*sVdrh>$d z>H;#KhvGNcQ(%(uZCj#=_#s*HebiA9C&qsyvm;9dW#J7PKD!i%QOT7pq!eWan`;kd zBBy^bXLtGiU61f-Uw+*DzGF>94wT*bO;wt4*V;`+;%3L4S^r?$T(d-A6|-m~+11H3 zZ)p#IYm7UL=efrQq7%V2quJVQ#DgDJD$5X4)0LP^(c?aSq-A2V*LATT&yo7+Qy2Ez zJ!onZ?Og{nUap@1`{&=I*Kg`$D@WtdXVKk<4I31zgBf-8=6+XfCT^;C7=U^H{u0#o z9Mxc`bwIIJ-|4+$f|3iA!x@(bSMkbj@W6nYBkBLBkwkzrnQn?|Sku=4b+F&tK0Du= zrGNw-bq7wV-t)|s;k$6$LZlZ-c)4U0?*;lc2Qu)kXg@qo zQQDH_%*6Av%KQ5%$+)G z=V_3_QwsCZkZ$~Y9l2?~6X)5KccwG0C|;KHR00do#+`8gA@0Nxspb-26yF8!rW;O5)XC=-&XhDWg~m1 zrQn7Q6W{vZwWr*F7IL@H1M(fIq1(VY34G;w0kVSEJHto7kHg;B$^k*!ygqJ%g=8mO zFN%tbmFNM&Wb;+YNyKx{Ek>6_VFD9cu*3DqchlbFVLuOc_?)3kgiO3SZ*}cjfA#M4 zN#Q$xOo>E>xt{%MZR ztYP}rI5mkyi^itNk3k@7vDHY>?bL(WOGgddH9&ZKXk21N!m!QaH8QY=M_|^da=NOuTNzDrE zCz?neksB*{kc6}Rk#Rw1OL4~Ax}FV=FDj@n=(G&^q+deHy@R0ihb5d--mgnueNm4V zlPR6Pz%`D#gRIrB+VKR$$oBhXnG>LBkK;mrwk3{ra>!%fv9yv%W47 z4Pft<6sd=ndOi|{gwB$k^1J79j>Lsp;EK!)nSpbtjLkQG(J7Wix)L9#I;`s`(3n@^$sdniCqW_o zh|!8W_gg=Gs=hNipcKm>sXX@kPQJ~}} z?9Wgdw_?6=otw%6y*fxc>)>|@yesS@%nz_gU9|c?Q%N?`v;GD%*;BNIPp#~IOI3(D z;(ssdZ}OFbzpCu6H(tVfcBYRV_Y-AhZl(>Oo$#1YPrZuouEdWT?^tMI7FS{C%aCJp zm@&)f(XVel2x#3#F&eyIMbiBy_R0M6;K@ek`J2&J&4Q$?Yn+BR)UwyZ8*#l6S;?1* z-`1Xy>>owbXW{^W^ZDxLTbNMb**@&wvw5X{mxZXR#&$SOmz{raYWwg&B;agYL!#p1 zKm^rlCM}3Nb&ya0di&KZ9;!rNgSLTc{D>)REi-JW8C&d#lihLW=m7Dc1bf#4Cvt#2 zS;ELn;s}+&=r!z-D@~*4ntjgFF!8I=r7wo6ms2QXs#sPq3-kj0k6YyUwYh2b-Nb94 z>^6J(T=gqH|H0bCav49fHvPR2Ui*7n?+?z?yB_pRm0Gc;&_}*gfBx-^HZyI@{kmy; z^(y9StC;$a^DE-@=?MPns&M}Mam&u3_BYHLhVpR#taIuL4o^Y6Xip}Oy{`~h z5YjOy2?6bMRC*CXu`IxZE9vy@R&EZbr+=Wc(Ed=9YcVl?_Zhp}jEacvQ9OT_U!nbI z4r24$y@eUG7lsEvedgR}MTtjl3$GTZkC)dD#lYT@aT>3Xc$D-YvWlQMkswKNiYQlZ zCr&!A^WC>M_7v5^H8EgjZa@X-2uzgv`G)SUT~@-Gd7xod+-|v8*~QS`$5MQ(+r@ z%siYV2oK=fem(=3l_Tzzsw@(I1tf*dM1n+#X%FJ;GKH4!*H=%^XQl-+!{#`c`t4u2 zP&?Y&raa=i4}Fa&?@*`~!`vm;>~!s29)vKxPxe@@Q|JsHcKq>DlFI#SwGs5N7e+$P z%FRvvmUHTty!^5sUj92I!=97-s=tU~1(jHB>rj*vV2XHr`&%<4U^7YLPex_hLkf01 z$fN0RDI3Z3WB}bwAUr1z6r-@p61hK^)5}j2*$r(X>~op=P@HCNfGX*n_*=a;|AP7} zDW^@&PC*}DNCB)eY*jN9d(w)JbHkGza>%SBGadcXB-8EAR5vu3#t9&LP9uoObnL68 z43p;<_hN50=ZbpO^z>+50kMDpipOTaz$`vQkM(38O@4Fu+Ijq@dD%xBAW!_@qZ|X` zw}Pq<{5%lhX|!^M^9gCNOo&Tc+W`IG4y&j%>!gKY)x&|Cx){2K{>{8t8teOdgjifQ zqMPMsy*2@D6wfQBUpgeshlM1ilV~m)Ms(7Gj};XY6>8t6J+5U50Z34{iDdTI@JD1| zhkAs%lgzU%Oh-TTQGd+joA2+pN97YZ9zG7UswO*39_sy7#guwI zZD!B&m{1|?TmGf${hM=mR&u=XkqKE&AbA%2hde*t_+5?4bZQAx>OR7(y}@nD%C(b( zQEUID7LSno&)*iByrfgh)PAo{4;nokilC78)3dYNYOUbwMt<5od!;YgWztUtZyVzO zOyiOzQvSCBi^_G8loop}7Uv}IR63SQbOEywU6ql9q@xFkBcO-Y!9x-k**^-3q7K7` zqj~3yqN^z`9bCBjYo8Fu9rqUqHHB2^)vM9-GC#=n(8r8s7n2id;nxM zTsjYpG##Wp`t^tMn~Ck(&YkbyX?u0$J9NaTqS}3AtEjOIACsZgoV}+Q^q^1K?Lkv* zQQw^=5?$eso}9b5EH@s8Onir*AKts+K?DY}te7?4`y6$^7V7%wbZ|FB{4$d7{v&E| zuA-_Ql)L6Clw$aaxNv?wt@LxoQOZD)6wUHwDS*}817sp(ZGlefWo%<=> z8BGy#(Yxw^#`GNSSt2x_?2DcoGP_*AR27QnQtMkQp|D$iH2AA6lI{3tZkE>Xt!HD+ zz4;(j5uBHXSf}@6;yBn&`4fRIgAEk+z=Y)QZ6<6dU<+h8DJWc=I^_pb4-UNTc%V*V8a50WVtd%%jSX?*?+GkF&n?uH;j9uG^NMATii`kwcNKr9)6o*`djNo_fB81kosA=@zgo?fcNNk zQ-JO)VLt2oAE4>!>5Biw(pfk(^@nSGqr1C7y1P3?O1c~Ak`95H@?~|t z$Nh5(+wI9-k*QJ~$7nHbD5HX$cMTXd-8lZltEvrd69UU-`AC%Gqnj;_Me>8GaFSY? z8XYJ5w_zJA9T4k6S3ZehMA*fac|^M*0VJ3ZvcV2XYPNB4p)g)E1!ZB?uWOkAwbyAn>59+*Iad*q3Y1BE&syl&0#7K?ji zGx!*w-D{X5w$rpJ&N1PIzdqS!ef__KFH~#_A0-V9`1sR@y1)|#?~j3MYhK)BeYmXl(g2IJ_ZeUoB4(lFfGaQ!hJ?NxP zB>gXk;7;Z*7zsT<6S`A^UaFkbltRX5Lr|lbt4tRq*MCx5L1W-(|7CV`SXz~<7W?vC zkut*Ftnrey+(WFk4)?u-Jc(4a=(O7aWhtg-aJ`@&J}7aj$$)RU6;}O;eqBlwHDk&Z zEi?oK`};C|wc2!s6q@_kO^zRHNlDlfrgPeGm`W=#ZiJay+5&od3iA0k{}+P-_9$s) z@|%2_0g0|ktwoj{Z%Olnt0tjrh_CTy#Qbpx5K~&5g2=jg(PTek;Z=}h1%iX?Zfc&O zl6h84i4`rdY2+I7en$$i`HJWfg(_d4#Fd(D5dU%<0lM_yMg_%%K42oigukF&I>fkz zc5kiadgk(92zR*_7K)3#!z^M>`{`q}DYRrJU;ztIGqY_b1f4_o!0^-ZZVT_%Xzx9{ z9cZ(aJzGPwLCoBr_;2#*6gVxqmAo5!{d=9^w9_j|f2vLRL?d#Ut+0rbFHVQ_;t6im z+e-w;6rzHE7nB=eXNO8nQ$U3nNYE zSY5{@2|vzOTU`>w5c6J0h4fkAClqCpUa#h6rlyn!(7hQ;sTbHz+Izjo)+ziV6j1ht z(b$;x3U9@q&sW~KHVd2lo0cM${0Gq9UvinG>_UmovAXMbFXJlmL<1H`@$?YB&%){Z_IHZ-r zUNTcrhy5dWk9<=jH)-ha@P#nMb9&bt4H=3pAKjGs8fsdo-X+OkSj)Wctk6b+l7jR4 zF8A?*EHx<)bsr;LIKmPY@@CF(8^*PnXafwzKrbhQ0J}k~4QWv0XZB^R)FgY*;Eu

pXqB4hFZtcVP-v7qZ#vd3Nlt-{CPKkGd~<;>=F;ko}}pd=q1XNP)yqCG^T{w8BP-wcEJNj`$pq{LY7Qcdt?9HIo~ zT$kTonhQK0>k`bM910cT|Ly_jWR9%(@kJ-;?vx?LBwNZ%WpG z0->)dS_Zp0(MYca4g`>9WQeZYVT!<0iQP3lO%S zY#SzS8|tpf~{w=wCs~>C0DZfvDMnDlLaWX}6<=17VqhV%7 zQ3>%I{X9kBrLt0zf9K+oH(OrHD4|YBVCA z-){CF)~l?N9iUVgKzGbQ&%2UR$i;BvN8PwPXNBn$_Fi)b`?&AzxAlKlH6uKQug}HX zZ&gRk9fnY42nXkymv#%i1uq@=A&6}C_ai5!ni#7V%zH*|Z}&UNCIHcdyD?bg{EH`d z7`h!DROOTMfK@+Bua6)32z$w|4KDIQBCefvC!rtoe}h>@si)?3SQaJe^> z;&6pc+>WPSSF*j_X+{}jePz)v%zVU4B4LM{e<2I0&`Z{2WLUHJ(#}OQSiTq#)|34> z`GQA*(N2D08JJiC?ED>R@^~3X-kW{A+In)?JS}Z{N;7Zff|wf(Xvs^1Z%@uPeE)u? z(2Zt;@x90s5)LvK5ioUV(WI*Ub%d~yE>1q0oQ9=f3sF6{12dMxnW9ek_8X2xSFjxY zll_V|yL@y7jod<j)ObJ{eb?;elQywqDNtp9#qKIfBs59bGD%THGs1w32H~6&~cRRs+WFA>D4x5<$IDMyAf|O*pdddR9Q@ypAkV;b=(qYi& zu@`P>y7&x*)?Z#u__CgAZcnrGF1!*F(QK@7*v&si&c-ez8c8T2O!3*28-sE#!)wKa z-VTYGnxYXk!it058XB-&j>mUoXi{0X%FLlqrL9B891a3}C#9_wlnp6$zD1j{z&r+S zt}6OgW*1_GrMNF52{ypocBN{W>>Pw02=Mu#3wgzbvHe*rvK`^d=ZiN4>N zf!DeNvGLL#<<5QREC8;TERG^iD2%GjH}O8H@<|Qa(Du&h>&a`L8riy;+vvI1o)+Z` zWD-h!`AktSd|SGi6A&#Qjm%w>EAQ$w_@+Mk1`@pN1JTAs36l%x9gcty-*y<3T;~Lo0!^H(F8{6M$ ze85JJw*NEoZ&ulc4g+1728yGe;*``Qa?=J*m;Z8njr2z3*+`AB-tlno7F&NDLIt3m z$OEjdihXxA5hfK5+bqWJtIxU)itdFSr5KhLnevDtK_+uxc1jP3r}PMMAG1x2B+5TG z9W_`FU|=n)a!M114g8}n2tMzirovG{ZM|2q>-4~Zon5OgpXlmv1CR9-HRvw*`lAU@RtXOt0u3pHd|mO~>0=8jg^38+=N(>8eg$8R6k{)hzDmDNxTp#5h9ZQ8 z8lr@yp})?Z4t2X;qs%)miR-nHc5J}a37cjRbqFrr_7E$*!HMdXhR9Vo);EA)o})K) zbbSPT=)_-QNLk$+czHvtAMk1A9AzPf>}QbT0Sx76w{XB)X;7(7n6XMYtQ+I?c|nz> ztJct0wt71(2OLcX{qG`x;{&G3-;rHhRRzA(ioI}5zF*knqoL0hvg;s60!QuBi55LOxG~x+- zwAza!P-tsj2s;C>91tPC-*rKS7F|~>%!!sKAaeXzq1iuWC ztl#u`?fd*C2ZF_JL_WuDlvce-PTe!jEd3M8Bn*TLza$7P@)N%)vLG>i0SNMx%ex+q zjg2|ge*h>e0g_RePH#9EH2w_2{(i0$wksyzf)`Fpi#u8gei+*(d*yg)W*P4^nE%9( z5dtG&-+0=$VbTyCuQ%|v#k361>t3gexCtRExxGU?z3~>CVFf$1Veau^JWXXxD=xhq=rFF$aw;E%FFJd|TnH=>DFnarqt>nl_8>y(0 zqSr#E1QV3)wMwAxR=N1O#-6%&H`^JmTW(JmZm@sAU%z|hFY`Uc@vsg~t9M_8e*Q~K zbMgHS-Vl^bBxqDNd=Pg_=CNtQPPbevDqsX-`%qhqMivHiKrc;xEL!ZLMzj z^>G{?`mBcv;9o$|9ikfSUM%2rwbAp4qMuM0)BYp~foJ2wLCYytk0o1a&I9Xl)R z^jWp;{(Bt?2vnyR52!7Ugg^tZTfcNNxg-c+ z3i3?H1sOGb^@z{Ag@3QVua@~<;*bd)PWvMlQMDtWty%RRbPa&~k*#!%8-B~$oy_0WD5Cu{foE6-m_DaOB zJw6r7KbsnfcGpl3cdycrJx%2li?W&J2tOOqvow?UV#qR*zg+^1x=tNPA*OBH6)6&e zN;dSAPvv@;7DKD$c{M=xBnIqmt1;hs&Qm|mB~pu;7|$KYd?)pLH;_k4T&mS(UQ6v* zm880w>-o%I<;9;WcUyjU9STJG$*2gg3f}&)-P)Ge9VF&9qR-I><(l6T?NVi7t8q~6 zlP)I^ccu(&HGG*5pUT1Ml4JDzuq3F>Br06k`$bnS_SaDbL4}BVvRjtAv zAC+!c_BT4a>?RT`X8;#V$!aRKD1wN)MF5t^j}=Ny`o)p&=bS#voB^J8^r140hP6&d zpZqcqHL0oByIzOUdy#Rr8I5uggN4uRZ7wV!fKTx`&VT+O^0EGI$_Tme+T%I-=Lv(J zRl-|z9!&ejm>M8r#?)wk0%@DV0~JpM?_~H~S`j_A?3R^k@OYIqOYt8nq}~t7rP=C2 z&Wx##3b;d5vRrJdm4v>4QJ&Nj-`!|xdP(qo|$|GIR#fk zT}U4O<~V(R4tX8=@{BT?YuOa5xR<1--2V;HGoOyk|lr&pp;&M$lE*l+Y#Cjb%Y2Rzhl2M`q3&j5_ zpq~)=+~=|CQNbiW#(woN!xOoq1C8#VvQJyHW8{n=eV(Q0rllJ9u@A-npg&U42^tk%uK1901LI_wGg_4*29|CR#DLt8}w znG*hN^kx`a1cg8Z3O@q&NhQEtBWliOe)<#d&K4E{ii{$&r3`}95;EuQa!KFxTC>wM z?E0Ka-S`*r&`V5Tnr@}L>9^Io<^BGb*|$Grv~t6vV4=IQ`4Cf5Z}kmASsf8XzQqy| zCOL+W4r(@m7msDSIq$g!t1v0?0wDs=?>WyfrUpwY0}D)BCtm0ns;(NYWl23fT>apIp+g@0 z-W5|>i@%naP?cZ>xZ2BpL>5+v1vN;x8b^sO#Cb*h{uMITJlD`O^*K3G<$dCo>NmnD zy9n@@((Kc)8rqkZR5d$XYT*IS1>rm{J4k>$<5g8mnT|=_VripDKjMtFcIpRR!@?W| zPM}-;S3vz657-6jhrQvwL5RqiR1~dlBCO~QDH9?J!yw;lD*2&W+2yqhZdIQ=A}>w5 ziMFn;ZqVhn+-#B}8agH_GbgbTCkqoB2gkr-ohh#9x2Z~ftu6$R1Ks9>1)mV8oYt&s zRmY$PQAS))3uKwhhDr0s2C61}+WS>YePH&Mfan`vcCUv%;V1P=7ImV@hh2OMP|vC5 zzB#KI_~Sqfwu-RZ>R>FRv8I{0th^AQj+3l;MSBq`kyukHG3S+sfu|@3XT7E0FT^d* z7D_-vYXQPHNwgfy$EV(dS*--E-`yjKO5Dp?jL`ghg^Q%N7!L=x5vo_lUwL?VG6Wm} z5oE5yRPZjJ41750Ya#%Qqt~;r=+SESD5)R{YVTb+)&c5jepjes3#7cfr{O4I(h8$Z zzT)`j-plz5BG1LUiP+DrDJ){NO3M80`R5s&vs>P?RuSz z)^UL9afmZ17_Pok$VIW@YY9h_BbJ!3$F}%{%?TF~w0jAK}@5Ht`kiaiZF9K-s`D zMA4xxGNF$rh^@wmR#)kDLa%wDI;7O!@Bf1T`1Z{lI~mWg*7dky`CeT;ZqZ&ZeuGz{ z4B5!s*66=4gw)$x_mT_I=yYpi*0Krq?$MN{b||Uj4V_{?N{yWn{*(5^O&>|vER*VC zp>U(tWX2Zm}xbW^Tew(D;mKb~diUQLzT9t#FA zat1|c5!U3Sy`1B7^E*qr$Ftt4ArE6i=M!hdt3CnF&K)Q7m9Ghb*5kinT zZqAJjlT7%&4E=o0(*=Y9CDiD4yZ)X(?o?e%e- z9NQKu$2AOlJT!;A>dtwNnkM==6hx;Ekx=h>?D{zrB3@AQ{)nV}z?zH|GQtfT;uBgK zy1j9vj9?{tZKhkAe3hY06ayrt!J7zoraI$ofj)>wTM*!rcV5eqb{e3KASjrL&n4Sn zw_SuW_VJ&i{lg5_^?b*pXnh))Ow9`|_ZG-fCvj`GQDg`boUUA?XaoIBrj8YQt(0$h zIxI8ALoi}A-kkj`t*B@knRe1fmvQoHQfqCq-{UPxwcHhW6Lbw^ltiV&NJM`ICMd0M zG<_HsP7B&wk`G@^miu=uE47i2Uzr2s{m!?O`cWTr>RdtWk<3lBjq7~hLt&zG#)`78 z=AF5>7{&vtcm~+{{rj$eqp@DXA%zs^UW}=g=%!-f>YI}{Sxwlf3bdI}U>cH-kL@@k z`2%1m$G0B%&D{H+m5-t^Fna{cf*Vf#s&uBjbJTdj*LB^-%em06_OnBt5s9$iS!CGMh zK1o;_QAWtd7O1mB3DE0Y^g$X%UFK`5Q6c(yIhBn-A=!q)7b?|vG_@q%x2Fb{yDIYD z8Fj0u+f(W9t%$Hxwqz({vrX7(GF8%y?U^u2O?P@$x$Je8j(%Om2QHs#0z*p?8`|3Z zPT=m89?JpE{`v|rK|qfjW;AdG|EIb)lClA^ye|@tdVAbizXnuAG381CQh$8hcT#$j zw)r-3>j-!ISH;#y9%V|&z&1Y7-n9PG)f>JkY1wWRZmva+xfnLmmdGV|Blqe};*Ho> z`MUoN)U;th6!=$21;BtKn?nkOnEtUzJzJ>lh0XmA2q3dgp2lk# zp;#+cglCr}$WibHzWCBjTOjP`MeCA%yYpvlMZnqI+Y{gP7mwChYETsV*nwALRhPOc z9-|QAYo42>X7Mdqpz0+q#7Y7+k1{QcawYiz!WizMse$qf}prEXf9z+7{i|Po_g53T&|GJVy9fGJF zB-l~dCKjS5)Gj1FKb_P!1}(7P(n=y_@Q_8YOpV2Soeu>wFu6LlDxESQrH-Yr*~ZUE zjS#oa8)?Zp2NdLNGYyLdoFzoL=h(qAs$4#|!FKL~Rul_VDEOZz%ItLjGx^Wrm|tOG zu;(pyia}H>BhTNY+FFrSdAfZ73TsKsavjn4^Zy<=j&s}xf^Dy7d4z}SNw12Q#+Yumd{T+a&JhBE30~H z99VSb(*VroQ*|_&%t$GqsPr=qV8|9=IYrd6AQ%mz9(UVwq%XK46;%l?!tF2h`6yR5 z_L3`j$NO9?T_og34yL0lGs8lFfyos?E!gEJ)N-9futKiJ1XPKK?i?d30pP z#sl&42Fuc7Z(x7v&{_r`6y#iH=}RliP6UC31vhG<4JUPbR$un?8^lHn}l(d3w1H z53eEAu*TmM_=nH?AlmMjf>=2g_Aaws=#mJII-ozv*|6*1ha6rUel7!};wqP?vZcP94 z?Tbhh3{syIVk7t*Hc{`C?z%|PG5HQK==aGxvwbtj<>5b*_*t6|SlynET}nt1{1T_KDhr~VDLRkSkNr1);$SAd{EuNUOfy4JY) zFeGJ!@ax5d?e}DqQzbD1FX~*LBJ3nusp07{&6I+#No&)ipmJ*wqY>D_q7-B^W3FLI zH>#v3%@r*69DF=FETjL@8Ii{VU2au|6uSu zU(RFxORsj<{l}$c0v^Z_ZxRcx=^18GMETli56UI3w9?DO7IH-?B2EbJt~II5D9I1_ zXoSP;cNg)n zy;3n$1c*@uFGxg^)ZEkAeXc&@2|71j=kGEVKvNtj}fRwpJQrnO1 zF%{cw8fNEr#`G5Wk>C^Aw(%fy4ZEG0R&MXCb0GzO>Kn%1Ba$+)tEXl8+wq1HNji~v zq_R=k*U#)2_b_`|k{@Ro)E_dV`n0a+L=J5a+iY3?ZfKR!B%CU63lTV6nh@v(Rtm+L zkm4VIsS1RdTd?Ba$qe=Y3a1~C@q5_?n;*bKXtDx`?+pz{_|8NEkcoJr;;_hwIc=Lk zn|2}#t%t2ZpL(;w(tP_Z8luhT>ElmW6TX$!J=tV3DWAb1Kgs-GJdm5FB`FK;&G9kD zW?7T)EsWBYWEzT1=m|ul5Wn8-tXQ%TEn+lD;dJ@Q;ZK!c0wieMlsnBng9@|mHdkZ_ zMeZljJyvKiUoE@4$!Oigqi~Qyqx+4Yej#praY92tkFlAlQUa{|AvMYcV(@SHEuYr1 zRfYWCge4|oP2`K+m`|P2@i(*qUQN{pNc`VT^%^UpN#L(2n+Z}lv>dF-|76%&734c3 zA!tl4od3In^z?uZ{RVF)t>sd1YAwNHgt$DL5hdYA{b^g$P029RC@@cC&t;ytYHIKK z^)E+)8TCk?3ha73^u*ET&rRmm1gZ1Jx&FAXY>$lYCxw)o9R^F9w=P{rGKD)Et-(VR z^`hO{3CToBtQ1%cMCO=uu3=4uUfsg^In+^e8927*GQlv_>aEb{vj-&!V@|Fn1q=A= ze|X$5nJZM2nIC@PJk{%oc#NqT`kt=1*GU^Qy2$r4%^tX`oATnltMvHF+r&c2ze_R? zmR-<0`Y-uH1ep_E$G%XOw+Mgt->mO7Z$BZ&Hr5GBqkA?cla90vWFvGgtAJz%F8Juz z=Q*(bai*gAUgWhIoO=tUjbfGzPZd=QLqQx;Q}GH++`uRSBwcmjj4dp3^a~dQEmkn> zZl!QlXb`_45*0U8Fzgj7wXReg_iO1MUDou1)4QrVMdlUa%a0gwiWg3AVx}@VJI=Jn zpW9fi@UCVSfzu=r{3Qrx?{(WP%NJ_;hVK=wXGsjRVV7RLP#8;11F_tE$-2INxUslF zMI?a+^wGOYnh<6ooeFalP|o4(#Zw_b%tkzP{CQq4PCrqPp!8O6hXg!fbX`7**c@g_ zUb$c&Yfhk?S*vOgg4P%&okolUfj=cJZ2#3)#-?Rv#yHKDcb6QzDmc-{xbm@d77+5n z9SBMAz7=9*N>64lrytG0<1c}U?W*>N6hqqy|<@@@l2w8+vGD0Y}TAu*Tfu=fHoW@f(8);RHw3>-hp{W(y~4U(6CKc__FKFel8Q!2~f?gx44<%&rxJSKxp3!w|L!(*()+c!-W}1mGn*++`n6k*|XP8 zKym+#J491(eh+?gC=;RBvut#uzG9B-DY_u*5siN8~$70R1<&xDapjbQ9{8d zRYkM*3QkytGyZ@c)%jEvBfa#@*TgWwX15l$)+1g*6?YWf)ek^+7)FlJ*Fd(zb3IkM_-s(ah-H51cSujSE9N;YfcU!e zE<&m^)&8}&-Lf>|r-Y;_XL?_8!1crIDiLbPJ*_dB;;$uzVwvE`3Gi1A!yaC^#e%&> z_RvxXAA~{|4pE^ExphN;*;`;oR|Yu>D&Vt0Ya{iEur-9aWG$yi5LA?qcVn( z=~I^GYv)u%q zS8S;>6n)GF#|vFWx~MgY<;%a?2}YT@iKgf#SglVho49|3wjh60vfG-|`#&9NqjBk~ zT{>-&t1$tc1#~nnjI}j|ozV!VM+vbfw9zHRn2%hSBP}(}<6G{{x4Buxehlyw42lEq zf_;|j$c*x_!+vD6;H%kb$SyO)`IMCn7Pvv~$uQ+>jlSr|R!E^6P?;!xx7&siQ2zS9 z(Ertf$m6~~;4sIbfTXvSH-MK+QB6$;5A*|By->P4bU2Yb41C%&Ucke_kr8-M%vzX z>pxmg2Ltj;zXHZXp{I39p2WUU?Ui%r4)nwQLM8Cju$g+`yZ4f7WYT+)&_qhgktP45TP!Rs zg=y619s^4oJP<6`H=B>AckbLH>nLLa1F699|Ke-$V^5x2wAGcpiMlNeo9jpc() z(ZK)gRO&dH^y>gp!(gwGP_yfKL05mGBJ(h=VOosVuF~IRC8d2?a*UUd80U3STgp`P zD4#|M>-_c&%bPLsat&UP;7{EIQwL&e*rE!6=orS#?3ofEC{ zVMYm6veEy7`uy+TzmbJ~Q~q97wtW8T%m0H5FgzTEZ0gL6Cs0VTSJ-h*nOH#<78q){ ze@C93N*1PT-u&yL2q9S8p)AYC!)QW5e8nTN4B=)g^HW^oyt+WG5vLN)qMCRV{JgFA zK!dOiEL~=t!KCYV)BUi?;TjgSS@IEP#{z(FzJ((_hVtO#h}ha%&P4>yS%oBdRitVe zzs5dWecdQi3=7FoqB{90O0~t^RgpvaU9zwxffll`>r6omo-O@-WT<9aCU72n1vcf}DGzir>cN)!h;{cWn=eoI(EwvOu#RrC zNRPsyG5cb7+*@bg`lP26lFy*L!em}0gV6P8Fc93=o{|&uP@ke3$Eww~6m5BXRq7o| z@rS<|A0vi3OitJ-M0#uDKVHJ8?Ovd!kK5;5+L5niaR`ccRlk&Fcg_Yc{)30G*#~_v zH#f(L)hKe}oap)r#KBzUtC&v~A_kVN=@Go`Vlg5(fh@F;Y@hodZm;Nf&baq_8Z~2< z*h1NwP%k>1y6TJ=42kL#rt$e;Dn(5&gaMq4x7Uz)Q8+Oz;PqQ+gt8w;(laMLRql zsGxc@0pG^}|DD^afyYY>{5Q4EY$9WxU40MAt#WgOAZZ*$=^TRix%1hO;3f)ymaN&r zW0xk4*;+A1htiOzBFhVs*lBz4!#Vi=WC=c<_(X}Xz-ufCQ*LD5AXY*HVKTn^uiN^q zn!)@{EB2Sy8~Hf|#Z{&|4=r49gZ1HTkr4)m$YM@hy;s5U&E+|_ovFna;z4Ylkf^_? zh&F8XyJJPOB?0==XY${ ztX6NkmCMKXw^yl8ptSfe``@L+#u{t;mF5i4viq#zbAKz(0R<`0(84WlDI*(7jdVytkEzgspr#X!V2}ACjB|P z48oVU*Y8Yo1)}{m(YfJs)^oW?l$UNee(g6=YU}rUR0ZKr{;jwwA@o7i#)9*D%%FfD zm0*_NF0+_9E_WPqzP&?lz7YukDb}^}gWc4rN#Q7$&_rfg=vLxfnD$nwU?>lZ6GEJw zpv>h94Y!$zUUYs5j`mt%^S=upaW_<4noluQVc^QTy6?vgOxc4Ft@Ea56Xc!uba<)% zQC?UZPd=f@1RD*A^xh#>g-D3WLsWPwE|Kzgf6o!R@S;1rA&fDcs>#0V2=cFDWruvg z;`Xz3wIKfEjiDGQ6lp%a5+a;3()>5m)V(9Gmxuo~og8W-$#SrMwlmA++G{t@FTwI>s6l1Ze*9eC;yc^?65qU@{az=scETs1 zt0Y2y`9v#&DE5b3HB95?aI)s;GkXsID@8`x9gr+Kfw_UJ_0!|EExcFS6!6^c<#2X( zwyTRsT~sA-9;4+IABm@y<}lDhO0!RD1LXCiUb;c;$wtH!KGGQCyRBR{{2zt9!|*a89axiDkhUe!$uV`t$xQd^tbR52ArRh z6Ii-+fje^rAD7l35haGhUB1=6z}jjwx^d>{_Mh$;w6X&+32o-3n*t$#x=qyH!mDuu z=+6}F0dMEDxgT#hW1j82zc>U_Bs9n1P>Z`i-=C%H*CMIk^S4p_Fd0z7@T_s_zlM_) zJQ=jqChF+*XMAKv*&{OCOYPt+;QD*t5DaZW_=A$JYBzJpe13504<#y1i;kb6u9p8o}PkOi$6q%P0z3~AF8i--j zpK#qz%_95NMVh=Y(V*eH5LHBMQ7W9y>7%?bxOQD@xz&X?gd63{_|DwFz48h_sQoBU|xmZ$YIw-ci)A{JQm%4ILjC%D>flfDh@MFX7z? zpOEy`LZXJ|4y>H}b+*5rI>>ZJ^oKH-cMAs&9K_Su6O- z@eMtd{w|4K-pS9(^1r=b^PqiMb*ZN=YaG!8FN)orJZ$Fj6hy0nFnQo}&vN&N^NqPc zWCM6+MX`AcGVV%Nr86Zs?B!$tT6D1AlZj55_!4HjnB!bO-eOoiSn|ZUL)nWiF zrV%UudTj6HvCB03-YGe4VF|hazX%erG6T2xH zXo`$rQ5^MM*NEbox8uQD2CEdnhBzjmfc?a>5+iTQ+wIlrYW77W3Q?3Cq@Vy0pO`^y zC6eFb*rkcqG`(ZNT+30uG*FQp!B~-A3z>c_rlxc4qp<~YllM((!B=YHf04pB0+1|D z0zhU+Nwm-yrP&)-WakIFej)fMn+od&6=Vg+7-H(hLz=gs2qCBu2 zxYyM>B%~V<=8|+rtF_7qjGLrjU~Cxq>!bOf36(kZUDi|}LgSdcv@t=RdMHofQlRmr zaR=wjw5baRmnZ}t6?l{A1qPvlDkRZ&f> zsw@}(ZkzC=tnjoLoP=}~++o>~>d3Y7T>8%JXR$4@xK5%>O@kEqO}f#t?ZjoNj9>DN zcjZME7`AM)ix7jb2eq)uQ5cWbRj?_WsB>VerJAyf*a9vo0&%8Ox)PoTsPFGm2I_`XTTnkjLw>DM_nEqSab-9p+;geWv|v>gDvZ-G^{Em_h*92?^AmQ_7bsSsVT|i z6Va}B$2wYciGC>e_Lz%`>KSL|j1MX72FwoaG4p8OELww7p3g<*wkKn|j2aZ@L zV(F&CfDV$zP```*8Hxra+lTM)0f5n>PdUJ%z^YaI3D;f0&^l z@hR(`_omo4A$eu_=y<+2&QYKx?^s9W-uWtB7E8G8e)>yRmc%knOSSKC$!gqZ5bmG# z2n~Jyf~^{>VSHaHx!n7|m33n}R>7B}t&EFEGiRSWawuMZw9{5O1Y;cQ3^#aKwUp69&~Gg}o<5ojWW9$=8V8L*f1 z)sCPm?7ZWsKq*Y3Nw~Ke5erAYJ2y2Y_eU?&P6-t<;v5qdw$Z3yQ6F24=?68IG*z^0 zir%Zuy03ke8#3sgb( z;P!ml9(@A?=8uIHr!8Um(r=At@2T;23gMJ%%=(_Ee=jdjch7`Qh>q%%cx%`*^zB3u zJa~g$r5F}6bk@Gn;&@U9N%!y3V}v1=lD^@#Ns6Tf5VePQz}(7 zZ4#B3mz9Z$$w)vCaKn^UK88qK`VI9@Q59uekw+BA@>Nrw;)3BE1rA9Y#n>t!mBVn> zJZhHrQGOy-J2fe>=|^)_YUO>D_o?5|c~&0%Vilt92Ond6ED+ik&itCY!8!hayRUz9 zRJ?~6Zt1mYINX1$&8Cp0Dh}_@li(FYQN`>PfDmwIa z?~gKWum4SjAPJUGn}6YmsF0AkMG^F(&lIZIq$bOy>O2Z?u6Dlyu9VLlN$ zkM;FqCB64&A|1=sQ77+-kwaccemTcT3j?vnE~=rxR?xzbI11zcK$*1P-m#-B zPvK^)W8{S}gc|b)tROZI=lf@6UN~h1-njQT4{=g*E zoy|4v4XmvO5zladZX$thjHJxzD{BAj3D!T~c)|K^JpmtR!269R9XeS+wR^P>$N+F- zz(!<{Nvv4sK9*S_CBm(M_3&ZqiHa@coy?&!;eiB^rInrGF$sw6#6Codpf_K~$(-Zf zfWqsM74Vr`QC-FZuE^QT({>ZaV_UA5mnEH?L&iJVX!_+<-k~ne>q6X`<1-%l*6(&x z#W45wW4f%wcq(LT&u+?fo6dv!0m;u^00?pzb1gX4Y>y)`jJBAe`!*^Jb`cbeMe(=s z01&oldA>ii9~l}F%H{>5Qk+xH)`4^B_*D?C1SU#jo=8y7sqsGENejqf2kO;zU{VKU zijDGAts#?@6@(I&%~N4y;8P>>da7VlXcx$h`rn7HV9AGXd~=AvDVHB6&K|he4nKIc z-iq7u`iuEI9j*YLlf#h3iAhz63|kN@_qv`7iH!T+?({9hplcl_)9)4=7kB`D zOH8?OpgSJuZwg)$dbcNDU=WxE>n27xN$kgzA2qw2Br}E1IUb?bR8VaRo1BTP=2G@| zqUAGA8r6pK-r#%4@gX&DP;$+maae_6MZ&~v7J1wOM+Qe>4GIyr)BJx&y5~R@HKtu> zm6#hgLbOT?GqF?4YE?Hp9F?Nu=O+L_>BBE8H*Nh*d$U_xTM--E1Ask*2dcH&1xpWI zfLmbB^H@O#(@(1U1X&H;(9llR)j^hRH$5o~jtrFV)6v%c2cHl$7JGx3;`opgPNhir zm@@EHK5NXrc1W5095DB3*=XA$G-&#ZQ9~{9m;_R?<{!;>ETv@^0x$wo{L9p=)ma<-}}h zH_iG-)7SAF$>gaHimv(}I~>sLO>R>}ZUHf>y=BII!>AUPFn`+8b_vvC3O@Ad@8%^d zGO~`eCBB2u*gx$;XEI9QqSokt_zv5Eskx8t@%~El zEUG!pVwl75$Gm(FpfOJxN&1#$ZL;F<`^3lSH;lt@R@pPZ%Q~w5PqF~4lkN13rFytk;Ifh6kUGn?e2c3aK1H` zD(w2V|I)R0vQQB(^084QJ<*ys<=UGkQW-Er(0pA1iw`IKz5YqPoCr#l5J4(>M5jvb*YoB&@;rNz zG7gxsc)|ZPexb6sDbTNX`CDWJpTOe$zY~(M0zyX6qt9%f*HmKw_RY z&l+)w;Z3$5JHP?xaRrRzz}&BX-7xG=muarX#l?|t@t!D2Fc(CdobSFC*0DfSf-bmb z#+}~m)e0^ir!nQX>&b38rg#xF1AUEVXQ1zRIOt>G31|*fK(3zv{ai_O;K9(n9E((` z0m}m-Vc82Ji>U@#G*4M<@K|F3Sq>mLG788OY)u@xTsB2rwg}MB$@>Jz9I-Klh7Nf=2}mQTL}yYE{p#B*QEI~plZCz7p&!Ogp}1tu8hV7w~E>WtY8aYN+T;5 z?_vwY*cvOhdr2sYnY&mgUgH4npS~TGoSiEQ{ju{9Tg{(8H>dW^;q0dL?VF8pV1NTp z)&E-#JV`HD$2jkok3Q9Y`JVKP+BTD^rmL%$$b@9&DrV`b#(^i-xGokyQcvv&YIqOSFJD2 zs}E@*?H8Rdpbjk1Bj7SkfsUDEIt}lwfg7YB?xQ_XJPvyL6(Nn1=D0oMLKn6p5G6}Y zC?D6;xdh)nwh8F3w0RYF5W0Xur*1c7Nc|jRlNiN>8O(K6T&@GFQ$P1b4iYAk6Je8o zE61FgIRCXo7IknzU^S|to}3J5-zH?Tv$@vS-3iO$g_K9P%YmGtTyeE5XeQZ4pA_%o;hbR9wN!`*Qg*UM#v{iR6iBl9w<`S$C4`e8j8PIwS(v{o_>JEeR7ViAD|=Xb|tOi4m??GKUoXRI9gIJRPG9PG^CxVr+g@| z+Yr?SL4L%3M4|S8zVoAq=0Q6&kA9t$teG%sP-VE&n?}4VK}Tf*0(-p4cscLzqj~kU zZ&%E{i@oKPjqr2mVWUp$2`kapGbMod`c91ghOJ|oV1<&9by8=VMdf9Za{=xY4(*%4TZ zT9bD%Bzj!?rk}X@Wd2^@X4|taTwYeN*x&V!6sHFxZDmcJgqt>>S?7a8-P(yS*>&f|B z9kxVixh`P~%VICJEM>I3X~->Mxp(IFcWRT45z?do5}T)B65jH~lGz%nN8m`mtsivV zA>9;Kp2vrbf=qdP`+@q7P}z5ae}%1H65ZxG`ONY;MbD6UQOfNew>x)u|`f0|64vnE4Ue6+p}+9NjvRv0w=70XOo**{XgVaf}S z3gddOp}DdV9L>&^5p?sqfH`EEH$Hi&Ed>A+)4n_MrZd#^ zB~|ggjj_TxfIq@NeEo$AUc!`Bh~3~X!mIa&XKg~r z<|enBc_vzEsU%Cg(zA0?viWfVW+io4!BJE{r^x3C`Ar(r%BYR+;aB2IrDPt9NIn>TiX-|vuK^CpFxzTD8B-)yMB@CYE(7}1 z(vfw4jkBekF0^R%jh6-_S_-!qe^tCWJukRf5^>dzNzq6fy#2r}(kda@qdhK;f{NBa z;neZ17qijR3%A8vI`0$M`b?qZf*W^4(NBc-dF8m*AxD`;|A^LStqxNe$B*rYt>#7? z&SXt(Z9me~Og5xs7dVBb2ig0_AD_o`dEwZTpAZI#JB0mRA@oT z%FaZt<%E4|u7!xb-PjDhu;S*wHBPkBjG1vXaq0lg>c$ImrPTY_f+Bx&<@ZliFO)ID z@A~j3s{PcL$Vd$k=eu3+)8ifAyY6hhW8$QU+*%e^F!KF|fI>+;SEewlN0`$6> z4)1q$YN~dtvZ*I0?BL5~$-Din`1B`qbOe~;j~Klw<9ASa*+zE*cpKrxBB`I0!er&^ z^cJ!NL)_ApQ-~tp(7sjLl8YD6(iI_1;fvgogVfC5Ew4o46H1!Q8G$IZ=(-%7Ykqfi zza>@k8AOU!Qihe;nz?P1z>n&kmj+GcV)B-B)iuz7V~NQ*oT%>LO5;C!|4P~fy!-oK9Sd#MWp1a)fVX?!q$z#hunW_ z{-HJ7T%y$qeRI06s<0+L#seh@h-1DF!LS(up<8VYdb9_~+k+tf2nW+a`7d2929_GH zlSMw>hh31PV|F(FAiuS@C#1bb4>bFR~!e9*s?(JIe$i(o5DvynTVyN-o?{9 zt+p*9uI}{DL6Rc0;etkj{>5P*vmV{Gq%v{E9o=Ng1N?-KgVlq7gp5peH_kcQ2wa>(VE<>0n4zE&(z`>=QFv z*YRfl`m^=s^lyi%66-8P%5Jlsyf_M#3=wToC7o;##LIMke`@=R;BZv6A+@86>0F{v zf-P}i zMW_V*EiLVS$bK5~w>(q@5{k}$YoPlK9PEHs38k82pJsv zHuc%);k%#qM63G zp_k2iJ&70+?d3dfr1>phS5R%D-RP@Cl7@k0|| z9rLBZTV|u>FZ_?C8A0FJ;aqSFB<#wu7plf)!!JSnkME zSjUM6Lw9;Eps$D!o39^@((ORfmB0F$`&eyw~ z4JSzpZ;;6ukH6WG9=h>{P~i6To>nWvCh*Gho6+Y?>f2JXpE1{q8ZK z{kGTsM9Bg_y9_}ZOrc9QGmRKofM@Nd-+-2MB#35eL)!E9v@}}tgKj2V9C5CtdS0_w zCDP0;+>9}Ter!iE8-8RCvUL&tmDQ?ZOPA~9j>LU>@<8aUsvN(~!sA2o`28&O=3$|T z;Jq~~AN#1&`C%nXUPV1NLci!FQA3xuzs_f?h9tlKw}YoM{K{%Wy`Ld~oU6oCUKuaG zg>yWvCBjDyI`Yd_sXuS!x44);>TPY?ej)w?cOG+w>pnscsq3RAl=rbS0$X!2VhFxs zFz4grYYh2A{6Q8HvbcRd%lkU(ZZKN&<@L8?wfcFY1(5rEvZYZrzgvefY2i?Sl&ZarhRZX+T7!#sMcR7N?iGS>8|Tlm*o;xa8fA|88l~_PG>z3iHXft72#j4Byyn?+@R8{H+p#(axR{=4V2=( zJE`FZQ&_4|JkJk=vXpd=-_rK#gP zS!_#gNYv`(n=AL=fF|mwV6C~H=iXSq_)GDT%%+ZDL;?|J&2pu?a1@abDVR-`L9E;V z@o9GuasT;FoAH`11i+3KeN@kMMmI}ef_=~v6q}?ar!m&}ou1l2t#1VB z+~siQVy&A{E@#IUC2aPyiCw>Zk1Oj&IL3H^gL_t;TK(v(Sy*kK)5+4}em7KK&u3KS z8G@8}81I8nKlFE{$igFx@YQLH3Iv$@_pB0f9o6x^MQzYyjX45)wG+GXb2wG}troA;wdtq3*CQI;$(TkcqMQG8!b_gjFc|gUel6P0jn6 zA9}8FHHA}q-?_M7+H-07Dsl0^!bp?T3Hy{( z!h%CNd33GpYzlgUjUViXRA!xgchvf-=1c#!<9413J{Fk{6L9GKDsY(jX>H!mz)%SH zS#AEf3ty{Q6*BD&!(Y=<5|LR)D*=a?mM0bMEJ(kNrdVovz*=-US*S~{5mGm)`>ldH zJ>m@%7;w2!hJV$3|MhUZ?EY?reeRDKR8Ub+D0ac));pXt#LCP4{=E>htRYc-dYhp- z_^l~x>6X($Y1`Qu$29}bYE$*|E8p71%sgv-8s#owxMUI(H4 zIeww{;k%jT_PO2O1DZ~m(J%1XAfnKX6JO2$**N1A1c7!m|Ifx57`P1lALs8&w?Fs5 zMfm?|oE-tq-@4Az*N!KbZNiIFB%*<7P&r00^SwWXdQ2WJUR5r&zu_hxuB>+jOd*lJ zRSqR)9LIwLr2u}usC<7KH?Sl*@9l|J3Xbw}heI8&*a=fx#!Y8i?Q0sBd) zxi}2}_a`4HnDXC8Ng^p^n8d%2rpQzv;2KJ30#zXBKbHsp|BL>wz5-52uH`35j@4kr z)F^!uA&*oEN|I082*>R=xwtNn{XO0f_(@bfQ9^(>B{2uit}}iv zrrYwI-qPkgKWx?K7!`Z4$qY0E?&Wb|woT*s=HYGJcV8_)vd5Vg=X+r?RT>HGrt(KKTdrO0p)NjG47(MXFlFRc=BHn^-3Q#gP2vwe9(EpfmRk4VfB&}V_sYDTo2G-dnuV7hEK z_Vi^7fXo_90za20zArklxid2}kEx}ZQ9`Ilqz)2JFHbiV(lSB)D* zW*J#uT&5y=1g_EVICj!+!R+fzWot(sX&)0g8NT*%A=ogvrI$laa5_B>pC3*PE-$B4 z`P%?c(DG)KNHUxbvOuszC=jkpTOgbS(esge_fKtcBJRXuOt&j~d(WK(%M?m!`(gzX z(F_elNfO zUrawtv=>iwBTd*+OrFxPp3WE8$0ANm{=MM!nAcpyTDE&NtdMh|>(D_p#-NQl>Euf; z`YbduOi|;n4sp(Fz4?v`@$ z*4gTLrMlz_oGQPK)qb(?aKpJvq#@NcD_-O>s9H%jP*&v>h|R|TZY-cx;#d)6$O#B> zzHo^?KW_AXGhcBW6RjKpzKV^2rN$V;$+|VgX1;n83*!Gih}6t~Qg=@D*=_lHUsFS4 zE<%ctw$#ZWTh58lqOYB7Pt#z3Owrc6zMJb6SI8FUW z(5!{lfSo@;xfOGt)pH%Ov$WJ!^sTmA7OJxopbwk{H=_iiBP(D7AxnpVe^1KzW>?hO zaj1OQ`GTWy4ZI5AYTP>ZCi2@QqMxu(9)Q|gC(*@Xx`hAyx+iCuz-%QmYy2+DcdG$$ zj+V0XewAJ@*!^Xo!6V(BV2^EZ_4lx8mH4~i<~2&OkLR06x=Ochf9HiHX0qunZ$AJI zioQp6v-+NQ03yJW-c|CZ#`qg39?mDa5gAelrULorwud@SET`XISzB9w0dV9r#E~i@ z0LiCaM(l|r&eHcqh8nx7Y=6QptC#X(d$-`jSo>{Tk+wn1bFsBx?69xiqkZO!)xjz~ z!A$Nf3H`6aW_6RC2ObQ?lCs%tJx$GQ%jH=wQ0JBQp9iW5r06_YLtK(e7 z)0~`-z{5C=c4^2i9~jp3Ru0y@8#ypooYG=>a&0x)R3RZ zCGB0%%<=cw6?2-M3SFe8cQ|7B}jJ^o96R3%WaxYN{CoA!Kw3!bBRY9EQ* z`*MP4Ozh#P3jow0k?`55P4!k5^IB{*h~Og!;{fS2826m|&iP0ATTbA~8~|tLuM(@B z|3E~R1&Q8%Ud_!~V<%48ZEQ#LAMJhN8bu$>r6qshT==O+Wk9FI0R#yt<^CWCdCvl6(0nmB*-6?F~=5 zSVj|TbjDD%Es3!wx_tx5^4y^lsYuo02cc3h`yV9dKM*I#KCdKBrX)W$^!}NsTP=|C z^Rfqf`;?qygDET&7EZKw^~S`IE!J-rpF`h^AQqNdYc_J=0i-uPI8%pes;^jb)l{7^ z{!mcoxK>H4%(O;EpH3X)q{xO=k5@UZZO`n^h+jydeH^Hgin#3=hh){ItHm$Jcpy(6)^@?s12s z^SI|Vaj7BWtbw`KIKrd(q0MtNfpHh;|n#svm}3T&=MiG%V(vYAVg|J zqZ;au_gWP@tLZ!y#i5i1wPvdB9b~GgzcA>3);pEqP<5@JrrX-uy4o)_p2ebZv^bmr z#CE&(tO_t*#cY zzBLewWM@x&1h?gQp1Nt=+3B=LwU@la@^h6`wm$A5enGTX$+1-iDy7fNIG4w%88M3S zTPBkG@9aQHw4WMsG&f_4wXe%ec0?;}pF8NIZ?5jy#H&=l!JV_Be&UEkXVsKu{|l@0 za%u+M-gxZe)3!^BVh3Q$puWLjBBZ!5gkT4J64$|aEsHv!JFbjeQ$$8mEsf%L^~%E^ z3E-jdxP6uj8bHDdoYnSvEtQ*j`+Js<^id6zkD{qVBl5-fewNNLVyXe<8N z@`04)-SIHCzaC4=TwR=<3~F$Q^GAmZal4L$L1wA(SB53FC-5rX>QQ)WS4Maw9-i|x zrZ3O`;J7!yqSs)z^E=gQUW=D05EemwrgLm(~z@^?{Z5(*H z$38BqFE#{04PYaG#P}ah_4a5B?QL<~+UdUW^A(&@30`Od6@D6@oYr<=OF#Ga#na=` zowC%@J?CaJJlxzuf#uz*>|qnT_-}1=BAR5M0rog(bt&Rkk|XWy?zU;MBRp4@WXXZv zR7Ax0spY6KAL-!Ol83JK*o&+*dSqa_AG2e04$Nwhm%ae3K=w>gPd-Cz^+8f7IzBL? zj+PJxh->=uCyc&Be4U+nM*$4#fj!_zZO-@lb%wN*FV4eF1@U8(R@L!OI}Am+3xf4M zm-h6QG1^O#55)LCiQTNFiBIB+#4C9ti%j06W&u=-D_u_ghN=T~4g32XD6GxLe3hUE zp7Pinm#V6Uat@<=9;vxUBt>hxSBzIosl*|E8U|@kmF3R-M#agh>DTt8B1R7`O?(}% z{uQg7(&&YP8vOEWC(RoFAHj|}XPlXf4Ii#kB?w4qDxEuG&j2@MV^{pe{dj9IUX`Kt z<&KPuta9AKFLu=M)jDtU(^C9UTu>9iFNJ> zuo>l!8EiszvTfEzJlc^Ox~7QkC$UssompD)+5`#@fz=^WhxvJCDF{Ru9w<BwF-_)GMVoSTz+G8EWT++$pS8lGH7T3e=Gr&QJyCIb#p zitcWA0dXZNqY3wT;t=DogiqS~wU(U{#7#8bx-53)S`Wb1|8{PFSU$nm`TL>3+B5wRsF8!^=i9Yd*@Kdbw$(;+rbwCpK`PXsntr~l{f&iRO*Gr<(3q22@cW^~SkaEMyM#8q^;-A@;uUl*W~ zv&{2?5@k!d&Ju;d{$&5^t7FX3)cW(=M8WL9wvfP=WEK{d_GCHQA}z7!k zhDSO4qqBf8P3mB4HPu!pT%8Z82rJCHRFpZCGhIHPC3CyS|L>nJKi#-0K)n*{tE=}f zK#G0VRYob${nO|{ zT|fZH=GkL0GroqI{cBNwXeiQ$Fk~+?6KJz~7FRB)GcqZg%DJB3iu3ufpEv_cHm2&Ti9c)VR2EF?nAp` zo#E6K9LC>T?}z&Ov80e~la1_J_JCsfy>?0Z=b4WhC|=o#$@VGU7WYyhK6lCQ*s#a3 zKjlu!^zcXE&|BTP=An@8V5BhUEtg1-h9A1nRO(+=e>f2V^%+oqkHftoCDiT9)xq@a zKQ>OZ9$@Q7Ih!)7!Se+TxgP0XI<@1n-Pzq8@WFY!GC6Ng$r5h={++37Au6%|gt+8z z=U^hesqb~cvH3v5ix11`Z7FS*L3&5cXt@<0;aZl)2(=x2nlhx+@riMaq29a_Y2sOFo$wtuer<+_xA^OuRqL|YhRQBOstb9hAcP# zY|ZVU!u1$K%72R$W!0w(X4|&Bysq0m{6FPe=_PaOScS3Q4f4n5|SJ)OmhtLj5 z8HdNvAd9HLB(v3#a4+;knOEd!#a(^e;m0Ban4BB~#qJ5y0;bK#&oG^kWLDJSc%dxa z%&yNYIJYIdkqLwBFkRj@Wu?b-(q}19{qw!DftnqJ(pO1qcsC7>6s=<^tO}j~_+0MCh2mt6e)=3PLrqZu;O-CpdDgl<-Osk~>^AzqtoUeWK%Mmx z$gmuXE!i6qoB9^O_480wa63V9(B9pMIq`g3{e%Q6-k#Y^aowne(ba!UZ27?S=!%zq zH&sfVy*hL4DNGOqx_l<50_i-@==~{)4P3T#Zn3(tn zZG|rZJtF-6?(TJ^S1uIAXXLokb8EHT-W|-N$xy{-S@K5||Ix*@NsOQY3KQ!$wVuTX zSM6V2@F3r69PbMFQATA#`+D4>ke!MU6Oc=8K{Yj&Kv#(EXZw%Vhri7)PQX~X(8kN- ziOA7P)F40*q=6SgS>>=BYAO^H5r8R#tf}w5O`iSoxa%wb=_R=W)d$|}uO{}aQ$%p9 zQ^_w8x8~j+J;iwD#OS97xa$+0(NEoj8-NJyZllfdf)vQ3-KW75hEFkzfgG!7wGaw@ zUS-EtD*YnOkGMn~Q^$fD+`T>Hj?`Rbv`QV z`OS!T_g5r#jqCoc*9(V9eSLiabARj$ug)$OofhWt9<(;iXS;N4*>#&K{lq!;Iu=Q$ zh8o7ip8qm?w|ezy1Wjt>*zWebZaKU3m}B%FqHisgAlR!%n&1evGldZ(yBbdPu`)}G zMTFmdWZCw6H9NhMi9 z{ys*$e+OspZ|Eyt4t92SHs_8k5bkVwQhy@&rl=@2ES4!fHLxoi_8rhJ@E}@hHN9^8 z+aWf^dK5!|CUJ6tjnDv z2HlNUTrJ4UP%8M8cE7>Fo)Zn%`z#c&WC z*i{Wj9^Iet3(mg+NZC1>TiaLZPK_xIfJ9;72Nl8Xw4$P-_(tk^3Ckzla(}tuVf4tSb-DqS~nd1$_Hp0jZ zOF*S|+J}d-$JdU3u>r=J->&5r;5>Uh1FBZ<#NgS1-VB`o3MCiFpRI%GtwvSsS$y^* z1n|XPB#LKHZ3_r|`8XUTzo8=qPPC2EHd zNPu2#w;C;e*=X4QH3W zr7dna5JklapE00c-;L~LJ*)Dal`e?iMnsFi_C=8BpiwmUF6rn(|%e%2z#5A`>*a|K+R$9!uBfe2{^^(~4ClNsJ32L9hp`)@R7py?enF{{nQB5}x|S zpWk`*;%P1=DA9BL-P=3;)YWbg-(GR$=!aW579BF1b~}hf=4Pz?K2=&Uc~xReTPMPd z9v^n>8~MI@G$)0mB7~=e7_TG=eUG`8j3L7(-1rBTP&ioVIt;yS38nJX5Z%#4a$$&%*9^9;gKx z`Z77VYLAD#9`18{k^SODMFwt&OX9TBfqy#6cn%#4DqjpqPd59~8$#xmFPM2aUVL-B zOMnIg{&Nsqb;sha(`f127)HrqqhLIGu41A@a9xf;Eg{UU?iG`R3fv1{sc##z9@&ZdI}9`3O*?5zGpF!2r4;qG>Gmwu+1TI)~97dV7-Jg`zwzKG#EzUcH?V}h?4GlyxVJsCwW%7c*0!$#Cq1lR;6l+1ImbqJ z#?G#d(1>;5SG4BC+#{JHDo~A0eg`)60isRK?H;6albW?aOS%UE}aUe`3pLH#q2Eofd*SkAw>nxF}>k&Le& z5toQ^PER28FNG&Sy3+iY&1%Wr*8Es!(PA25lOa$TPB7m7So7RJ-5H0&iiYRX{QS+E zeW!(VhDWsE1CR`ov}s3xsU;T5Gy9{XJi{$~GtJ{j7sSPP?CPoo`rmP?mO-+p*Aeuy zvEY=2MYyU_Fkso*zXYv0M#=o02`oneZ|g}(p|kTtky7eUK*D{j1^6W#2uTnN1SK#Y zc|1GuKLBMC!+oT^*QUYo@$u^R$nUGiZ<(IL;~d1Nn`dt@#N8^%D*20{b#*?6&fa7) zQXrS5|Kv?cVg8v{cQdfw5&4#1d1z-b$)PX-AK0srsw65wSCaY*DLQan%ny>MhHus&X2v8Ur;8Vg0;{ea3lJDou#(OjB*k4u^?ZjvOS#kmYl~k7nS$o#_6JfMcdbzmlE|K@rUuj*&_$ z^YJH5w8*3z&=bdG$bGS&e0;l|c*#asKJOXI7x*NmK6EqWeykPG`7y`fN1DOOr$$E% zO;*rTyDBSabmwPu)Bep>>*I{18L-0<-p=Atr^hTt)3{$2c!61Y*+o$34Q|zcgnmo{ z;oMsay={9N-h%;j>dUPN&9=@VRD}0XG>I@ugIjUnv5O1de{UY#HE34u%EpX_rasn^ zi$7N}MwW^Fl|a%al`i;tiF>vG$gDE;K99}#}ZNfTnq)^o*F zG8#g)bF6T9q$z_YOD2LMNxE=9{?$-TL1+YDN1)54B-Df(P_P=fDo|YR)=~Mz(Q;}< z;RUm5o??;mk;TideCYl(0EqUR@E;k228-OS_LLAu-!Y6oz&ry|)^t;~9+;Hm6tf9} z|GJPXOisdCO_SZv*dIO>5<>?=SKCjSVkj?%au2iLA}=);Q$IZVi?uB5^fj#7_FIow_K0Y-o=g31M-W+Ab@UeHfEYd) zLpa0a-_Dpv}PLcDo+pt8Dhmz~dV5fGCan>nk0Y6YT0=VT%W5pz8UrbOM|xF?psBC;?hS*U zkM5%+*jIlk_aNHyO8@+U&R&L+kbCWE_zRrR*Y#!L2BP-NsX&$P0BFM@A1eNw5?E`_ ze6~Wz^(YMJ3vg(|F&mnqpU%?~eu^O?kun@v#ee<@D7!HgKURPLzHfXzq0Re(hCk+o zEc0Z?s_c1|c_Vz*^Q)lrpntD9zyPZU%;{E1gAePfd{^q&?c2IFq%)q-v($%6KNF-@ z<`4gE7;1<6iV{H9ctXx0J;lLvy(v8(PPN1lN>T7A-vgVr9(;-p>FT5lQ0ylRziw#!0(phWmz=e(d};tPmSi0 zVcBE0Z{N;*6nqYzvU1$n8M}Iqpv(++&3lg!75(J#9WwWlam~g5)Yg`~D%8UaXI%E+ zsOV6yDrDVJVJ+~|K};%41&fk-|8!3sD3vrEJ^Sa6$kV^V_pTsb#cEyALEcD(0vBCB z6u~g2oB2Hd{S&#*?Rwd(upZN+3y!{{u_Euk*fpe{LrPr&ZodoLxv#}QGp8i_ywEc zDCl$rPa_k_1_;?n1w`a_{bD~Lhf~5;R8%x$qs(QVo&wPwlgp#TjDTSb#8|;V+40!6 zH^&gmd3XAE!}T!?Z?9+25B-$BY_WYA7_Ime@|0iG|NaJE{=2d2oZTN;x?+u@7)s>i z{&x84oN}?S>+9=QOo27nJNuTiJ{o`?&tGv%M+FxE1)hPbJgM#1^jwHFU@C7DO97OQ zV<+c#XH(H1Zf7Ui14Tc%!pC|6#|u;e+>KGcG3rD2*L*$Ym~I_x3HY2+Q$(nhx^nkQ z{pd5bA2J=fP&-Tcmnw60W2m!3q-k#+7B7K{F6s%dj zggERk1s?1WTpY|1qY!{8r4UUW$WqhU*g$uuuTWCjslw{W5HYE7)|lcTF;%lTVLiD( z9r>#wDEu#?zB;VQ{|$E=9ZH9Ei-3SAAvGEV5u`f=>29fw29fS^ zD5WALE#L?#0jaMvjFONVQUk_zUVrDh&iRY~;N^Wk@jUl)$F)}`5my|%oLc{gQ!oy$ zT}?f~c-@kA;j^6HQXW+{sO~$d%)sSas|B}#Z)00Q~EAvKe1bZ{2>0)uVCZqOf^t(0AQ-);bT;8DC5 zm1ZDq`%w>_ZtNM^BmSo^$tFgllZif_cBiJMx(L!2$^r%f3I8l0q`W*d(kXjNNRz;G zNn8)}2fz=k*7IWVbpTrj#z=;bCcuSU*Z+bl_2OYn<-Q|dL>Ugm6k!0{uEy>+&-(Q7 z>ADH_q=wPJVrdluiz~jr#0h680gN;rT^T+b`m8B>TLde|I+mhmS`NM5qx zODn)VzUlbisicshg?%fn@{T|9U;&q52bvWfUiC%<@JuCad8>+m7V#H}|2~vK5g@ZC zl@dt*@zqBuhRXbWjcG#!wVgW_t^lb`A&=%8O-T> z6IfA|brto|=*P(OMnR?P){d)wNF+9}Aj+LFh-c^U-d{s)67&DxH4H7$!`MYRaVv$Q znVVkwwnwU!Xp>$R1dI>ZG(}Q1H)GPM@Rw`7ak8zFd8OU#RKDQ-9q?=*KX%va9DvZ- zn3DUw0A>X_L*Ah?569^ms`{x_W2tJ+#ep7%0^r`hs~>03=q}qhyeLBN^b$gBOn=hq zcWatQjayx877lWR?aO>2{_qrB8^bf#0KBr>vHjVP(fw^edk}LM5&pNt@wQwyEskhR zea3F>sDFdi3NyJBrfdaN?QyurOrM!9rOw z1CAk*%EmKrjg}TytX1~)>UWoh2*4b+D@}*Jtq%{{eN3^5vi1JH=-x;g`snNk((MGh zP0r>@L}cRgwUm(P&(^0e&@%lf8HKO(o$$gP2KMC z#@!RzkVgKL{HowJF@SO{2l2?Dd}U?U$sNVIvXt1g8|}mr_aCYLK}=0)H|k%{lhE)! zd)U$HDJ9_|6ELHA*hVC9-)SS?A$4+S_G}iwgrCIaUXH1s6``+h+Cra`Q)La`7wWa; zqNaoh(kd+sSC1_Ej)WZuO%IDa4cqSC5ph<{hz?M=r+tQP$X(}~OQn9@%x>R$Q6lm3 zHQ*AfhvO=Eic9B^a#NW%h3p|Q8l(%!IZ2(aW)PgY&3zNwyIl| zZ4Vqm+Vv;CiV}7zKK<;=>q(z|r*s`GD<`)HJbqfnCV3mICz?pWRENQ|`#c8dh-0zg zcz}fSJDrS9U}(}gy7flR(cYd}@hR>CEadq5~$ z!v8-!bodnC3YmtI~flHM;1Oh)nhirmpU}BDS2(#VXC60tWAlGdtV)V9Y~07BY*=D_@qDc zA3CQB+(3vqR6Y`iDoLieo3j8Ae?Gc>JmRn&a8G%|1<}{f;*`1>B(Pa(vFJ2;*JU|h{$S%IFEXPa#n~eJ!=%ExBbQlRtqK1l=qR_jI-kG zR%LbDqc+=(sPPflyIp`qb=ZZA6t0#}%1-j;FpI5Qmhs1IQ7?~0SZ%)aq61MSWM6~bUnc~jE%BpD=iI0wjjqVKydwN+l*Bcry{?Yw+ z_V$z#&x&$a;A=06j(bAsZ0=iX$;1CJDa{yly?eJt^{+D)XT-5t8cS`o5^#ya!76We zQGC<*;GyuqhKfrjfL+rO@W@@!3Zr~i@!-eh%^0M){{@1M37%i@oOm{)ecsn$OW>iB z^Fa6dmWV(aDNm`h7Q3IEq=LK1>2QjLZY`We){s-c6mHN|ZiMaz<|Ck<7nK9L(#uU3 zHem;WmYSNH-9l%U=_u&x#ah*gVSa<+uY(KD*CZ{}@Ddn1_y6{vlieVtkf8qHLQ4}l zX|epMj&ns%Mx+m^0GMkHdGs!U<0~4l`~hN&zq~XM3W0NNWrN|KSIE;T9Z88BTir^0 z$h%6I@qPjp7hLnecl#6Jd#{hDcd1F^6^$yC5UEUgP4+WWBJB`L$HvsSRw0JbUPZ>_ zn=8O3k!_5#VAzpQ*bc1N%REeiZ`iM)Pzej$0tvO_V9+}64LM$dVCF%aX(Rt!P zN70?y@jrATest{o&coba;nyD?Bq{8vemH(Sm5{@)41#1 z#7SEgucRM2)J!!qSva~n6Kt6+*F9AET#2XfCj{Bte75f$c~VqG2mxm?h~1-Z@=Tvx zB=#wByK=Dl7Xo+&<1fJNkxSnACymsjl98e#tMipch=Yg(mi+)x+(ru@?6q)Q(ywP+ zf;!9rGeioqTeSz@c`4}rhzvPB^wEOse+E% zpN!oB5`_LMH&r^OJ~tvX8}N74ws`|A>@aIp)jqt$!ZDbk1kcCAmDq~}(6H2%hZcwGZWsu&P7;CYQ}!!vs;n3o^AN-a(Ezx^{&s&pWcCKweIac z&fM~23wL5}(_QtOYJ|hVNJ~@H@pCF%gch4E`)^I>fmjyt`PS&3<`==EIaeP-Tx3IU z^fhV`NvIkJUqcAheJ!D2dx0vY$5){0r}b&{b=BigJQk#o+q~2e4dE7rtK@k_EQPV2ke^V~BXKe50c zjfCB-vNW!vw(U*3ab1P{CzVe~I;IT3_bceFMPv*F3KH4*IFxaj(;dRm(BcDAxq*`z|BV(4xQv zp>n2fu3h2}w}m$i@ERE@cO0XXIvKVg>%m zr3}B_Gn%RU45%r$i}A@o=UT7B{TSaK9wLg_=;vg-J5g}I>jPe8?MqXHm@7C>_fz-L zMauhVk9!Aq{F6h$y+%X?M2&fYbLw*Kg>m?IkJrXm10=m{7g1x&gEh#1PkANE;ci$i z{aNkBjW)w`TXO#%sBp>fIw`!^Q-+(aw`G|xvdLi<{&6baOj zRmYq&BkV(f!}a=R2gO7$8)>x%Wkj!|svASz6^t$$>_MgB7HK4>-yhg7$u`qoYb?(R zevFO=iap7f6nG&jA4zvyAJ6OT1$RI3Wy;1ulYBRGD&7L6d*#UE5E6M=MYsL$CnL9Z zD&LVtseTwx+Duiz`XjEFOnEXA-9`l%ASKEg!^7kw6*mQZSY@Y5PC)7#SJMO?e2lkG zqu>nqif+~GSe+fQIzv$gT@j{DEB=bahFP%LavZ8MWq^L$W~|YAknH55>-g62$Z7ZN zE${qS&u?N5E6+UgY0CyiJ!RUCk({kB%sW^uq|ArBjmDyZkh`=xB<@Nmk)ivNBb|Fr zR^$M2qrElnjJUZ3@FBx?fk1ADK}Ff=jegraz6ROnJk7Y)!59DeeZ#k*QjkxRHeM_A zuEzfe*V4(Yvn#bLDxqttU2n>%<5`2PCc3nunf8kxAE(c({8!N1chZqA^{9OMUKQi* z9LBl%`SwA8vV!vrnx^HRuo4~iI|^QPB)zgW7b+Pn{_Ohi&p3NOZg7*8?R z?dIJxAWhnZRo8Do=5Vkcj^|dvcJ#dAEDN98;A14#@do;%EDmd&{zcjVjTI_W8cGxr z*xAs@ek7II#apB@^Gch#)zP^J){_RqZjcS_n(?5nq9`Y3OpHWljV><3+s>WVXKMD*CY*6oh!2eQ%_5793;19}`Il(9xQHnyS6=cJ~W+}jj4aG)R z+PA1CTUT95S=D_nM1eo0cx${DzdHGV1{Xv5x#e0xmhto6cmI(ue5FqvzoZgCa^%Y% zURiyC>=OhM>a=#(C=*vviTiKHLr3|Le{<@JpMAsMJI!}!%zW(;xQpRi>m3`(LO-Bk za5cury98y|QS}i3Te0l1-v9u0-L}A!~7j*02|>9KTfvYe7Hm}+--6mN2!cTPV$-uQUmy&CGRA} zG3AP{orI#t8SaSu`SEE8Murvk%W#`fesY17;Esl|8zn8PivBXzXQJiusgE>hx>RxO zyuR%D#fPPMcwJ=Db5D0MQd;?T;fx{L#X5|n$YTqZiYl(fMEw)Nei}Rm< znfGhzg>2o#h5rI#jpqR7N_&6Ts*Lsc##_$g{u`?3t8@|=ucudD`~5br=OhxRvCz8M zdi0H-`nX1898Ad-Cn@t;e@#zpi?392>;UtNpw8~s!0iyD4N-!{!n7CL=Z&jWq1J6z zr@Z2y1acdtvKw05+}i*42u&3Zd{rpuaiHix*F-2N$&%I0l1!T;KrN8skj)HDj>zS} z*)Fb>=ulvcHP&5}Mxgnry1Ef)-6nPc8a9zDzC9E#D&O(EFDvEVB(9ZUKVCUp3F~u2 zzRwZ3Vd}qF&tuQ^g2*CQ)q!8xd&qdTH4c^@hyTxw&88fUnwUxAT)BkUT$a=Hz&Q&S zDRhH>8yR)X;b&gsynkDMDILlD?m)!t+25XX{dEj~5ER!PY|`Rz_(A48DT|?d!(T#C zh_SS}`PWH>Sj6t4Eq0yB_TN17>BtvL#h6_XKwRadZnXr|!}I?r{a-(Q`V$Rwg54i4 zKXlYKANJoG$#mKNi=@3oTBqBxqm#?}m^sf@Uk6LA=TuVi*wk1iQ)jb=#=_u?J>$1O z4bV6Uzoy4oW7d#}!99eRk})5lsUSIQ`2!nxNHuu6Oyw)dUlu8U{ymjb->-x2U79X? z0uJ9@i|!EU!7{%e=5XXEiDC$pS-i^dt(g*e+7+o?#{;ZYdc`un&kPOepiWw4rJc%| z+(WFC608~M*_%k{x0?fR#FGWQSKK8|SFOuSzP;zWKdV7vn;OPjZ!?d2rDiIjsLFV4 z^m$}J<|2Pqo{*p*r;m;;BTn(lIqtMnDBNjDiWI+y7#z`=;bkPJE+XwSl`DKiD52~w zyKGgol1QKadKW`{eHME7ZRkdEtM3b>6Zw_kNV+}oQH5~{h-4^@s7>hw_-al}f>43W z>BEvA;PJ2XhH>oiaQQ~9QTvc_sAuwSkM4*;{p)$M*9eO3>D#vqZX!y(Ly)cI`2vZgswwo207(cYH*9)BxXJp9(NjJU{ zzIS9|w}QC$3ZD8-UZnhZ+-xo>^)u_PBU4FDs#+d9h0heQI3M3>Kkwl=`Aeb|-)-TT zdxRLpEgfEb2T+G6CX<|l3$Vm+yk5pRUR#GnIS+$NR-Tb%d!_h>M+?Nsw7t*R2dy-E zp~96Xly57hBxCLxy^WxRqTPujl?(CPuNiRcWZ2czZSjOym?C(w4>?(4- zKFNBI^Ve2))eUE(u{^*RC!f;;OZ|oGS_^G^a0a5=E?Yu+{QEw_GtGMC;72aFq z`}gaRzw8avetc0L2gqACOHDi#qvHnFpT*}0#&%6$ul`7mS~ol^@K1rzmt$#rr&%Fw zaaIt`+0cduIeW#T)H7unMMe9^bFN=jQ~23F={VV%kfRimS)F z{SiU$M$lXZT*C0iTx5_)H<>h$d7vh{SRtx}TOFbf2*yr3G%$ZVtMQIV!fIHZ)o~p_ zpMJv+&a#GBYva7=I=}z4%|}vJEgwU+L~KfgPs@55B)O2WXn=}7%V`yN^px~NfUqcm zurIiR$PyDav<)M2#SQKov_H{7;p`~zGe7x6+fURx+d=@KPWk0I)j}_ddJWlVZwXek zSd6-m+EF`~2yl{XgqSseayDla_5dN*bE?-2-3w4)kuBf>am5aYLg?vi`xZ=j0m{xb zR>|5brWZ(3N%opx@6Qs{-nS~M4!M+AWP^`&5^yjlC~g$$h^Ol+t&ph)rVt+kCXXXB4zv)rCOSWY4sCd@&m7s%%QLC_bPCF zeXWS~A+w`v#77xpqAM=@K5lt$#lkF2$)TMa>Z2C*8U;6!FlL;6E}Cf!rr*;7#5kkk zsAlLGhRV~&WPgxOJT6N9d2a6vKnbREQ##I(=1f+9IP(2CL5uWi6a?irh#W1xP7jIb zm=f>po4b#wylit+emuGl1q|an^q{Z=y=fc*=CoveaYpZ_GZ^4;3MB{3fIYFR<8IArT7wAkcURtz2vC!iVv=&@ zJB6L2}~eKyhz zt9^Fg+S76gd<8y)cy{;6hiH%cV|W=_T+k0s0JF#msvV&lAx{Ps^X2z-aU$n#d=8er_LeO5Og7 z!6p!fgig(iyalMmkJ?0)dY@Z^Y9T|%)(!)29$)`wsP{YJi`8W_WkS8PUd~BcYY`4e zS-CIyPx&}6gxzpau3sYiY8_H`E99N)bSLZqgi>4t1vL$x=6Qhi%^_iu?;>?Cve5Fe z{22X=Dct7MY6h=LTVSZ44p~tu7%?gOw2GYM)jy`Am43a+d8kw|JCk1@3>0j=9}}mL8%#-SDKwu_qOyVd00bt=>Wl zZf^EZE-u^E*wipoHIkD#KUPzW?@SygJN|h7%cMg*{W=!Vp`QTJnlJh5KN~_uazSR5 zh=25sM4;TBuIYuQ7C(uf!Uc+G?Synb;LpIzft)UEbv+lzk*pM*#+WO2R^P#*ZhC^;n)bSTv9baxprPDB|pG|jx zO$hEcB0bjMK~}anWP4FIzmf);s0!4o`WSlNLEYY_b!}$qXl&;unz#7Xd%)T}uO9#T zP&dj-cL05 zF}muAwjWwG(BQ6RKoqPvDnEw$p7sQT_~LB*ycb#^u!cv>hwS$;Bnl#+?l{Nu3nIP+ z*idb%)lJUX!M)CJ1N!$$a%pE#mhqPgI{1;-Lej0gDz*|9OQ+F`}P$&^;_>X(P+ebz+L32H@fAV#O z0$6IpQo+yw<4%GILvW?QNh#8jh0*d+HAW|Lfp8%Em&8md`qX%wBr=5?8K` zJ%*DTg*|HWre)$1KpaRRW-$JLw)?M**PD`lsgvQ2WRnpq*R&kmYjxqc%{^1~NHt8} zOsKLb=HmXB0fAdgwAR)_T^-2Q`5yQ`!Na{xV$nsr?k`!kGkmO72q5mgx>|2t76gCD z|F$_(+!gN~?2^A+Y!V0K!+3A^E;&X%{dIfhjnR7HORsR)mdc~%rl4SkfX;hOZ=W6E z9}2v&tQ>sMJ{6POiIwItCoYx#Ng% z{QgNEZG8oSVq1il7wvy>#$;ln0V?JP#Uj!zjBU$@4yiymH8JjkUjRXN8Ds=G|3;&X zZue+1?hS!y>GX2>P2JcBE#KC1+(CfHHwWXpGP0YzR;VL)p_#q_sO^` zP6T^k1f6f>CltN&vp{Z`(#Eocd+{5Ei9#N3<%wo{kuX6j^z1*ww5=cTa>`umm)&1@ zKtUUvUc|ltuNIah03D!t=fi^4WWi5mr*6+w{fZ#Nu@=|skPc$K!dE{HJQk}Nj5!ir zBkX-|NK~fCR9iqhsCQRm2uv98lHb^;)Xp7uZwf0`NZ)79hdn{;Q7IH6qY%p%w1;8N zWbc3M9|1S8@`LL<^!nPtKCkEga!!dE!jD(S1a#Nm)0CJENT$O#3K6iVk^gYR{CEwT z^Mw7+A_H(0K@N>^7fUEAI%2(;Y`mn7UGu;QV&Lh%i`Udf+vg><=rcshi>09CTS4~< zPhRMdp1kur=XhWhtk32E5j9rOHy}zbDB_r#zYxJ98-wYcbw9O;NUD?KuWbhuyfe^L zz%hWNS`#}l4&6&~2x3_@%txsaLbC+a$DfOrTHiq@mZd3%LSXb4B!X29!bO}#sPl_n z3Nd+j6aI$6^?HOL=f5S4w*&E$2Vg4PWee^L8Ooi-NAm?{k%jXo%#Ft6k<>*tbA`A$}jn8q;4C;tel9l`Ay_-UI=mjk@nOf8t183L#b`fEOyl@P9#v;F zzVnQX#{)R^vbT8q20bvFBrNBYou@*1(NO$Gn_ouK$lHRn+?I1sA@146u#mC7HtB`b`QtGZ-x&0@_n~by$9*Hr2^M?QSGPVh%P2HvYg!1s#;RlT9vZz= zlC3uNdTQs|kvyYfK?KAB-Ae=r*$93g7Wi{f0k~fS=!1WufV6g2IH8^tTZilJ1h;!n zBkLEJG3`Ux$5J_C@zp-o#0~fHx*j@C(PnK@rY+j~M#4`JFD!1A#Y&~H#>>k_r44H` z#yE*v>Xr0dEefmOvMmYIjp{`lS0~u?d)A3Ijp7tvo(Gfk<<2AJ2TUg9Lc|0l%ttK| zV->lw9(1F-Fo0^G^-s3h#gm~m-v-ux3)(Eg>j8B5h+!-;FK2Ie2s_SRRrp0zemXne zk_Df=@JBy#Q?TLd**hVtQyV7SBWJ}g0WQGO`Y>5Sao1#Z+;H6m?f!#*RcQK8)a4{_ ztkMB>CD$6hhTzll#4W%|21bXB+>~6>?uCAO1mg@pD=NB)17|-p(&j3eK4HmvEUolD zD_0#q4;tzx*X*)6dS1+tDq*h0uLtrt!P986MbYqTuszv=L9fGC1+Ng;{-(ke58e}) zCL`Dyct9SriR-5XwOT|t?{-#HSSa_5RO@LuxvaJOtB=u|sg!G#s_s5oIV3e7tqj82 zlLX`z5ct^~3G~@=FJ>l6QqTw^tUKzshL`mUeFg6Qd>N*NnVs*2LRa;eLm$V?<_uOi z^bhcv1hxB1g4rICexXvP`5mAQGbwQ~NuDPD>R zhf=5)N5ERqcd=JU@7004Ena#`!A4}A*Q2F(iGCYeI=0G+A!+>6=HU}A6PM!^QS1!i z(`{mu1^5dnAZ-aYMF5=cofrx^v~8dGc{w!ebKI)P6=Dl!tua_Vb_eqvYx{TS8N+Eu zL$`69cjr?1>k${HWByoG8>UFbc5>50I(`b;iGq7+w7ut|dwh-f_Kt+(uHj~FeI{Nk z>;ffyT=$q$c&#pL>&SVHGZnZ8NW*)!+(|r$xTL!m2p4WqwV%?aE`gR<{|&zX0KH7f z52B4k>g;efrC~bIIlgiHe?)S708FH*YR2D^yF!kAzguFiPOOH@BiX0zWq&6lipU!f zbB=gZ`?Jd?9b&Tu1Wk9 z@n4^pUpAu0m12>l7iU@i1fRWhU$p-q9{OO0h@ABlWls+yVEak5L8|ewl~mLfVy9~p z^dtLTF)o7W^A_IgDgM8&mLW|K6e{2GeRNDDAJ`mvh3z6YDpNX#Q<4I_7vq*6&Wu23YKzAGu zmdKLiNZ5;_t8|!a?MR-r`%3OUONt4v*qaK+!H?N6wgUfOM;+_0g$FPwrkjj7io^lr^QWNW3IVopN7=l<2`UMz#jC%ZNN*aE`;;yN)SO)TNw7t~}D zbi-rXq*Usgn%BYzsJYBf?lstOHcL=BBR>|8*<5T(jfEE7Sm%zTc%5KTs&kv6Yw?f1 zQc7o9msnwtNHdO{`x?3H$3VS!}zLTL^j4O)?!0f3azaS@id((Jw?wJD*dTCZd^SY_opcDz#VF zp=F)2S*X3ofSOJdHziu1GkD6lG0qnF-}65`2DRj7Uy!4;=K`0w=hoH=DZKJzsiA6L zd}lU-HhwV@=(?)D#*=0rK}#opB!2fDt73`7oQ6MYZ87%+|AY=cW7u3|8dUSyICW#w z-&NKL-Kiwsy2g$(bAC^&+6>2O(DdT#^pHBeh%sDbn-(T4XCA3Cii?i!=>jj%x{A0? z|MyL&VhULCCdS>W0J|C_rY+B2pM4)BbR$+Y_Lq;tk&(7Xx0UeLSTd`GHbB#%WOR{r zeV5_Ge9;CyAwra*g_O8z17@|}r_*$v~!HlBeNm&a~Y z{j?^&FMBY24KGcLgS|Ret+?Ed#S4b;yuYM)O)_69UiW}#y1xrtTtV<4C@4kYg5Y)7x(sD0CKYlz-Lb}_f8cGRs9}6tk&`9-C9|Y@RjX;{mZBdf!iCvxRIm!yl?%@K`z>Q94j#b#-;L70A%d-91OR-Dm@( z{g_lAFo(>S@?7XiQse2(BG&}N1uk7AN8P0xQg2J`;_mLebp2@5LtT@V>%$;=$ra^} zxXyp{W*sP4o!@pj6X7HzQzyYp3&gKJmFkAfZNvV|fkaWnYp|Qq3$!LJ4yW{Ud%O^7 z8H==IefI;>;dejUwCO}+glF%wP-%}Z=r{zsI;{sS;S`z==+5K=<+gZdo>L)FuzJbe z_>+qcw1y6&wZVlEMU;C#c_|mL7aziSI`mL0FER5YGhS#mjg?CMs z*^tPy5f&ztESAQ-25r9mwVHY@&1(&x=8PKTbc%#4!6ji-;my2HPSTRmOq6pLzqwZU z?-P@O6f~y-HM_vf*Mlz_xU^;1>y5~Ois7GZ?|ET&gbZjR>6Rwom}}~Lg|hUV=RkSg zyPavrI?@|CSdsEsjoPU|aBJd{D8hJpMwC??!Kx5;&!8 zm>9#>+g5)$VXx2BPt{s>jFb_JaXM5V2I?;Al;YfdvZ)Veu)_+zTN$M zo)v)yAz@nz^+i7q_}6SldXYkUnB;S@xuCgSxUglW%Wz1>6MktRz4YbBlggUXv&Z+2 z8ZuRf0jCn|KkrI6JTM6`&g0>4 zTFz77Yr(BmFyG0ZTS2>6!Up7BxNE|k2Z+!sZWTv9y@JrlARqQiQwloVITJD|7VrHw zH0=>gcmX&E8a|B~+&FHN5fc~Ro_jlL7g$w0V=Qza$Uag3nQ*$G{Jk2J<1h_K4v%;$ z&Gx;a&KNh_fJgmj9n$ejKjBh<;U^)4WVI0FHHGcV5IkI>{x0n-(%WmC@|YG5F(7Jw zYt-{Z5{x~mXTc(Az!eckJ4QXlVJf_hu-tDkoKR?+3ByAnpbpjXj$Bi-%aTD)!->rSNMJ?A!G*A%6$-(-Aw&jR#c z`|erj^63R=uRCz&CT(S*_}8(ra25VcUvW~MFixpIC0&a376x5-XRsZpN+0^?nFDvO zKbaAU0_LX40_#&p`Y048(NU&NTJ#tJlTF^xygEiE{MWM=#K4dBE>h5Q#d%3xFM?s( zC(>Nh9(wf*cCP;9WSI0Pch{8o=EU-;lluoe&&`HQH%Z|&_OImM5??)B@x8VkF>QJ? zGw`?eGY`Q!o{7He_CXuyFR$cPHTtG?@pyLr#J=26eUQi{U^}{N1GAxQ?1J8tE03-B zs^!`6kav;RIa1;d(o)i4x6q#<3Qu4SLyp1gZJwhW$574bE(g$vy# z1iW|o?~s}q5W?>!6iEXVy6^*c+aj&3+0{od!yG(+qrf&^da|d`7H9e*UF$PVni$C233C;;@BIrBG+hctmvGu|hd1bag@`pGN z7kVkXF=hzKeCtivyItK^u%V(=sp}X@GaC2STwlwplfps|ti@n& zs^5lJE$$xy{UHA@z4{HiSpqZlL+h5GFWCqoQzrt0U`oJjQ7rYID%k)yn;w{qM8w=p z7Vz|wVA@|B!jF?!P6e#p1gRQD_DHENzDRNX6zlWf(Li`G!%x^p8mi74GN?s>mD12& zuNW{_9luD9l80E9lQVvOGj=#WPK1rH&*wDNtB!%O#^Q6*kVIn#FZ0;sB}K5+>L*P5 z^yn+=U%3_jE6dAFrN~gw465rzgIOovVEOmRv>&MQVe)B|HN~s4BF4V>rg*&$KO#8a zUp?{qp~v6-`D3Hb?buAi^S>KEglb4+2!4vK2c&L)ycjTxO>Xq1b5gLq}eK-J3YgMnPbvoTi@rVeBzftL~}P^k6Ll97Pd6;fY?ZP z%EjQu)GqY*a{9Czxb%mqK_mFOhPrqGcOy;BLGcluRj#!xR*@Ao z+CDkRx%juiL_quaszsST@lO=y99DRkZ{9q+`F&th3P!s+>fa%^dnOxy;#AYUe<|#@ z&|zXlwsuv|1S_v=dWr3L_U)6lkzboqvFH#06_f2gQazSd>fgeWi_ zn8vwRet*6@DWX#C8MHihp2~o}m?svC40G}9DTH#SVaPW zY4}9Nj+wco-q8xBoPfoA_I$h*Lhk7-cD=&UmkPuER>L~qvZF!T@gScY{1RuDFeo)pRx@1w)oznz!BoAheRs7oIfyJs z#%$;7D5XjU=^=`_cNVxoI)Cql${H{}R|&Zgg4ROcGu}!21MqJS-j-%pI=M%yX4WIp7#2D-l#!^z5KSKfN+F0% zr}Mz^7}LyZ!$q!{HRd&NX<(My{-m>DLk!-K#wV#snQp#LBD%(=0YHJ}6c$k6qcT4XPin8tkxU{DM^5OFD%luv`&{iOPC zj36&D3q6>I%zdy&oan}MY|^v7IW<*U(ja+1U$Ffb2T77o=#7i7XqZ^|=Y@R6EFl*& zc}#Ja&@mGagf~XC>E+WLQA~j>XCy#KSQj(EAiJ3J6tJ=qeAtN16X!Nc_Ys$>?}Jh zmRyBk)od2gJ)j&Rt=mF+Rk^Eq zS?=O5d(lgfBNVK_5>;ghhwnHXV99rZCV^YYcscP|J`iHjDI1rBQ$>s z+rKTwOuqX2+q*sxYs$kr0-$%17n#2eR(@?9*H3wvMZs0yZsZ!VgPtk8e|2a35rGm> z+{7a(=SL#CUJD>CE@sN13UVhJUe24lwL;<7zXg`gu6S~O8hKbL#VQJKU2yen=_LrS z)W_oKjzoLXI74m$FnNRxm6h==OBb9}>{AM2Ub6u29jz>D#JQ4e)--)HZl%mdJk#-M zt+0NQ+Uq<*a6QW-X2-Xa!1lIr{sr2(hzK%rNmeH0vfqS&;=rWD?0)>QF`K`%;<^C2`~+1` z0pemxuT2A@MpE_nZ4M<=O!Dp2$)?ScyNRc$*$OO8^&wsa2(S1wEf2%sSUQ@FSNzQ}>Kmn)mgn}nb zRw~S|u7|wRK6wqXXFoK@pz!3f!@8B>IA4itQ>w-CUWC~gp{mFAhZCD$kW!cr8=PQn zBs}EaE%jl+u42S4pt;0y`do2HmWi?>1SrdIO*#^)Qg}4~Z9Ik=BtbN7-D}W9d)?zkkf2!s zWJ82W=?QwpfE#3?shJ=&>!Mp;CZObTSL=?f$=wQqQahJurmtR(G-M>ls2S>S4>ssJ zFLn#x+97$YA#Z|nrC+F;5{ss>a!6cWyTw20MwF`Az5kds)3T^a$aU*3hePiDd5>Jn zv2DdtLh(&9_}IX0xqTpc(Ae10VQgt~(0LlIT9rlPSS!@H1giO6+BCDcdS{WFRdSR2@ENsKkk8ZP ztXlZYiE&9u$*(^SpZ6Qzy~!kloQB9NUK!dBg@w?3)&X0`-_wN?@)P{7Xw@b~<|nT2 z>528}oS1Gl1=rMvf`gRoRlg@g*-R2nE)s=w2#(>0ZFl~+7UcRW9_A=VTXlbWZPkLG zV{}IuP28_NPoRe^T-M)>5&>~s(FKOKeNt$BLC9^#6$ z#`B;*hq~n}b)>HqJrF3&7-kx}0~%{K&bi@beqpJaVJAxby%*&(G4w-- zEIq@RPX9rdMF_1{UflgsG&4>8>^}2<*L|yRLGeO7d1I&E;MG&VnJd5**8LxlwPeG* zUI3~95-Y2t?~pjPWyoDzDTHAX8h4S;_wmuR>f>JyX%2(P*0z+`^1l6wheGi*5+9A8 zi-P<9lwJKw%4rL-xD`)gWul?`_A4JXr2+bC--zEX(DBR9(MuB{yJlkwK*GkQ!sl&s zO{6C|f)mhuSxOZB?u{;$6yvE4Gg?j9ciDg)8v57av%A~w6NUiH$Dl1r=KIzVNRJ()PA|yzrAq_Ld@)feXK=o2Ml5OT`p>R#m+7T1e4wC4yT4bZ zyuzWcOFK)$-(vF`344`CT_`s8^dh5M70s9LH&N&?jAp=}Kj6d#s44th$ss6z`pZ^T z+k=AmVWzoFmDPGHm#(-KxjLM=LJjmjt}}m}|E=G%ms5NQbA1i*6PzE~FgyG*+1fY! zx?f}IdVt5J@_B$29JSHQZ|H_TArPkV1G5+0zxEhXq@#>i=yuN~Q_B5b`p0Wmo>u-1 zhuCa-WgGCe_fPmthKky-s<}_0)-6Oz&-j%K>`v&C8||X`K4-m?!Cmyx*M@HK1_TB% zELq4vjnNouVRT-fTSM4?T~Dl(yl0t6gBT48iYc8Tt9I54Vq}wJhU7?OHmQ<5Bj}J! z7uZ)?G+a^e=HS)>buO0v1NY8PvFOZSdmX}H+27z6+Ww>YR?$Qx=RDj&gV@Ll{>Ms? zL7FIru#=I_Rn$|L5p-1t`Z7Y;ZAt5(PY&%>QN9Ncf9CsmI@>;1?TKcTo#ngN?=r=j zcy

KQe!N>`!Eaad{O?W?z=r2LF>zf|UErfhu9enOS13X(}93_TdDkVCVOqz-Mf6T0Q|LtnF{A2 z-hFQci4UB3i?o%DjPSYT79qPZU6~H*DK$H~V^J!=^!*DdTvZ(Glhezbok`SvgvrUB z&|?OoY`Fx3H#uQ!Oslg=x7CD>2jk4KnBlaErKy<%TA$Zgqn@$>HT1>!e{0=tVirRe z1CA=^Z|$mjzPSCq0x_t8+K!6>2Z=%YAYT1BR!M&Bv>z!MA$ide0pr5g40Rc{0a#H? z+v>1-eyfLPPb4-xuN%|G2~&K};e5y#H@m?wQe;=vy>GM8E(`KGTz*lHw-o`!><44W zUlDYK$`C6tKrQB;V}Z9qy-O}BQS)MM=hC1c(DZtFSi zRpd)DOOZL2+xy_eA9ilN)ar7ug&z=U$%fsK^nn7Zd$)LicPmVLIV^)f!Qrz_?3 zv7ZC!NC_j9dB>L3EEoO{M`z*JWZ%W%jcyR6ySoIWgn_iANJ%TwN|)4V5ClX@N|2Ts zB@H7)N?Jl1MoRa9vAy^6{sVkAcHh4^=X@&EVN94r<3)xjlk;*ObcOIJ|dFz+xH2d^5_c2f^ zFXpCEtSAUAh1X<)JQcs?Gc-EL=8oXB4KIMhvqf-!?R)ui?r`mbl#E;1#9v9->LEb-?E?{#RI(fY)Lo}>E$YCaUBbW^1!ChI)oTg59b z%XOlF3NJ3D5({Njxb0445!zQ9uRzSsh=!X(YTe1Q+I}kD(HgAaqW&?4Ccej1isZ;cXwI9teg`L#&|G}K zj`zK7Tv3`O2sf6py(;Gq7DXBr(7(;y9*{-DWn1vB!c<+;Y{WJzekhfsaHqpf{EbFuKk#^uYJ@*d zyvVHPp%a=ArUzBCS%5@$KMz_7Q)6|frU>kk`UKqgP+4c6CsESlgm)7ftyMm{W0ZNN zLkIt2Ig^L5i92cbMjhvzD~4X>XKA+FmpeJ_j-Adee-(~`1C9sV_Ip|5nWC+?hS@VT z^I)^TjiduA3zP=WM8Z_rMYms`?>)IOXXj?ajbJC02Zjd~G2Z@(8?kr&={H^TOql(z z!MN~{fF`1g1f!X!$tHaxGxt83kM3N72PpDAgo4p;-$X@V)KgK3l6ymz^j=)QRpS9@5tmIPy`a$+=0aP2T2mD+lhq!ohDP^kM8%Jt+RRNQ zX}g6mNhn&zSHwJ+=u1EGN`h9oq-p{U7z34tjqWERZLV{r9tUJJ#NBJz&!k+dqdPuC zDhz59!nGxVe*p(C>YMpZ5^=ldrSi-?tO?14QLB_*yOYMyx{JJ1y{xq?hL>e~qXYw~ z(NDkQM$%Uy?_@z?1fcdxNppn5Y|5iSPsE-fT_kYP`PfSU@^TJSZl0|caPGyy;l_D< z*!=k<-)OJjoxJ83z$M;g!uZp`eyVYyXr=tW1^%QnUK_Abp#h~M^3!c0J)a_pa2yE- z_f4nU+p*pH1st>qctHGVpl3t46NVF;-osR*j)Nr$xJm|w2F{}Z1WG556`pOLxKPjz z{N){p*+Mv z^Bl$k9z8V9rpnLeK;x=B5TN?VRiI%HeppPI(K6!oniykyHMe)*r zqt+Wmm3Pk-PW^RK&SZtzPE!0SqwX@RZ$D8QaYfKk0$*Bo9JDDx!!(r{AW zz}#RGE%)@uvNU1w(DUN)<9mNUznUUOjQ60#I=e22jwM+mPe&DGzU0=d3t}?G{@B{e zs`R1Jk1~zgvf^9vhZJR6w2vmKq69~=4*KI$Z&YTDYwurZ5J+NMSmm-d#Y3&qs2I*` z^6tmTLxN}cO}K0uQd(qmwt`-e?cmhLkVK(T9%sxb0H#)DSlYmv-=lKY1?iH=+b>AQ zx{$*Kw2!N=!C-Sj<{17A-JVb3BV(tqla1yVmEzwDYnh;U_^7%QD0Ijr_;`EZWb&5G zh@2Hy*a)mo`VtiJMpx`v;aZkbExqPG?>E-dspYED*EY8y8hW#z?jYZ>#$p3OY(;Ng zuSsN)P=)<^y3&Ue775A%HP+J;P?Gb}EddYXqUJfIYBqWGVLF1`_$;mHJ|A;Jg<5L@ z;P%QvucGo05Ue(7wq6^9`XD}S^=i69Mp%X*_CYt6?Et<p?0|LbP*_ z?I-=p^x5Js_i#~Kc4m*P@)H-cyvHR4A8b8fzWdO3{8SisBMMW!8pG$m|8jVtZs7RV zHz3H(xQ>sD;@J)P3t4m*gWv!}bX4D|uAsPJD-B-0ic9;bk=1gzc~xJOI5iTqcZ~O0 zYJX+`cnfy=&Td>qyO4!{0SMv(FrXPKDjESAeMPMi(PY64-m0P^dAdvUYKsX2JEZ(o za@W7^>5NN_92!5x>`cQD6|vS~EHz3xTgZX+N*1!wEy{IKKIeIwFoFjl)+x>D?46L5 zJznB4d*Y!l4xgolv24?n&MOT$K=VrFH8tvTd9$|(xP$#55cL~yIS;XtIY5Drd?+vg z$swM<>#-KkgivQawe!Y5_+=d5`3L8AP%b|mCD_wjqh2^L*y^Ng#f}n z(ss1=#D2`GeR)W~G3ZVZD=L?mtz`dpp<^KCNlXW>(rA>_`_1vcO3(~>5j<7Vkx#O` zRjH+F4zrDC;Y2v{_#Ib1+DLua>H6)S)H9?bF$KDV+NcrIxgOn`zveop5O<@SSI(el zu67%=|Eqf@;e@r`uBpF;AcPjUPHhf~mw|2@NsvFUWvX^Hyh>7*f0t0)yBBd0fU;23 zDx9=RE?dLtm94KL_iCSEYhVV3$Q}(l+G7!5Qyky`zh5=5mn9OciB7v1uzJzvBF6K9 z!DsT$$Fw{5=Ww%}+2?=7C<7aby4ofu?!nqf^84tqASpHMpEYEAx_lmu4xdKQ@%T#w zF8sS9(#yBhk(PLLo7Qd|^bJYNqnmz@ODHDTax7juI`E{ve6A^L`xx9mh$S`*v)kqM zC5YiT^G1z-rRcR^{DOcYeoLRg$-4+7=+vs(cn4T>k5qf%4>|7N|6X{3S2}Y$p%?7n z_99-VEqfP(r4dvjuo<4R7nPaTzvMRGHZV_le6Zr@(LyJqcBQ> z485VTfX~CQR-1@WU!rM{-}?Bo#@0SBIMOw1 zstwqfOhPq9xu)NW6}SDvTNtKHgDgVErJJc-GPVR{H=I$ z%&P7OgkZbs%z7GU@t7i~tMRp~+wspEOyEOlxFl`*W#4*rc}!V6+GNJ!qu-13Z3C;- zrju39?Os^f+&7Vp7s>k<37;9~Qq?n4*jSYFC#n>vu3DcfYxAnyjqjYx4S^eZ#J!xD6{yKSfh0p1GU$`+GfrrIm!4l9D+;zP1~iQl~^0 z4ISGM>I>7}es4tG=U4~vC1ol&2%$7^eM@eVYe>p1-4=BVwN^R8v4M>x=1b;VB!9~i z%M5NUJbDl(Oz8Li2T;{E{%#j=)Mq?k0S$4PV*QHE!0ny{)Nui|j%I;a1b9vgZddNJ z&kva}Dit9u>k|wICNG1NFbD6oPk!vP_M%Aho}C{9j99g{X;e(pB;-2pCDMO#{FN7) zkrLf*gkOCS_jPsCFt&y86(|DTZ3WU$UlyCPI=R7~?OJFf?*7cpn(F#KGIEZbKaB)j z8}X=x24n)WRv53qUCRY^cmMoE98->o0LSR6El%NeNj?dK>sPAx0h# z>=@hTr-GC+xCKpXa{Whyn``w)?Pv1%3DXQ23bJ7}H6p-BMd;H~X1`gPVH{g4e%(JF zOnLb~Sgg#kiJR!JZYQh%OeLj-H~fn6JpAMGGq@(g8+G$(BXjl1zOJRuVyb2UR@@9} zEK4=dXg*MBhYg>OliSh{yMB>E;p8=VHpkeo8YXn^KMg5WZhYUH_$H+< zwS*fDf%XzGYbQCGuTNygI5_b%ZWoUSr#e2Y7lgA2nmy9m15VG;7@ z{gkFN1hCv(1ItZq8(DY&v*jtC;J|7VG&AYMaY}VX26fyc^+oQ{)bSTzUX%~(Hc(H> zseZ7D!t@og>}H9ybSiq`x7>#0r-N&60c4uZn6CpU?HMUs^k)uGhPyiE8jcxNV_d1% zd6MLiaLJqRV9P4^UQ!kUe4s^t<`Q{$KGQ%}yLy|-p9?H+l!Y86au$wG$k`4q&_S=n zGqhC1_E5n@TPuv))Uts&7N~d$QEXC@9ET1QjuTuppuIr!#EqWDS7n697*yb3JibIk zB8Y9flH=ahn#5YWKbl7L>^p53X<~xZrxPfw_H%dkaL!i>FV2GBjXXbV`S>3C4KIkn ziRS>Y0Gr^b{xs3}sZCQTXBTuNHQ?2$ixD{|1d@eT;6hogKO5P!k*n3_Xy5g>QZC*b z^b{YMr5s%-FDcF<#G~nud?LckS+u#KTk@Qmod2*3o{io#Q3nD#O8`79M>^Ln%}`J& z?F(-A*!|9H(gw$IbeN7bV{Qh{Hf_nEdSeh>`PJq>un*LYpY*eBdw4Wdd*SEN18KBu zb(;lp9~g{!KQgxt90{UmAy%>f9uyU5AWlBRSE=c5d!gs|#ZeH5rsKXnFgi-yZd8HY zz8YaUi{A=pKI}VH!rAbFq#!Y9=C(mqvVlN`093r=n?z;S>b2Dls9z0PjbER^FJ6NV zI7n4N8B_Q6vr)1{IGYhlq!(AGuV_EV?9E#W^0}Wps`Eyb83&yv?@7%oSX(9m2_{oT z>v)*;HQRR0u|aRXH%h@*6)R%WvKaaykvTb48FRPZMJ*GW9N^YKqm&&O7hwQWKHiVS z_S7)GrNEL-JnKF5yk-Pxir5Q3B>J)HJ7>jO$Hbpb(|yAyi)B0dNjKItJrZWSZi#&!5-T_0A98_-~hO&C9g9*ib?jzL)aD~dlLYg3epiB@jK zC+^vSb4v&~^BA`CF5}y%-{i{k+$K}wYjxpG(>7z0F#a=}3EqI@#Kb#W9{Dw59AjK1 ze0tDFeE^HA`1hdhvoesf6ui`jZ)I4tuuZf_Kg6kDg|gjzIPeh;FA#O|OM)(RzeGGm z_VpOY-CPuUquk$L2?yWJ@=hL|v71XXtubND$4;-`r63?_uST3#(g_*biFwsMXN&(G z@e<#skMVUCSbjrc+-QIGOZsqAE?YqHK_!V4qo%dQn ze;Z8{9_7&Q^ShPa_-I!SPDl*Aj)w*PJ-qX-zAfiW?(gDlWq;mJ%c0+tCJf~stK z@2XPqP7ap)T28{=JwQ8L2NU3Q)<`EE7D|Npl#nYoP>D3pIfL1fkouo~tSuV~f!-8x zy-Z}rKlxAn-qh68wKD|xb06Y&x0xt$N-GJOk}EC6M+9$XPk$juEygT^(`73EUuTnU z^4(y>+=`-aHtx#HS@GQMNiB{0*1lIXn|f&_=2hQ#zuc7YCq&$(y3SztyPzNYSS^5w zZt-9+Ph;yhpYsSl-Q>?{LvgwVK#j=%2$3xhi9vt)w6JV0CW#)-a<-`e^>ey_x_=+oLz zu8umF7Oj1MDndT$7gsdQ4_es`r@Hxp=W8;Jfh6k0v87*!cNe<@(#gVXxBEn&mx>^k z^ZqgDsXp-T@nyS^w2a=Ln;c znd!U7$-YOAl+Zp2wYUpzK8pB)!Oe-xq`kxVe<$tE*)zDrD3G0Ds}4gnmQ zaWWy8F3`a3Z+13=8!;+y#V%=OmqYg;u7$W%6H_0}T>GmRlRz4Z3NiQfPl8)(Cc$r+ zNCAK}VM`(14qGz41fK7YALWd)cy~z^J*%ZAuchJPO&`x6_I?u!)p1%drGJ6p4hK-IzZ7 zg2+F1MePYg-m9YCIiFu)A{oZn18L7&e@JD#b}1Tq~r?2^(KBP zMFzWGdp3o-FAgDXJaP0OQPM*ZgDEy`T`{MhXgMS3xeT47`tIj2j#}f&2w>m}rU*QK?l!b zie0rbO9GN^P=H-?@~;xc!IEtEGwwk-3^oAF6B`#jm=?f{%rR1tKOijc4}E1fmz;stS>S#=Uyumk4ET~U9RK?l7#=zJ zJmL}~eN$I*+jkHMdh#BCjh_cU+UsyPCiL;qIT5_S!1M_$Q;^%;bh~MdP@x;N#M2Su zu|Q-S-D*;Vx7~3899@JiVo4cG3A%SDi`unQ7PxxsQ<75B*-_CtTli|aGZwadpTb73 zV}w!UaqXwTnVK5BBTm(yjz!}qvdi3VJiVaZ$WBKz{ncAm3p0%s-fa#5xn$y)xI-^8 zy+}Y+Q;9YEHSHn|Z-zeapjyccl6WLD$-eaeA!0UmV|Mn$PJ3eJ!R<7Jqs52u!w?0} zjGc-qAsrJfvu(UJu#y#TNEEF)DEeY{8qq178UmCPoxdJSsI>_dK4&G~&tN?(3e3RhsfL9x$3OaS|4TU09L#Zw*!V)0SsfJ8a4Yd z@BMh~!-2U$6#OIWn(djPn}pRAPItBraH_1OUc2#-$>lLz)BHA%F zCO-hr@J5kW{KPO){TmaQCZa&U9kW^f6Mv3AC8!DBR>48|(#aQsIn}pO=zHa6Kykwr z2B9RBsekrDIZmaA5|~mCQuRe8ML|`5n$~WQx7^&2pZ02u%!KsytmjnX@F|Byd{y`< zvQ%db{%K_;CY4!%S!QD*EJNLd8YP@ew^xA+x7IylBv)8Y0YN1>#Pg z{@vy3ZecFTZK7vz$&`Eq1_ms4PAUcR8q0gRi@ngEic8??M!w$P?>b>7jyESf0|ao3 zO52`w{vv!!X+VF4AXmjgm(7+4fusL0&8LV}iysu|K4Smf3n%NdQyln9*~;u(vFdjW zq@~+=SEFBci~3etgR*hJL~T8Hj+BRpw~oXS>jX<88rx6>IugGwOyfj;cul3JF>cg;Y_mHVh4UTSP7dYdCG zW;R-jbz^N&%T$KBSMF%9Ax-boU^k*4;H~p)Ip~w5k#6$CzmpBu#o_?7hWcv?C$VlT zyAJOjG0A-Cwwu?=vGXw)IMzC6eX%Fn!u$wR6T4~|C5XA>sdr0`Pw|KsCIR(g4>RaA z_Ps%`7JaS?%*%`Ge|@ix>7%56BmVX7x5S$^P7jio-;<4jX-mNqa{nbye86^q`Dn~G zSjSi(VP~5h_5r)d&BuY8(YBluPOC7^?K(T~=k6p~r9y0K_*7KYqvv;4L4H6GxXZ7v z$ZR%CEjJ2IQytMBDp{C9vF+=Eyc*dThrV<5ug#~L=juK_Uz@|9+Zf?|;-u|>Pfa*@ zsSb*{@kIgI8lF#or7Uda->|@WS1ls)70%>HGA*QBhg^UvUQcx6rlhStG5>6b{4%U^|>AXBlsnI2ymyGGh~-#@-Clh4878_f^Ztj0$k zvd_#n@R*&@)t^B9jviTFt+{GG5WP-0@gHC;z%P8?UYj3M@i*1n)(%fuDH z4klW>G*@pdyQeUt7{T2~l1MFN`^Kdz=-+Mw)26irBC`RciKEo2(*JILk6`1812wx&7VcL{y}f}h_P&)QF8R4+SmQ@yj7tSV-;9u%9%jsisy=5 zTIp#$IOgc}&IX&ho=QvbYZ6Gd(Ko%sh$uLBi;UXES&+l}@PKuUv~{GCF|!Y)<;ueP zMOIsh=S8qn2AY|x^6FWn5E$mxy+0!DS9ULZfAsGM*MSJ6oMn|MpA)>T#|9q${R~0J zNxSD>`pa{z)Y#+>%3Qo#^;IdO z{8?UOz;a}5u1pk}bS~ z5{f_dGNq4AM|CzaYZ~r7p#lT>CMc;pleLazj@CKqiXT%67VV#rSEKrCw>v9pYF605 z@PUUhX=GVj51I3^ed4ANn4JT>zuvC~d;Dr_YMZ6!2!vW-f=zgyrr`y zs-=7udw;wsLq<<69H;cR7n7$yw_e!pXs7Zh0YnJ(=O)Dbd-V^08%r<`%9|PD3HTAo zSKg;;AXDDDs>?9!i?sas(Ommz_x$D&;DHO>p0#ivt)70n=d-oMFw7sQzNZf;>RtDa zU;M|DP_%BJqGw{B6HofnB2v_W=f?LsVM9`2U^N;J+`OaedX5TCpL(O_+};8mAI$q8 z_KiOEZszKkb_bcPYFFtLa|hUns0I&qV?eePxkzXy{dmaKpTi7~dOE2boC(nmCohFo zag^rdg5>V%Vvz0v&BOZq^-O$|jX3eT!YIrVHRDNV`;INZG+~E0qw8D(w2(Vw|9Yca z63E`OZ*7r&h57*EFHRBU9Gdwd0Iw+#Mv$I=P`H zh@gR{Mt$^Ta>5Lm3S8S01RE}AQ;x~lQl$?&9*-tyuekJljNWg5mlT}>Vy0y=NKWu4 zXVZ=~bCCZGTES+bs-8YZ?V+iWOUQWO8=;JKktvTRnM}Ja|`- zgxqt*Ghy(~kwt9&0kzSpN=g{m>WhQFHy4j==Amgg!mnCrII!O7P(Ap%=C4`3xN`3* zxq>CG&EcS~`bf>x`WuoqE$ihRIf&aA^XSP3`amPwBeKX#L@^PvjV^5c z(qDBQ==7fZ9_Tkg#0fsQeiCvlhkAQV;llxTPS|`q%Dx^f60y9aG4hkR(L z$r3QNH;{)!owtDXr)$(?!|MaO`MC*Bw>bq+yk;C+I`?3s(44j#i^rN2RwFK2P%{Yw zTq;0U)S&yo{wvUEEFC_@2m%9C*wI_aoMl-w!%^s7NG^1r%86&(zv>l^rmUJK&>M?8)b?kAAhCBNQE1D@#-WB8n;QGxaNvG9@nf?XDX zW}f`XH#T2c!3Jnfd!az)JQ#EI_siUT5`ivs|q9_Tzn*vRsz(|G`q*t(8$FeA12u8A>k|3RrfQTCG+Ri!SvA34P(?v zP1Yb@QJe>mf60h~+@P0Nj+ijvVI1JMF4rxmImwhQr-w5xS~RLypDcdbEL0Q071{94 zLMtx!ysU2mQ%(8T$4y{5G^@)J@eS8CN4~%BP`W0+e%{WC1m_2%-D{TOG$&}#b}jpI zj21!njS(u~AOY}SXG)4R{Irv@duyuG*M>hnWXwJ`GB%ZcfX=;xnVOi?1lgxHGXMuIVmkCyXVPs69`3&{*Hggg8) zHRSc;CxrW2*|lPVjp8lkQhF}JhP<<$#KA6>`SO*OKsj`IU6 z+VQcqbrZObf)L7K7|LTHVhXqWBHT?rViIE+U;Jfjn6#rY6*wqD1L(s4sPDeX^8Rw? z?h(({8j%m*&UW3dOs)rZJgVU&kXWBx=`{fBSfA8j%>z(Fb7E9cDkYKk)eesn5w6Q| zZCrF7j(ta}nQR+Jb20;v821C~;3TL9NA&UMA&mQYS7iC{DJx?r-CH_gf}k zQErZl_k1g#rW7ddRvSeadYcIi=YjW_U>yI>R<=xp&2w!3 zQ3B&^nw+%KHL!a$XqxNFAT`01JYU9mvO7Uhl&KzMQCKr}7qZ z+^m*phO5xmCqIDUO!NpN5meE)?bO4Fhk@pN>&_v?*Rh&$Z<(lQ-sD`*L{oshq z?`mZDZq!zQ2K&wRe7Jm$+WTbw@zh~5<*!ebWyW93{3}J&Yk^jUC4d0|N!}Z04W{;o zcj7$%k0%08K)Z>cm}kiOx<41~XAmo4frjx~$Djw>L}2Fqb@J%->pNy#OdTx$HwF;k zosS-S>eD^OWD33)a>VL}{-(7K00S1I;Ga9^)!zn~@UiPzC4jDZ3j?kCjgzUbS84$|J*+* zV7UcqPXl46oJiNCen@4T8n(R8fgHJDIA9SQ^!*(4#8FH91Q-IYdD23on7mkbB7MHV zf%%s*cX~WW%SlP}c^k-dLTK6`KU+=IO0*epnFjqR3y`2;Y`?|Tichq6vrkLVGk^Zb zEb6!Zf*jm-BHH$A5V6CLkmKrqDM7vgdvZg;D(xq|#I&i}YvTL-13h7chWGv@eHT!d z&YWT#m)B%;$mr}$1auuq5ejLg1SebjBw=hEJK~R56{v=kaMs(_Cj?wHk*PPUhxC%Y z@Stk*RfP@j^%N<*P)SG91vx6*ew_L0Sl&OXCp#*x;^J?C+L7Lye+1@mIM2S)py`*B z=7F>3d)A#@#lDZ*xz#8}2dLn;)zALP;!kq{PA`PFcb};*g+SVE>Q!bJa(q z0xgmZA7rM`vPewN zUW~rPO3$UY;_%GXbwK)wKR&1I_0Z#FJLStT_KfDK*y{TMENiA`J4Z33`_C;b_W3T8 zUm2tCu7SmF?!zNj)HLI;qTi?<<_qBZd~41mQLVN)Pc)&IRNfi+l1andD5#kl7%{-c z6?xrf4o{A`XukX9fd*|NG0wA#1T&Aj8OtJzT;X6M)SC*=KJ*_g)*JyW>3 zBO-!$N^$;sk#p7&V@v!+9B~dgwoWWYCPwAABKNo$&rVvyvkV2GMoT`PE88F>h|XBNsRrSQ!tc8W(~L{yey$Y{65=r7VAca>E>z``96Hn%S8pMM z2{TKU>yIcxUNfFQmwL%STCIdTGa-wKj2ikxtXf+TiC|ihWtss zt(_Ck8pd2$Sm!1{expFvXJu`g=hw4|F}#+_CfO{bP>sY2hg8xO3^%zoLOGduT0LN5 zssk+bL+V+jf5AN?jdH;5f-B6bv`LxX1ii>)uMZOPF0J!BH19y)?(4@sWj`XC@z4A` z3UFgeOB!Utet*|64Vp|(IqSv-(>Ud3JXYN8O?)Bfxd~(uM6DO2U@IpSESLc93iXdi zL#Ji%92z9Oob8LysFr_=%x;#dT(<9DtaEigi}6q`{e9GlwRAr`fE@kkzkYhRcJ=uL z#*C}~lM>A*v;Y@V zRm&bIEa|>L%){G&b+|dRs@EBaf6bXZE(#2=PJ$2$%}hA{N3WGWvChO_4e=yZe7Wk7 z0&+awk$54<78Egha1E~m!I8%nAm{tH!rpVWQrtB})TG6SBYZ7nVZgXBW$YBX(=FI7 z7{n-DrQ)j#z_but$YdK8Sjd-PjQjc19~C_r3Q-`oIo2@RpSiN$VgM_;T|huUvF;XI z#+>V!1-FBo)a$hbDQjvgVUw_p?!MV)UAK1Xrt8~%3}T8KhK#H4vsv4`QH~+CbdG4m z10gro=i(ON-4?B=!=Erc9y5 zNsn{8nqGzy;L(>s%;L3K14*5is{^aOy}9(&s<~0keeU%-AU%g6GOUMxZQ9nhC@xw& ze>$;d&%roXq1999JR~}cE2?kZ5q+8reKI~{vlp^ue&bI}0Is!t3D&tHPoZ8TtH-M1 zG!%O4Yw0s50jTF? z(QL|FTY5fk>K~6zQKFakGfkZ1O!lWf;;-g3upC#v-Ah7>(lnhw(M8nA(?}Sb)&Q=* zfRFdKYRA~4J9pMXi@`Y)<*;E~Hj`z;D3@+^npyth`?-B#&8gQw^2TrT&hao`5J$wS z?ILC$2Dj#a?^Ba-(L7)hV@p+@RP_ee>{-J8QO5vNR~A{}TLv4}J(ZHOGLf)?FkI&w zuk*^^m-0vNx16A--RCVEDStguY~;-PWzm->emh7;ZmZ%U9&ly7o8`qBUPoPFYe9Wa zPH={?^sB3gbYxG6=r@JRp5yag;~9`>qHAbm@u6pS1)EaY_e2q4jV859L0P9+^N&ac zBua)gn_;e?sfLWju?spqh0bqZk6~ol>4j`rUNuV-fCnS(aX}W~uYv!*=WLt?*s+^{ zj9=tQVD-Mto%&=$t7Jgn_0BnuG*`G>F4fu6=Z*yBIh#W;2izTj;-N{-HZn7`fG#zR zt$N-!h7l6bN-rwxEbs+q{x1+yv5rhQ4xtxz-i(6g4nB0o02E69D@xYS#d>c(HMDLG zLZ^z!7-?0Ww1-<(woRd#k!a(;HrjU>d1s7(iA5tummSAen@_M?YR*yuUQ~owo#hbh zZYpO_(L*e)vwXbR%ef?=AmMteJma*5T)kb;DBonl#Jik5Cy&j+F_CqNeoQz|AT9E~ z2zOj$Wy0!ND}1tc;9|KXv1NBf)=9_V!Aa1!RL1^+H!k=kx?a9X=&s6681k;Il}XHt z%aWByI%FE|rGB9Ze@j?F66pDpkCuUP?psY)`1XQv+%ZOt5?y$I4VK2q=^i5mwA7}P zOH09a#>O+IKo}}9U10uL(YUpO9yhB`ufF00yDtCECmFutQW`*!f zOs)l39m7$yxN%zRvrV|islTvIG{6TR#bNW}lnUT3FzKJ573 z@v(`2@q@EFAey;WNnfY3c$jT*SJ>H+QTe3FiKQjZbMgK`U`XZP=_lpaHg;Dpjmn$H zryt++S|~Q(_#QxAXRi%*A}Y&17xm>^)(>LtpWT(+Jn*Zx<8Z*VnBJdOrIEH8I{ zP1TTK`P4p(n`-JyA~!JqSLW)0u1;P@Y>OBr(qRifjLbpZ12bD-m#vkw577z90j|A1 z2*=|_4y~Ql)1X-kyB24mVqp|*mGduuO{A!+HXu5;Nigm+m3|#-VQ9v-?H~5%cHZ%$ z*iEedygSpvx^jWsA7PI>4v>Y76<-|a?P27dMTia-Qs;#7Il?VjZ{@|mL0U9FM>VG) zHu5(C^M2e~GMz-yZ28!X#T_T;Wnf}ueZAM!fB0W~Kq6J1jV>N~Bsl-@DJT$(pXpJ; z=SF$)TLO?NM~eoplbEZ{zO~P>gifQ0YBWL+oLoYlXTm@pg*^Rd30D$56m{r8_ zia2)VXP%AXn@CBh$YJGOWMoaw>R5z;qn6z^w^l08;ok7|!k&Ruw5UD@q-$0M>+L$c zu?}~&J?Jrwls^ZIW zir;-8(W{yE^w62YYNj4WRc+Pd9EJFbjCJ0KSB-iB+iSU#Z%tc1OanP$a2*!?J@$L* zVnQY4;Ah@(O+A*dx1tFRS}3UB24x zbT41Vxq4#m_NOs?+2!dxOdy(+(LyX3DOSeXvjAx&s&H8GUkyqAoh>!ew3{)fBo{>y z)@AbC+A6FJSdjwF4f5+>5|U|wSZke+mP$)b^TZWfs++1gz7WOcA;#_e`>Lb|RqsjK zf?uh+#A0veZ>vjY54fgZE!QPF;Ys}Nm>Eo%9i63u(ZaJ9KUl0-msqcxD5vH9S1R7f zn-Pw~d5JXbHigL1eseg&fi-gQ@KrI^min6FFvUxUDeSPjzV-v0^l%y$h zAbB`WozVXqu#I1k+uRJBwk+jqSD-IQ*+CYu^;nj`Dj+z7dqSQp!1Y2Y$FRmZ|M%Lt zarfz^V&ezuf)m2peegsr=HEK4$BjzEdXfpd*)*uSK1mV-L_)(|R9^_}(qlISiSJ8( zwa%x7ewq7_vtph2EAbst#2F2%aZ(pjb-);WjKa_beskR+z&siJZWU^PJ7f4#hn2A} z07`5w_nA(40lr?fQCxAOzjL7?LC_JO6;@87z7TF6A&S0 z?JgzH?hsC)ybBQ1dt$sut4dQCy2$F>1`E?f#tym%KGw58tw2eWafs*y-z}n-pC<|b z%OY;7f;Y^TX6NGtCwqT5QxBQWB4D(FrNS{ZW2f$PV1G5ziw-7e3RQHUo};)9F!$VN zAnp=DiSCLKpIAB)uHu)+-e44koWvtyAOi;`A3R)yNtP4a78uIHp+LXo&~Nqf5(d35 zDJ|uhIR*GV)hYx^kU^<0lOHel=e&iwnZuRV)Ls_}bT6E;O>Z1N^DJVMzJi?;2=8~a zTgmp)php;_H$Fn2L}+Xao2H-x8_i2@S_LZFrHtr*^-fYvyZ34kPcpOOVNM7qmRGES z&*Kur*(L|@&^QAWPL#+U+a-H~ zTl@zgdt4bnnnL-;x-CQ3(9(gDESXR7X{t|Qe@d@C0(D}cu&5UBj<64ybZo;bTRx$% zwypyM{t}f0qaG`LE+uN@-rso+PNLY>zX5_8=|{b`lNkpWYFUeC;loCgzPXRYm#P14H1TMyt> zH1iV%@$kefwFxq1WE(G%q2%8N{T0-kh*HT;lqP0+;@-pexu z(PKH*;&l1lU(VT$W=p|2OuN<13z8Udw+h(v^w#C=I_MZZzPUC8gn7*b0Mit#0SL}q z|9ym6=A^L|R7AZf3a(Ftdh1S-k@BM&qv(GWu;I%tt^4v9oh2#k%`B5CYJ{OY`S!Gg z(7MX{2Nr4HAorI4LuA=Tos39ATEnWf?~L*OCt~*ph!hn~Zlzd*EyoWpfwVqrb1=Rm|(+i#hP5 zfbp{ai%=#0Lkkhx(_iV5J22PS0ZsFnn>-`VrK|Yp1sZ=mI)_u6)c2243lsAQjh(8D zyliB)cN#kd!xKl=&u|Sa5HcspQdp0#At9*K0pJYe3i}=d$*AYyd(%nGL`H{?L-C(; zJX;icGa}m5*myAZ6BKRs!io0|6&mdC#&8YO;@J56gvWMzT3LelOGmZT)4jtG2Q;Fz zVgE}GWNzf{_flB#?lE6}5=JN4PIa(Ti!{&zdA?f7nw1C{4W#-y%zzYhDVQ9!nz5xW z5)Y(Bm;T*3UNYyTySU6dUv<2?e(w+tTfI=j9sM5I`Qd5kPR4lF{g~sb>#qav(YKfK zJJlMzuyIye5gde`A6wmP@JFM<)z!9{R({*uyC65goVMC=@%4a1KWXxMuFyxR(R*hc zPh7}bS}%TN_0L{A+5pmT7`QsKbLZ{yRp-}$<7Qq786QjTu@&J2`+SiexAx;CTd`ff z!{o@i5Jel)7cZtAH4+&vDZS#q%%h3J%s@m@+!(7jxK6nM6?Y~*J-wOAVx|!*K0wej zLu*}w3KdYo9r=SFJG9cu^{-E51IK;p9!Y5MxX{wYu;ove{q+yVKq2PPdCL_jbCp8h zhifh zO@L;QhWB2D^e=-YTE8) zl{+&3A|((4to9TpN(IV_ynxUG({T<2$rRr&xA|g{1@*pxOqKAIBLQ{@q1<%1 zuY<(J+zf2OEiB&U3oa$7q5Jr)+pXc{xLd>%$)2sR`Z*6{+kIQ>ok(2E{h2PuPfg$O zBQF4R`nY?mGb3Ch3Mw9?V<1-L!~fr8$@ZV`FCZ&GH3|MSicN{+PhH_K@#Czq*YIa< zv{mcx>Tz(aIvLj!WC!Ely9HUszI^_1aCE2$D=yG?W;=apZ)f5G|b%v!96#SF8b*!$ksecf?UiH#u!Cv_&vizZ z=~u4)>xE6#w4mrXU|BDezKLpmQkj6!(;9#j;bo#ZL6dA!q4XC3noTgllQ_=8&H>BINFAxxjsgH_^Qp)qc-3e%{uP>EzD10D6p#v!f zJ-ng3znXl-vwqlm^hm(9HdiSHj$_KmCE}gU?$!K^Hg1t(*$1b7^)-wHNJbZUykPw& z{JFsP+8XGD%q>e1rJ4n!#aZ<5feEk8asGL4+itAqdVWiXS?+sfaQF7-{CCW(KI4d; z)vD{cQy@NN=(Sr~a%vujQ45G^;zAujH5$5f$AC@Qv$nOpEgjo>S!$|U5ry#KL zja*(ardU@}LL)-eSy#8@4&m8!Uyp3u+9(&14AZs2BI_@knF?tWLV(>q)`iL1u!mWNsn)Bt|#0II_6 zuLtLycuEA+t7#)Gei1B6Qu)9?8jRSiCsQowjpWvMw8yCh%O@?A^7EXF#;8zSV0-^6V(C#arFT``<>?17$l^6aAtyy3QDGU^1Q<1T zc(v5se%+CNhi~&}F(4qj`pIi7O@Z8) z;_&A{_x*eZcWy&hG12`7^TDb&=+7DO&?)S}_OC2mHbX>nZ(5n&g*injlVs7yjK0L9_;n>=A5fEkir#) z9D~cU4b&=6*X#drrmt6=umib6$wBXZ; zE?rKi6R2FuFkk1<*0u~I^44l9fFtv9jBx4+E)Q_nsFR;`9iY#urXM$YW2Nbnb@d9U z5WS`tYmsd)2>siAK&g&YzrYrS5QMG-@X#fujeu-5g|Rek*ribPI*uZrea1$LbQsk| zz~5^Bi}Ja|=-V;X=_k1C<{;>2ErLbzK#~8yOe?8Xpbw&RAT4tC$h+4Dl!QXgJ>0TI zSalY*>(LX&w5&Kqb*y*niVBB4xEhA88tfm)UG7p}dZuSRSj-fTn?`Xlj(4uku9 zUM^t!C%cqIcMHdcql_A&y4?FmMqx;!UVqQN7BFAy?Mq} zu0ZLVo63J(Vgn*4LjE7HKcIB%J3l#j%D|!PJhcMDW@b@@{TX6*89DUd$Mg8YV0ZbR zMurv_)kE-8>99de4ASw1AA)|J8<@S^R?FB}FJjd=^G3d4e6{~5V9u_(z1XEhm+!%e z2FMM05xBtqx$#|tJz4ebRosiiCge{@l-5FcpVZpsbJFuOpWYl<+t5#+{^OO?>{#qJ+3V(*KV71Hnh9q(5$# zP62mIj0OnjZsJ_UPX`b>&=MZ;-i)#L4wLJjUy(eTc@j6<0IXaO?L}m@%oX}>r!Swo z8qG5IRX62emRS=O4mULaW~78Fvp$#5%=So*OeWeXSx?Ns&r#Fy6|wcGfdl2Ri!NnV znmXQzvGd7h_5PoTbV1*Tx0b0UFJwP}mdKXNlFA`@zNZ7~KfaHZAgw6GG^~Aids*o+ zmCrMm*<>#Vid3tb&T9e#GkX-m!C<&qF5w5WRXeZj8?4_0>;l>#!tS`!n14WQ#TP)K zBHsV;4Au!&xmlvaMfjfEMFAbwuQ+La7J6?~zJ3~y3gZ$jOZBs^91!df8VnV9xyg={ zrn)5)D8qZ6uaib#Kw0NQsWj_uIxtC8HfhX=&)t8dSv^Ca*zeAgycU zA#)WIn~bWvlt7TvpbZtPJN!#a89HYh75dYmPA8CGvKkNb-euF(*1dmxVU7I})dO=L zf9>qXjhjgA$@j5oBko00d%K_S`USYDj(AOpIDGE<*dsc!$8Z5$iU)8kf2>}TeNg&m zxm4Z#vr{s)C-1`4*Q%3tmh*;mV$e2*ThhkQfMJj#F$pd9_w@AE#TNZ=Yx8~FmerC zP=F>?2PnVGwBC^&ulb<#B)+S|B^!B0OGKx99Bq8l}D*uT~tv!qN|V+Y-& z(9PF;ze95F;NZG9_yP8}b_fZIg7EFvNB>l&KJP81b?|!^mkfcomJ&$3sKBhh(!MM#sziynX zABI&)HSaKI_~s}X;r?-XGd%b)uk)zmu0zDU7gGx3LXDY0d`JWO3$)Lup9YG}Mn0(N zqpmAf%dGuuXSbIZij2g+FDL7xB#4RO%~!{VwW8rs4IYW?JRl zoR{gAfA~PF4y-bgKWx;HHSdKSG`L}P8jrERf+(ebQF%FsYCOrbXhc^~9+~^}R+mFL z6c(_I7Aw`|;P8)&`S-9fW^tXOnd9Sf+R>C+3C8IDm84$)PThCJ(cyqL*s87g-O8x( z(SGCQjgJ~Z==~@cOyDk8(}APBtXimU=E!~|acZ^cZ&L=+s11$l)X|>LO{FE+_4V-4 z@*nczV7v2+oP|B#%R8?do@INi&EZF}&ZnDXI~Of$L}H%z1t9@#wY9kGPD!oFFK$o7 zuDYMC&r_b?rGews5HT3lgByTzxKIOUBTM+%kDAf1SjncdF$hzLUauCJf;$&M_n)q4 z=ev9Pz&gVEfH(t|#}D8Z3Ao)cqdl>$7v~()NOzd5S4Z7X+3nc3W(@ zpL=2g1q_y>Ii&=z{NV>40b{ns+MZ*eO=TG$_Sm}c%xj`V&|}CCI!0jMJI9)tO^0+k zT*An0f3m>1yPI4#WFGJ2LZrJl?;inK*6gbG%SBky5v;sGZtxzPS{V~gi;#UN_SF&q zl8YSGZKucvh@x_r$8CfZeJ^;fY_WiZ%VZ9>>03WfN56Nec+}tap=K)#e4rPH;`oSK z*Fu9{j`r(gD=`>2W!>Pei))LWPcbZY0f83}WbA)B8yYS4enfeIh(jKhWgtk#Zm{W2w%Fr0zv>2|-i_HMtpvUgI~j?XmR z5dGptz<&J+c%TFt;yXnbS}vp9^0xOlQV~j?-!;@6yItb)U6x(?ysQO&FHBB;iqd8M z#`>rCrcHZsbF8t+`J@dp%UFlnDrnKl0A<3EsRemI$qXQ{)^kFaqnnbfS(?!}e5vst zXRMXEfUQ`4J`@m6C+5<>eqZUgHR(lVcbO-wW4 zg$eNJ8w?v#Au$(Z8Ab;^;SO*>cMS639jp{t4y4czkQbHBE~T6WoF0|f>q(_V&eg^- z|1P=rHGWD{q63O1Xt1hx^}8Ws{+D&G3;47@1CHf^rGSDmvZ;%)Pmh00ng|6dA$y%L z(3Hu^cR!H%7SBd28j4Ff4&kD0KV1Cx7_rUk0j_XkAO7G0hQjMEFr8afPJGpmNJ)=X zEdS0V4GMe@4RvC4=xUZy489=)tceATeBd5D?pI z`8Q*0+qNRYMS#Q%QzZhT2#*9UL?$E#7g``KlBJ8EBlI*D7r${I=~!`hZf@<^xx3rv zFo3bW+t>e&NKG#ZF1-Wz)_!~4IMRgc(jfpgjxZ4bl8+eITaw>SBfRSC-tgF2mwVT;34q-*m~KRb(^r?r^l?jF=Rfe-{1+BOGH;Am5!^7=|O+` zs6eS9b=b6F1QW7Li$08A2tWnQJgyuM<64bFESi>3XXVe;a9xB8FpUvCpgkwFKGjG~ ziHZuweKzXfQN~*8KV-qe^&di$%Uu){F{Exb38rV~%!jwNcZGZ#2u&}aQbuzL0P{C5 z0<<|cm{|_5Lx#ws$brI0g&DxP3JBCp_`H$Ia7SXaaV-k)9m-pOY(XTUQ@L2e$2PAEvzHVnf?e==ak-k4hn<~+SwF2HK(E(4^(>TD3&_#_X z%X~U&zw-Ay-5mImG_dLK^-rR5eC#h~U`pwi-c$^1dm#zW5~j+@Fra^~J}7M1Jp@GP zAFGo=@!R%cB%<y zwu^6itM}{u1M90|bIg_$LnwN{%E3z`hXC%QR(ze!62|9= z*M3V5- z(y?OPzwsbBH+S}o7KBs}#J`FHqRS7ZoMDO&*Xz^l`v(Tmn(17MhTYCF)IzFg4+sno z2F+_}9cAS-B9{Z@2RuJJA+(Tuh>80=za(|Ml+`HZ*^HiXu6r+;)sJy=B>`6+ae1gy zk&5#b{G>w=yZXe;U8irk0dv`HvFVLb4I5wpy{YIxp~mK{qgY4smN!%ur_vS{n9}po zG0?w9G}4X;fG}E1@B>hxx!k5?g%#xcDB|+U_;42m?~w@!D<}zp3_);ZUy0hQ=;jxJ zW{&FJRWV>baksY2C{SrcFi%Oz7`GW5Km7eEoyMF{ya(Ai=ToymW*mXuUOP@=T5}w^ zT<7}uwb!pU=j$<-N8F}gmHi|kPttF9;}eXh+31Z^q+R3rQGnA;3$6yF`idTm{SNBq z9?yZe3zYyuZtHF2F%MM)QvNUaET|S@4b&CQS`BBMtascU-t~r{5lAgfOyF_N;={E9 z6K!|jO%9`Sr4%o%#$M!DBiv;hFf$P1$0IJSLhJaFNJ(KZ$ zMACVT51(r;h$ooyh$0n=0bj-RLotEkG&=Nw87T4)kMTGucJ{1Cp}@kCvQ{te?*DQ% zjk&!yjEC@jqly8Ne{6@j*gW7PhqOapT(%mp*`(_G83yIQsb)%kBAvVq7n&w9Keb|A zr-|VRYl!{lIqb?MvJ_&lQo;7dsnMip@eK!)g^O!)wAjk|!g5 zd4ZzR`gFPZ&ez-*T^%;6XoWlvY?o0ZM_a#bOK!Lr3!bE(v)KI3^-2Un#_)m3fnEbj z;nl}j6O?rvdFG<()pJBoy4YS9zhT0U99T-CgRcemPygnP<-EkOZzAu6La zluC1O(2t7&k86zs0uPi(03buH{Mp@IQp)f4+~f3w zYG4-X5Q(8hjz%T^K_LIF=DMpc`A;dDe+?AYDiqm87>l@gWPiC$J6w=i4C2_Mm2yJ z|A=sS*~18R?A2DHLi&V8sg!-+Qe0e&*S3(z09LF^KvQ@)H zgWB@t90*K)s0G~yz%0O`*;7*gidW~ZPT!-*63fI_ufiX@3q|d&KxMD(zT1wxd-Hb2 zWHVyD$MykJcM5jt&rTluc+MhyGf+SG!4)eYF4}Q&6gU}TD1V?X_53C@FBF4hS5x}o z{N81wSF#y!s5BjIY{&*s(4^z(RiNm&Zq11WK3LxPO0GzOAMYhiZ_LgR&=@Ii>p zgWVikWx%gvQ`;xv#HBIbdGvl_#M7&>;`V?pGOHXuo>bMEi}>Im#`)^u=UW01@D*23 zyB+EZG>laEGhs7TEacU`(w#I=XSd~F{Sh=UHv~I;gH-PA z$p#7Y9t7YkKE;B^D<8&H{ypA)$Jsid=!@)rz5T8pwQ_Th#@yzC^E_JUrfzmDtwW#F z<99o7w=YXe@>-&PgB%;*|9IpN1uldX;2Zw|GvuSx<-B<~9$Hgg1=#0P0C3r=vRVj%VBCt55WCz_$mzz$$m6meP z&W&klKPph3FD@>Mz`XutP64_t)smM$)w?a@wfmkI>L3X)+gSCFN2StvkHuaf7G|IX5gIK_mE`sTh3cQ8FystgTUH#)gA9N^!l4B-M(8^ z-XxomyUH`_ABYQ*#i>vO&636dI`ZV7SG=|eFG&FO{`hn`3Q>+bZP}>yiOaLI`fQ~q zS581hiaBp$K`CaWLWv(0k4yNT$yt_@7l~MfT|-AJ(na?JUlmjrt?H9m{vff30;>Y2 z#UBJE6okqIu_#c3r~?Kre#MW;71vA3+^demyaOr^z5HB5o0%t?88^FPtKyQzlGP`w z)jQ&78E0~oSPrIqN83LW8O%F>>D}MbpN~&~9+IXIlrWftniD)<{>5=c3H4w1U5v4423Hke1rsyUea5Uq21FpJh z9*?`QD1^Vkn$*ylOCg}%mg2zp_3RL4kpw_|(;qOaS+f-eXH>-CfDxl$qiSpDu+iJH zl+vUz6%?@dRLrEjlAHIvbKa+~QDr#JP8nZ}zTtv!L9b;%+a9IS?8g`=h(COd5dCZ% z6W)z*i%-rdc3J2A8_rUURFDh3)#P2~VXZdSK?Yih#Jdn4%>sP%<%L`UEnR?62afI| z9K#j_M>%f5U8()}D$a@a$>;HA>nY5M9X4uNSE(Z*nwJL_=63@5+^zGb8esm=id#(f z@Po@RDWlX84Z4uR$A!rEj3UUP17afIz@mYd?OBGKEMdm`hl&nZ=dl<`ZZ_u9A8|U> zgT<09M>FMJEypaYrF{#3-|y2T3pBtOJc2nH9ar1D&P3*_443{2-X(6C+;oL^c!0IO zK#C%i8^q#)hU7L=YH`T-uQWBsjQdAae@4DZw}whOK@C_FjQ9=EA=@`~gfPv3(d2(CyqbaqvJ2APt~qlWJ1Wq+-kf;2^pSD+V#z6|=n!xpX zf&tR&4U0d$j_klj00C3oi>b%&D|)8A(-@4pq&jyfEI=btXD4{t{hU=1Ki0NaDzj?t z{cq{G51pf(uhcD%mzrI-=4LD3U%>&+o2%~Xo1C=g!&*0#5Ol5VT&3gsE^oM#g3&zeGTL(Ys0R?pAFuecw_}mPN?9 z?Hfo31QfEfL2>-&Hi|$glkQcm5)_ZL(w{W!QlzA%UjmXFDSHP+fogH&_gB6O#zBFAuKSfewF|+Y>i96b z7XdOWrrvJuk)Z^|@n28EY~iT7Ms?rTKtv$_s_2Ms8p2sRiQ($bv((YYt8(TmQ_&0D@UoE%)>k%qVw)9a1|Gm;+zNwS_|CCG={ zdwX{2+1l+^#@+iNEPqTi?FP%itE-BR#l7ynd`>O*%*K42a zrAYs!U*uSXq>aQ)CcQ1RNtGhsm$VeQRH^?~=D*XXXPU@9S0dceTCVTzj+)~!bb9CL zyIl}|_^#9cp`fcv_F^honWD{~mzowNV|e@$F^$te?wRNd0@{r{Ao_5NI4j7=rIgub z?xqlHkyJB4)Z$R}Ej2VlDnIpUTUlcejitEGqa0U6!b<@dxHc zw})sh1g<>RTz6Wtq|O}u(qq@gTS6^BkU~} zLTJRo#Pt2Z3@Q8U2W`m^8p(A2rtnoRuEH!(HBBR&O|^5B^xQ%((_ciZNUcUq_V*$G zx49TvD2Vh1OH&EF7Iys?SG@!E*G4?DyEq3?!5B~+sW^boG;B18d9EY7_?m^HwEk=A zpA&s|R@f9raBm?0{k;^JCDtPb>%Q~Z80P`OgfDx5p66?6HZnuRZk$~#2q=TMO#l-x zaFZ?Wd+$Vrj?+0I9TUHQ|7O0Mb|{uTQanHfi%4oEO(5bEjbnL#!7Z@5Lp-Z`bvtcO6`I+vt>y2;(!8`?Nd=J!ltwKVB|Y3{<* zMfS0#O{U`_Ew&szD$yBXA3h?!oas8oD2s-*8FLa3ogMw{^w^(2seb04je%mM_**Yg zFaKY+T_GSai1`ws&M7I25Pee14^FRvaZltUG_I`|u;EvgQpTzxQI9HPOwaeC5$c`& z{rg4=r#6=(Akxk~R=(?hLvOu}$c&E);uRxV)bfMYR=!H-{<`GYdJvS#q3540nNz=D zFU&5o7#V@u1gkDYuuq6WN=9$~;r51(1GljIZOG+E`SYL9mz_I26F!;rEatiWPyw>U zGK_L`pt%hj1m550kpzL>kGO4Ze08^{mG!3A zT^7&xId$2Mp0LG70=zDy)JMz0;4{!WF=XAKz{$8qlu?MI77H)wE z25GQsJb{QRQ+py&f4C~FQTV>T=U0Nz=S4t2RNpF4MROoWF}>i|O6&(YrQetfWXXoJ zYkM=$=*?dFyPP zGr>CZ+0j(~B+@LoP}5PqUpGl8|RNvA6nw{ztpR{D2;NOMgD^1J^tz)hLY zKMuh2^L&7=d3&GVrj3&ldk#<`ka8&q>4?nn(p&H!C^%sUoui zljuNnB@|IVJ6rJX7gj3n@ST|t3H~Db#h>dw3f00L={S(AJ;IywBS@vpeiP79QPUSQR#e9ebnP~du26b%UQfJDFAs?JAmw!ExH$KNgGKtL$~3nLKYQ%)T$MjYHFM15&i zf~Lwe_PhslW3e0iq;_P9nB;U^@3u{-_xg`=6jV zyl~Br7|AcR79T08+{21}n$m^VoOwASaPED>6?vJ6^V7la3}tY>*NR%T7;|G{68|r= zH7avyizoZ)4!Ys6DO9cZ^a`%#;uOAx0&+yQSjU;{TWtDCj&aPHJxP+0kgb#MoY(QL z*2WUPeAg}J%PjLlpS9=o)D@qeT;5nuH8?CaIL?1xH!KN^zZDp`C*i$cdxH!tt6P%N z+`Dx3-qL2Ywf25aS<+W2S#a4le$$}`Y*-PgY3;6u>_8b;<`@$NG=_!X?h6Cm+;b< zAX41+e(yE%gX&Cx>dDD-P4%bEaK8pIsoF5_e0+`7Q$cv93Q;lm$V*tPHBZYxUg>>> zPgIK(FJ$jhorq?Z(a6&W@0$eJV%U6Vz!T#Bj+1%3bgS!@hP$6QUMYInZPyzR0!XbA zW0n|kQccmFIHj+sbiA^0MciqoOxO5N_SvFY&2?W6HL7xlKffJPnEBn7ybWS&02DPv zXMl}!Q#r852C@8&#TUc3FQ?vwz0t#pnxy3G|E|pX#!XcZVOn>(G&`8Cy=@8<9gG_a&~s`zIS^zp`gHR*z1qgn@iEz6xHW-9 zgnccJHsc3jVD#K;capNO>Pp)m`M86*@XmEdNI%eL=$MYtLBN)c%0u8<$+FzPD`AgX1a*s6nj}fmY$Uu_D!C zSGa$ehD}2~;YOG%*h!p3=->HB5S=23&H2nvPhJHxsrb!T)wMNO#fcDN*U$;E_P=5! zWb8iKb&r?5`gh3E)k<^8@`@2^;)wulW1|T}B%!0kqFan8L*kv@{z#p)3QdVUv zMcz|zIkPY)naMMuihk0v++bIa9!x@C@8kHmbgarke*}DiD>XYjc{`}sZf2}JDj{pG zY02ZrNAuh7DdSbHpf}OptI!`c8)xJe!K2iYB_cugYr%(|UX@~J9Mk@JR|3B`vWBI> zx^?92zpATZE%@08&LoEB2EQydIz7z*nUFXC&c>uQCtG1TDM_#A!+E7MCS^d-Ddc9a zS3K?mGvXruY%AeFuPSsqZL|Ru+>f2mnB`owE4X%-~E7s5^}_xn|bt&>2lRLGt9 z=4F=+;ChI*^Ej83KvBU~lSHMv^l`}JgQ*lGp*;tuTbykvT5 zsr+%@?EI@IVY8oeOE3lb@mP-(A&|Oohfd*_G#Ug%ro~IpM%UfCl7R37_tusape{_T z+N1{wB)HAfnE=z6dJ&I|Yyr(1nEn(_Y~u~=eE$6T=x}@c`XY|%#pT2Omh{-^YI>1O zN=}>95zZGJUnEBpcmPRzav$;73LfIjAK5s_IN(|p;Z|G#O;cJkV*8i?D%*bRVf3T< z1fya|5CN4|!AH#yC~9Zv0DNz~{Jzcbhd!NEj(^(Ji@SxoCn293sxgVPVWZK%H1jR) z98_YTe)-`vW{g$dD;d#TV=q@gI|D!(qwk_nKC%%M?d9Q=V?y9Th8s}-GHY&gEb##R|I%)$zJ|@8P;#x@bjIi zopR%cvU9(97q>M|VHwz3c=|}5XEo>FIAepS&>;$P)ltYw|h(u`V24DY30WHcq7XA<@>!2{!O@PeSxL%-bUL{bB>wyMw?rZqKsBd`VwZpmodGjE4e}Z1Z?fi{lUBXr96p;??>zZmjB)< z(&K%+UKlS~$e`IMSv8S=B8P40-S{4wA3f6gTp8~F*0YGnvzyMnD$}4kAUwhA-9bEF ze?AS!aop$hL?l5*^fICyb#?W!MkuLh=4b}Y$q1lS-HeF8pBVF6jphh=b=G-h=4zB= zFIcN@T*VIgwDe9KXqt?PimGwyYd`|6o7SluELRA6#7E5?Efnhe+~c)p|75)+u8c4cyW)@GUxZ@ijCvigI*GW>`w06~3wWj*+#6xc!$;J=>P(T7 zlV{!35c1T<)#_`BL8?VX$(q6pe_kZbnm8GDz}_qmV2b??4i0XY#KcJZ?6ul>Qxn{_ ziYL4u4kR7H+)rw@)TcNHNquj)0SmCw_*tI5>N8KCWXmyFONkZ)%AmC^gxJm(2n@{(S$wJ0{yQ7qT?~x^M=`kX36|VCf{w%JnmJ0^?*QP|Q zPVul0+#-MGsMdX&xzcrGp-Y}9Vbst8fNF%khEDvv)(Al0i_0?S6;k3von_ralU~lM zUrhTER%!Ld7S7dAagt%O4;Hl_=l9#8+NP|LoK6^BLv33`W6$PeTwu z!0VV!Hs|>lcmVKe;3f6H{|r2I5D1C`I9I?6P(pY0yMvxr5U9N43e{pt}c8CyXFQu-d$xvCZhTh79f>HUr;?U-H4GzY0yLEVkF37K`&mspny!ycdOmL ztvtGToExAklKi=<)EQY@Te}fU6a7*K{o$h{?k|%hISw*CO9DolK5J-6NesJ6wu5{P zY+z_eKAqc8Lel4QcyGKwUK=LmhhA4(yXe!ta!)PkO^B~TIKIWdy|HtCJl?H{gF?>; zFC>VBQD2;Y`=Uhj;P`dMRuVuEvxq`MLP|qJLst%fhcKQe>4WXKQ2VzZz#(PjWo1CI z42{pt@Ec-rJzpMzR25Ve@zG&s<)k=kR8M3J&s%0Kb2t{DD)a>d5V zD*DB|FHX|+)2GE3xf;mcUIv9WB>itbe zK~kW7k}O7?Y#mxwa~Fd^d#Vgg-d_h{3ht&ggd;%I=^-%p#b>D}piKy6H?*YjG?P+) z#Pa*ua8=-kS?D+K?LvoJh3I24(vbL?e?K2VvY2Y<3UBWVYURVRD_N#YySjo=wgLb$ zuY6nEk(Yuq>wBq5lB{dI5-^^UXRmo{hLwZ0faHrE>o6Wlpht;y?Qb3`LF@6G^GprQ z>y{RAuqT#1-EVLN0mOU$p;}PFgCDV*R7E1N3ttga;q6Znc*xqPW(Z#bB`v?cnpBA9 zCg(e)$&l2Pwz`o&mzP|D)q#YaWI z(Hdj}ZDS>~$fQfdRq+T2iFFPwWjv4(f{XCmd}gKHNBVuc_r;y-*671#tjNl|-n(~Y zFr^PB0`)-(@!G)k8|h;ehtG&E#ghvSO1b>`brz0IC0cvHYQM>U_A|H>k6mvG&KqzyrTfly{NKD$al;q`*nyL_HFIe;VS- z^*;`#Q6uLw`^A`b;VrOcXJ?1RXPtM^RM&=gjOp;AV9+%1dg#nIm$M*8#&5pFM6)u+ zZ*c>au5+5@%TJy!VW6=!obg~Qm#kOyN7DsS-*0gnxKNiX#O4LDekxYL71o%F2MRFy zUEXPJ))da$$wtmac{qyyOGtRR*lwuvMhCT&k)f6_P7~FX-{b&VkAQA`dS(dtL|$9Z zwS0bqDQpx2;j~i2?BI5i$x|9NJ~Ub}g}NiMYqP!7ydI)sM0$)mVo772BCM zN+P%Kw~Mdr>Fq%@x!(v7jMW(|gEf%<2b6mheU!PCZ@tcG+VYb#A* zr_PL*0U0kW9Jv;zx<*97{sp8lO6Bd}wXzCJXIc3)?Ad%rULb*r?zZEda~D{?vJlXB zj=2xWE+eX7!}wEvO55-@)H%cQ>NejtbZI-Ak{n*Cyef|p9y}T3Wy8c7u#ZLnEQ>N&e2!c{U!?mi(1BU zc11-+*WbT?DZf}{OA$IXIH7uH{T=XFH9+Cy!7yEzpq<6rzM9j{f%OV+9oF8C2~=T| z7W59`p_sh+z6#P|$Y7|}%mH;Av|e1fy$Gw09)S8G-Y0B#@DJE;%f*ERdSPR-ITwCT zBU-=?Jau9~EFi*#Gfh5nWoBmPoPE!XSc}|(1w7X8OqE3I7akKQCC{7#_cvj_w{Rg1 zg`Q=FHw*=n6l#3`heXfNbwsF>CDk2@e2*Jmn}0h~s4%- z0~ma3E;uBBn?p==F44MI<|!D;OSsUwwMJ0-1{CT)I%6Bwq_^;`h5uN{%eC>Cq{hBx;uL2$pOuw< zn}*~ZljE^J^0`KDwa_C zM&LGdeII2m$n*i3_?Z582&u7Wth;-AoyFg}jGqhmOM%Ua=wPfvZUoORN(EHHVrzjd z*JHtR0kAq=|ENAMpJ-`oPh4+|T(@M6(bWm^&m#)v%)LdRp+Yq|TnAlFLv|wMJZc#C zy+i<^Mk0gm!Hi8UR$FsE=kcNUfMaQ6gX88ka#$oThtIBaeMP9OT{NF(x<(Q zfC?f|+`QK^0CKBGL{{&+X`Zh8#yqKl{?VY?7AU+{LlE_jFey*P``W(w#Cy~$xE`^_Ojd<$;jyfIaT+rd8!m&1A zU_+b%aXvN6xp<|jdJM$1H8TWlCZ+q!S4&%3vPJ@F$0TCG(!U*h3ZO_+ILLhN)iiq? z2xbX&XmH_nN{y0euo^lrYtB^X6SwDn1YwpCF)X#Zcwf0qFdd&aQAp`q5Kvl$y)qz$hN`K&US ztiWRdl<0^Cb-nVplzlliToGmw4$GT&{Qxf#1(OEEM(aZ=2w0Emn!m@8#v*~|{?tR`K2S2kgSn0<8 zH|9l$RyPm+4QH{%cBI$#eFDcr^6baPOFeL$GFz!wGmRYW4kSWmuyrTJ)|CQb$YO$( z{|iOjmkn2IyGBOm46$&UH)r&sSmKtn7*C)(a0DuXvF}L_4YOw6{Wh?VbNM2!O(O|d zd~2v)fRu&9tg!MVS&P!IMga*2DU1FDpZ?5WGp?eMeZcZLa&c!`DrYVs=7PKk#cKuST*XRj?J{* zPvyfLwe?;j0Wfmku*L0W6xiH7r4;SbI01T+w1lc|W0nz|3?jX!{|tNW22_zOL=UXM zRKmyT-Wz*fi5=SCOW+8`O<0NAU$^}XT6H`JYChb*(WeUL2J)yRdTAx8@xuOz)hMi) zO@8e(rnxYEJoKJMVmdF}mMxaYXX{h_VL&^Wr2Q=+7itKYQRgWDpk8qTXM&~V+;sF; zKTU&A#ehKOJwAu!LxFtwpGcNGPfs8hwDZNMP2~?Pu(wad3)mQ!*Oi{1e4r9{QjmVW zRPOU><%g<>vix5($Hi#Q9|-cnU{626RixSSyG;Y zLyG>9kscscYutRfXy^3)hqX5CjCxSYG{`fRdMnel@9Dfmn#&g`9Fbz@~Q*4I>B_EnD#cgO#2nz^4x#7RXt$0M4Kr9}64Eq;p3v%Xz z20Z!Q-!@iyXYQm0`GIXJ-s)?9eArP_}H=Nnz;2lPSGlOEgDU%?~_ z@}y1M2!0g!r{FI2W$#xCT=^4g)F@eUAsja-1IUS^_Y0obm7j$_u8G6p)h?gQ($U1a zQ)pWf5qjAULAVsJL`gdRmfvMQIRbm6KE~-x-&Su89Dqt*%%BpEPHvip z3l~H*uC%FyQUoVx^dJg>GLka9OXGVrA(6Ze5a1qx`K@AB3F5lJJ$--^vYc1Plqc$> ze-ONL+KE)*R6bfXIJRac5CD=S&9r4@!xhlKjA5TedF1$M)=5*R}7qAM@2+MiO21{e}J zveI)w2|M-X?uEaTG4`1GCV{cz=QpLukB0e}j~FAjM6l1@eeczQ*6F}!+OYT5oHJBh z1LU7jFzfI3YddOEpzHdN%}3bv7U6=lD4)x@!z^f7#|lBW@E~{>114{aAng!cM7P(> z^K9R&%J~pC!gh_5UYJq(nJ%iyGi(tv_P18*>+kM_X;E1oe}81^ux|FO0qTG+*NV?~ z-#Vr5kFL_AP?LRT3^=Jj13VfwDc=|xdKKDw^cHCTL=1j4UaKo5Tzwzjw?XtRq{c0* z?S>eHXS>LQ`%@ie1LjYfL+O9DW>6bJ*qkko3$MnrCxJ07 zf8P=?KUQIs|J1%l9zHHxHag`bj2h!Nk<*#0zV+4{GWm!9Pkx16zCbwaBJ+P}BoP2j=3640wvDwxo$OSHw|B>jL;$|u z8!)Fq<(Vh{9OiTY$?QSWhstO62n^3HONfQ+$#Tx17ZMPq3J&ZKXQ4k(q;aIE9Vl?+ zp!?cGo}7h7Ir6H{cFBq*UVncmMKGD4-xj*||4=ajkVG$aRO5`F z|1^44#Rf{c@$|qtYefPprgUJh7%WkN5O!O92d7{4T}DT|{Dh)=_If@@O2@30yAjFF=-(0zeFO@alX!F)gVinGN;CZk!JwNC@zHeslvKHR8V|>1I zu`R@Vwo-U-GpyYCCFBrzPXcs2VIZ4=#`gsiC>)`#?-cVEXZU^Ggi8pnc$5HtM>Sdi zFxl5By9$@`JfL?;6vH&9KyiG$8nx(89`p5JFIX~>50{U(;;*gW9;*E}e^nCY_f#g6 zr6t&Ei8`GbUV)vkkb@_L{zr?rs3rIbY7tiWeBQwY&_{8Bh z${?Bd%22c7u3x2D9~=61IlrlIeY^RZrJS@U`m%onl*v%WHRo+mrt?iJT2j7z9)@NX ziPKYW{PV~YXd{QI>+)A4sn48NhVraYZIgpJ{NU%yrEgbIyfw}*C~pV4#kGNFx9o>j zNVzAQ7*oh1!L@*UA=gA)h&2YwxuQ}kN^D=)?g$eUvDW5E)Jhqw@Mo61%3v-f1Hcb| z{~s$mwe7C8H6K*(BR_lxmbV)ekeFjxr7ZISYXx>g1I+kkxX(QLorOh>!>6iosM|6! zYH^n8EWZq$4?^?j)RBK{vqAqH3%w`Zx4zd)K_&V0;)lIFzi^aJy-a2dJOehnszqiE zZt5$vS|GjLQy@R6J2XAe*Yo8wSeu`Sda|jJ?O>q!vFf{mxsBt&FDfxmfm8`U^9mw? zpOvKE=n1LpjOm@!i3;*?fZ^9w5EJ5QR6Y6um#rD+?dzviK-agg0^}5D#FRzbW?RMR{PPOS4C*?k(Ho1~1JdW+g^@rys->VL8i{PC=qiJ(c zfq_$MbN^$YXu$1B;Qyb^|Ke|Du!cr#r}KQ}-DpdD8jZOB?V+|zHSAP;tIbkQ7;Wyf zh}PgxXAym?%vhVEiDU-K7`mMk`nwfb>V%rti32@_(3Bxb-=angvnR`#TFOATvgp0W zJPPH=jXvbvu{8bJYjy#WWc#^9v*t<_gmXbkH~(XcoO}EGmZRog!gi4ob<+-s|A* z%!doq{tOeKj$3~p;s9sXHc|dx*94BO&lxCH(9Z#_+*)1^#FEX993y*YieEM^m4;dW z+2N6U7gzakHQDK-eIu{;_1yPdtTc`%PWo70j14cd#dACUncPXGk!Eaf^)p{H*Reja z$Lyv1-d7@I(o-$;+c>mI(Fy0HJVJDvySs5q=ql1bj^)3z50n5m1b-Tghe;u|mH7j+ zQ~^N3)$|Ac)$EUDW~NcT)k~`@eEVmHRD|7aL0#Ms8ZXf8TLNquA^U?=D+`uNCa04= zOYVyjxD$wyht>JZ_3d*>6mQu$ZJi!;Vpv+ z#h@_r0!M((fW#M*u9T$qxe2#c0VcU||EeS_VHXd{^Jd0lW1mH3c%wuG_ph} z3Y2%_XD*(AN)M6Up9GmQi$2KheG0|%y$VlH5sTu5F)P%k#>2frussE$ z93qXacKJue1L(oUfiQX63*(Vk($*G2m6{M(77s^>Kw zla@n+lQQviS53mZC{Qj{RTEX}KYrz?X9)&CP`5wH>;?sF1SpP;5G`kUk%OnsA+Y8h zMPCM)!1c1BuCs*S)2!=g>fw}f0w)7Us7)=wdGhc6y`PL<9_K9`_&BgsLI;cPHK^ft z1-Z%bVo-B}`~bq-f^lU5^chm^noKeo3$g*M+~bi$;+pNNgehCUwO<~=)KVWy%rz-r z<>;kq(SoL~e*=~#zDD-;2W{2QdwVke-Rc<2cAF286tw>q$R>Bm6|cIeMs5|l$jV6? zNX9uUJC{#?!G;CeNo>l?GG*S3;D&?GZG(Qx!1Bh6e?*>#jz#k?nMT(V-8;JQ4Apbv z#$65-i?#&+G-`ZB%g@Z67h+bV;yzcd_eYh=^7`@5AARbofLIFCh$8l{q#N>kR60F& zT2<4>NziJ+`gp29VHeo`rLap4VJzw1_WKWV!SCYZ^-ig_%CeEk{a4WS{F$x8*G$o; zzBp&Wa+?v-1>jEOT<#z-Dpj^U6Tu)y0bk1`N>}{@mL%M#%%%`4KOc4Dm$3G>pOW{D zg8tV>U`v3>Czjy$SBV-JO!yucn@?~&@#Rvs-?~HiR{N45u z&gdvbzoBxcz9dOxhmXQfG9+DkGPstj|N7}>#HSK*+EV{x0H+1dP%Pb(>mQIz?qS0C z{5+e13eE=!2w>T;Y^KVNJbf1Of$e(aU$FFj#B*vkGL%A94I?mb-9re`7`L=oQ6q(% z6#W!&0A7l2)jE)q>3IzFM5gT(%Ga8)&E-v!D2|bGVgG~CM8UBBO~;$3zVl;ih%Wbu z#GMJV%cG`-XgtrWf$cIP`*pUFz4nM_m(Zm}3g3^O&2?1EpEbl$HBFGtsngP^$S&n8 z!R|M^TgX#$ybDB5;F13U$YfSntn|yAZ=hCCNWOfEn)0BHHesS!;sZ|>Lc2?yutAD` z$m7FyOb_6G_yMvNhL_LIU&uq#6he82^135tqvPpz6{0IN+uPYsgx?6k=v*3(bGWs=E0ZZ`fNmeC=S zs`n`DB^YZx9M9jQ@H22b>!D8D2e$!L8ZeOKJxh>yyh@PoNH{_2i=9x#S*@m`fBX6G z>Pq5l0M;ruoN5M9C;#KOUUZKEYZu_T*n%7$+A3tQ7-q5E&3q{;v%3OgBG0Er2Z@r< z5CI#e2^CeJij@lxDHeZUEA<`?1c_?hW}402Ay4_Ce_Q+w7qN<1Q^!Go+`bwE?gE2u zS2Maty^r5e&?Ni+<(mR30g059RI!*hm-8*rpA+Oxch<6eg~}LilWAQEJ?yNr-=yKn z@fUGLbwG<4L?P2lrj!K7VsSKF7(!2&*vwwW&O;^oBGVyEIbj?6YdS)P%o#M6Q%Br93`Z5bex0>+)o+3>3+Ro?* zXcLc4mX-`;N|G_Z8!@I}@uOFek_3AsTkSdLNucmqve}EQ>vt4ZCXL{wpM8xr73J;V z9-X_(BPl6gM}-VQs(*jqegsl2)gXVu;eq8GA0O9KEGz=mTI%zB$YJN-+R5E&msCZ9 z0rQ9vHvK=hW>7XpI?0M*Af=;sh23ook1)n zI-UJmh^+yE&Hes8+c?Xr{5nT-jxbnBljYnyX*H>0*ae0-30(3o(T8EEv{#Xuu1<3F zN?|h@uyHm;V^(&iWYX`C1VyyWe*GQ!OM}-SNBb``BSUf;{M7`|GZnh94;J-Mu2MIt>KdZg4oZ|SA|`{|1D z+yiPw4M{>0CL4@}mYR{3pIO#kNMfZ=x?l$dh9LhwOJCzvWX4SJQi_{G9v=L?{>}ZxrA6M$TA2N&Sz<+JuFz~!;2~brIp(j5FBuf7{}ncO z6o`T+CrwLk-MC=3mp+dWz!G=0SxdwG@uI9Ms2%n30x)c;hOTEG?jv?)@m&h9aWB0gChOi#e?Q*J)rWiUg1vovT@V- zI#mWWwAF~@YZbON_>5@FL|cKpZhpAo48QZJDE{Z^O7r`8DYV=tDlsEYU_((N`w?Mj z0mRJi!*{2_FP@Owsjm&gnM$SNUm*E#mQqngOj;qBFK{XLy3$y><7zp7ypu85~_>ch=;Gn|4q z<>mp+Kbri+aen#!wfZG=(fG0Reja58ML+NL_vq53vdM{IrU!>OK^CVp4O`Nqt=hu) z_H?CeiJK``aySvvP0Gro0pm1aX1pLndP|~(;_fsPD-4QNq!gBxLF4#LL}3p-#eS^? zCj<*)^$`OD<7g9tM0dRP^6V(sCkiHCu)V9#dXY$5qK5^PX{ zaB)hhVJKZ8Ty?2%(?^~q{FFrdkb!Nt4V%vZXm8_dlIv%w+(;T?jID^6{M2o*1Yr7l z13}i&%y^lPmDr|&9inWN=f59f-rKU`My7z7$4+~WvG}qC-wWJ+F;-QIjIqPIJk}dz z)Owb_m1luV@t_pOXI5lt2-Ot58iT1q_|}xR7H5MJw+;`JgE~G?VmIxR32qp${@r)fT?(Vp^LBCBl0 z3=cCxh><^n!Nq6LS^HMlpKn24;ceu+X8WEyaemQ4ZjY(uUZ%z1Ldl7!)?v!6s57T> z=EFklT=fb6QR`;pZFlxB*VoUBe$#RN6A3~j>l*K5N1`M09Y|q~7%&6ZgJhA1`dfG6 z8-$}s$Q4+UGpZ>>GlAOaIq+i);^Ckd{@1^>a-WKM9+pSwv)+^zJ}*(h{AA9C(*L4< zMVBzxa7Fgl{g|_CqfISWDgzzQTou8SpE@BUO&UM(n?iQc%gRZ{)xXC2(pvAx;oOlcaSALa4!WKQuG#lQBhC1)Tl` zJ6<2nY@ncFCM=vFq34amkXIRXb$nmE_Pa^>@jqaNZk+mTZ@XdJdHQ@WZLuPt7}8+r zt~8h4ptTH1VyrTG{Y4$3pmJJvEG<5LRDy+h&b-;)y8EUu(_=`kK;skAY2zoiBt!P>W} zc>DI}YEts=lV4$QR64>8i5#Uh`Kd^xg-Jww+WhKCv=FK zI<8?d(x7o+tG*3fY?&;A4fos5-i&~JPp;?{XTp@=O>%(Kn}2n`l}&ZFteV&a^e+*WU=OIs+709_*L(c$6Z`7!~JxgULdXXN_0=XeNKE7~gLN zf7pJK$GDvzb8kuwBi3g5_uJ+Y@0W{-{_eonMxw2F%i%c;l^6mF zo};ww9vLdioytioRClfB?_~5k(y%t;Ubo#)u=&Cx99|2Bj(c;R=xj~#2+kwO$QjpH zdF|%z!)K!B6HH`OQ746LN=-wup`q1MV(NoZ=H}Ss^~mr3>Tis>p<{7v={oe*&GNID z^r>sGQHOnB?+H0;WwkeS`rjfgIFWAsR~Kcy%QN#)U({aOnXqo@_P;n3B}7nBeNK#) zvyAWi(1im(7!Tf&eEkG^tn`vsFqC|~Jq^sd{n2r9Zl%t>IGiBFY5fSCe|p!gb{AoG0!LNIhr9E0E^h9>QzW4EZoN;B7{9p`>e`GAklL7zhANXU?lBtH z2|GV6#Z}3zho25ti5ngb1#EKn#h{jfTFKoYS{ej57vsS%LXjKa33_WYFa0BXkcY`{ ziVMvJB++3L*+@IpJG2uP)EJK}GZUH8*oMP8>waAPB@I3~vf%!I41gzd8v{MzORVPG zmv$X)gvirNjiqA){pTo0hAP@D8L7%FJvTvAKXX1|i_lew4;-Mpq4W24A^E@(onJ0a zPR29mfH-asxETIUFdu}FLyW)I6yFI#4GwyP8JvoPm^~Tna=FBub6%7-Y@%udk~@w! zEMQtNBI2z(+2{woqA>FPynKc^A4UDk zUu7SOdAL*1@2NVVS|iR@As*a?i+G&Z;Owk^D+6&(1NW9@F{6$M<11E%{@Wj#Q6 zpKyVz{380Tm!F8ZBvzr@X7^L#l17PWE~bLG9n)!wiwizuU9R&N==i(evGH6&IuqFk zKHHp@Vjt8gL(fj2r01YyjbQ~ zdxY$d9Iucit@)%V|Nq_B^P$84?7qx|YfCHFC`4-S0oCu0-PIH}NyMH+`)QT(t!qg*B6rrO-NHg6w1#x7ukU{Q?5xMf zc_;=*aCqHr3G~y2$(Mv8Hw)Z`nB*)Jx6UyfKGaKJ<&Jih@f*9&et9Owq6kuZ$@~&^ zBuw^`D_&OZKLg0WvE|}+ z-)T01!D(?}TQ}YZcgt+IlvvXu{gpPypD1cFlyKxXfz~ag984c0*h+>BuKnD(=@{Fo z`}4O)KCgPcK;n@R zRRn(YzJUVn>j~eMz?6`c6l%~vX#x_{t?%OA_r~xu2$;3QfCx3%BX^~qGdrTJqrtz2 z$%Po_?I;_QLdU_cq=-k5iTXG0qC+P=^ulu59xM4GypXJqE2KuQ5nU7L$uB>bK7z0Y5^d{0*D-47|h zuTVLr8AX;3P{l7P7%A3(lRgFssZsOVp_0=HeW^QE-^)CvD){Dr0%O*T<$gSzW%;g5_*ckAagkB z%K$D#yCC=V)TiAVk5i!xrN|#QEZ+V4=~y|2a}&xGh7WCMcKsgSht;1+LsMUKeQzvg z_mJSq(|qOQBQAi-GZz=4w!yjZ>=iRsq13M&WpaKZ=2fR&2^5K+-#$^#?i$fGlw0>} z0X$BcSwhHBW-M)-Dc1f%v$a!0e2J=kA4dqe-1CnpK&8ph?G~Bwj0x50P_ zj1JDqpP%i@%;xTycxHwsk}~hC`~hySN`dJ1DqH&1P*1+IigmDak&5ANuBcL&#i2+R zYr?|WNYjI>z(%9K2pVyj+<$?Vx@A|WLKafAZm4#m*v-BWRH-DW9b!*u%;UNe^+Vt+ z#bY*sLDI~0_9*HHmCvjGTq=rU-4@Gg2FHp-jg=htN8yT(!YPW^r8k#BD44(4RDh{K z{g3VDmdwro#d8yuY@?7I%WLu-`b+{%Uiv+%rFe>tK>5}g#Lro@lENT~D)GU} z7vJsYGMx^~!tjqXKCdM{Uw1o}AbGYo)lP?>ebUi%7#P+%5kojV7=&AFCOK#U;-~gD z=U^D?|wJ$$hZf&Q#W%+l}hRiL$E?w)Or-^yX>T@^hy(ldSl>tl<8f%AWPe z$IjLW_Kc%VUCDmth5#=#Yv`EZ57oh~@NHL!8#|y@2=}~h?PK5s45Qy7>v7?BzeQax z+or9j)knnj&-RG5l+Va>!A_#+8}`_RdP31!WAUo`yEAe*aY4bxgh6YZ2J{k?*fYHl z>pR6Y=o->};A?VP&=ZTMI8eo6FxU~>5wARn6^cg@vORsPXxX;q%aIHL_@8yA5sy$= ziv@Ommo(Foks&sG#Ncu3ZcC=TDlv?xn1SaJib`TWQW_w)`eG4-?|P}IcWSlKX$pCHMz3YsPBHit)thQi{=xj)O3l(<-_s0W zuCJRD8i5SjiOz$WQ+aBwlPTy+pb0G$Nw6!jdN^p>_?_REoXLAzp~(8go7|U$7udq9 zFFg<8J3o@48xP7{G+xhL{z^GJ36deS;|MXk`)SV^#B>R3@<1j_i#495y@T$ zrZ=|2vvm@Lk75~U5`l|qSpfEf8?HW0z-t#gHC^FqK{5@}Wt5d3ouMno>0Fh#18C`R2uQ`R!o7 zN^BPuQ6>6jH4DY{5`AdX)_N)L4Biv~{*EZFwO>KC&)ksbSU`5q?f^{U^hE@dK?1Vy z85KJkChLF@B8BEavjlqio~WW%2~Ci()lAR8z`!56r8twQf{lZR#lc5m!pF(Z&CA;l zc%~6aew!>e((ObIabVuKvl0>uDP^+gT+uhKLX(#k)eQkBapN)mv4LxfpY(jy)#{(Q zCMEwSl-1*AMD|$=%Be*@akoQ48`6CO-m~PgfOzx+ri_3ZbRe3|RL4SEK}if$!$;k? ztha!kK%t|Wkc|*v6)4OmTx;s{33QFIg_ANeS%r|8C4dL=NEmjJZvf6N!MP; z79I3VfVgEaAd`DGCs%zFkiE$9{#i}&;_}Vc_4}>3K?XU>zp%1Ee_}yv2|bPk3O3c% zmK{EjsP7T_9zge>Nk9M^C;GiQ%ys-XnEDKbW-M`}(UrK7S}%K?aH^i@59o~c`o56d zt3R9Np%xg@y&QW}x?59ARJhwiQui@Io_ct8bL8I_GKQ_qTiN+Y9Ol(gYlV3G50P}{ zc9yisT}_A=sk?uj94;0C*^YgtDid785eM`iwdR0F;2f(&`nq4do{2+ouv!M zU2Oj0Wk~*(TQ(0%j=dm*5oNxyhRbgb!uy2>VN>kQybQ0x8Xm8ASUWFNL&qpNs2hX5 z^%l+c+R6)D#BKG&^icE0>-+6c=}EB2f83CUAn1&Yj0)YijFa4G-C{mrUYd}5ebflU zA1|NP5Us@Y+GyInLu-HrD2M5~Bm`e|_ro^i%WRaH6K&wiEUOkgFm`U1@;#W3lO^^W zpQ)aSbvDBY|eae0JLkIV*s7ap?!tuMGyThM|7Be9V9uyK=9=yJCqzmIBM>H}oP9Wsz5~M&0slXxP1AC3> zmPjwmt;HYo*)z9kQ7;wLLh2vDF7!Ujc&Al@E&BeSqy619{^eZTy<}}FwS3hR)AP*` zuztekOufV)EFev-P{jrwORa?;bg7yLJ{gjq6d)Zo8EedXlv7bL4^KUAVNO3rm{nWb z>~(ue(k}sq5&oAbY_eF)xCuCqDDkRm>kaS5#8dru7nMR+k`(`)DZE(EBPq{D5&R*v zo#J5>a^hS@;g zbQ4@(TDf><=T20Tb!ed2j4QJbD#b;&ol^b*v6cb`BELC${+II6)~CPz%<+KbMQ8u_ z&yNmn(z-XiEDS#A59(+~M{ngrBInFzNqj9rQa3hbW|KY*QSOY>*Th6Gyk#A#rMU2Q zTtQtE31q)~$Vb!dm~>76Yn(J25yPf_f7;>3l+R`iO_BCgrRWfpkyzt6?GjyGb*(&Q ziUqmj839GctLk@a-|I~Kgqhp?7}8meBB z|AJ0tq0-8>UX@$Stj|V<%zCl zjG^R>PN>xybK0j3f2opuAp)yCI_fW-cTD*8B zG%2Uhh54L+fp<2Fo2n^%5je;pJSjcVddm@e-$EMJjmiD~ioFD}5-Mao#m1)-Wb}#ZO?6P0qMQ`8cnJoI83Els*u<&QEwZy@a2P+f!F|7vh zp~CO2Il;hN!6KUNG~nFg~XpAll}^y5N-%a*dVXK z{}x@%TU?g;2)QP9C7mcyr{SOlV6|SC*cf8;ZHcaFdTcwJvg8u(Mj;f`Z1E6(cwnQH zDe9dV!D6ke`Lj=AwZ;1Ma_XWgKB};8IJNhXM&2 zaDD*I-M+OcYZ<#Td!47YyH27JXUkXT^ck=#c((`IlMXSS@XL31YH_u^$>K=u`K*mr zM@v^GH-HY>lhhYs3UU4C+Io})%4jmTZQS&WVT$HC6I}&o-~8+?_902%)A)!F*>=eEiubWC z$n6{dWtIGww8D?$CHDHD>AXj2ysyY$N}V=uc*e6+{U*-1%r=wLp=IXxr>>YrE^)kQ)- zW0mSBK$LT|$KiTHLHyOXcNHS_!JBdxlDD79si>+z>4u3;zK>p=qQX>GxD^dKK`U&9 z-`r+Cljhal?)hO*8}7xT2CHi-NWV4?N81<6X|a(7Pob$>@+%M^xktW3!BniE-2RDx zu;W|EIC~Eu^?3ux!amW>(T2DtgR)LdnzsX18y%)NU9PC->Em1U_Oo1YoWwQR=$9z7 z6*?qHb~&NR0vB8S`i~<0LP0lyFNV&E&@YO)XQ5>RL^h=z0>X{+UxWQgC~}Q0-nr}1 zTG4%tcDck@$bXLGc#Ibo7k3n#G%`GGsUQ2>W`pZ+5V7i=oB12NSOsdH`wnA7(qmxfM3A$2sbHH(p2 z5{Kv}gI6v8p{ zo{H5&Kz{b!She2@l2JR9zDuLwMtjB5?YStfxQnzf$!}vn}8XW z%*_1r&S$hh`{d7y60tv}&f5&qn6ms*f0Bqm!fF!(ZA2e~$7`L^To!2CCSHLCd_H?- zv~Kvnzx!Y1JKKOtmxZ$X(MW{3!MQLIADzHt?at!YRepE2FSAYp7(9%e=(YXzr3bQd zt~gq_jlE(a+QFOUtumyIN7zRd!-Degkt38*>O-eoDe1Mlf-S?X7{x!M=|K0^8LHPdcuDqF}M1%kMMyC27m!xNUR zugq9qSCWF}87E;8Ac2%2|rx)ezae_cE2B*6 zB5e&0#%NIUrYF=7EV;qkXRp3o|HE2-g`j6G^Od6a=XhKB0cFbdplNklAa^df)tp>S zh&UwC)239n01?DYymbw3%ccl97|yiEGyw3 z;(hCQCe0=wFAuiEB!z+$NzpSFDXaSk+$N*D%!BQGPTAE_JV-xNZ9JgggJOsF_i<-$*I)V^AD6-G=p&f1g zixV~~PL$1bg(_&x2fbd=4_A2IXX&JxyCU%S1~MT5e>_j>%5w6QS-7qRgfQ3Yr~LG4 zvd2^fTZUv=%|evcp=p0r=@;wfim1>jC24(9!Q9_%^oKhf_&4A%X|0${SPh0qkr4@O zgcXGz_N8vhH6$U;BOn6d-OyZVjg+3V%XUZ7X{~UtGJ;xSoP?3a*ak~$(v&&VoKHju z?t8Wm#|3m7ZN`f_*Y7(INYbCq%;*-b|xoGk0$Sv`hU4k15K6Z)cWiv#~ zrW4wp$p;`cDgp24(>qleQ$GF%Wh>zEKRBwJ$Puf`$O}Dpp6qc)JHpcmdd>X3$4L(_ zvd}x0aTn6rMR)$%MQ&_aJ)uDM@1p!2xD$TE@+D7|Dj+fvQ;bf%Hlad~*b5DVsNz~$-6BUhupb*{{ zlX1%I&ru>o&<(UurfreoBVYJgneYRUH_HVpVgn>~fX7XcXfOi)VomjXO#9+3j)M6) zpJzp7vOEIjEsPd+LLACsX7O@jW{iDTIH$f+`Bl{nDxX;b4n8Ga&@P zXGsXQ;gMT8R~}7C4dJ}{l6iS~cV%^jg+>YY?PYP1H6zPJKN086r<*0*jiX0}Sq!`B ze-c2PpL}K*#_Xxw3iN%z?S$S-*c@caUc4tb(iz7*wbsxk3t45Ia2huCL-{3ZW&5wT zJUTTaBML|d=_=YsC_Ax4xd?G~k3WP-9+zK->XQ8%NG>T*u_#}fz;G+453Rlk- zo>up*&HeC2pfGfLi?6vK81Pz|cm{tY>keM}XU1HN`P@0x?ozQS2z~uih#|oz8zvTA zX+(Xl8*lQ}#H83)K-{E{}j_Z>U$yzfDiTNMykW420J@Cz;M1pn~T<^;CJm50$#EYWH z64FRgBxq((v-_s?8wY6`|1ZB8J-*d9G&&RuC>3XmcD-c9tJ`je;^>gG>wpg%Z(zfn zH;#)}S|%b*q_&9`#i%N$=Ug-oLi3d9|Gq=4?-lERPuXW}dml0--cuRZm<_f-YS<<0 zU1tPkR+ZpDsMqEdx#oobdqpqN<+Z>}FYI6;H z|25FcvJ-`9!Xm!!Eb#3!NCYW9{T;2*j$lhn5VB$)oxCwP#UWUx{awV?wSA0G^%R15 zxqG2&3gEKJm_0TfwT$z>0*!wj4*@*w_S{Dd0DAzvRl{SJUJ@GI=N$Znz$OL5t86ZWDb#U9bq3N8-&B_nIjm)85;_wsILg&ZsJ zmdTV_rF~KPyL>?SI0Uf4?iK_j7CcP~2Vi}Y5KQJ!*h{9sYgbgHy%j-Zxxb^RG6^@l zI^2kyKwF$&0bCiNf&4(dTGa(o4EMggzC54J+{#1(n|=r2{Hq~hO?Y&d`KuRusV!Oq zqiZ)_e|*XKc?{qo69r!Em3Q42ho6NDq|UZs(Mz4`;KO4UKsKwLBFx1nSyZS*Al@k)<~fn?@K<2-+M|%lV3C#Xp@l!12E-@ zQpz#2qZ#Ms?ZvU*(B6y&L7XG)@+da;&z(M;K{trQk&`9uu1PX<$VKZ;vvwde7jE7H z=3m96v~<5YvD>^MlwdH!3o}}k?Z+}qcbOAv%e|LoIaIet%kl$3KLHH|1iE1E#!#f( z@>XzZhiZd904+!+M3jH)9yoTN0wFdCf)}TlMtF6O=LRaw5vwvw(7$@|CK)*i<~U~f z%@4~PM1RCKVSip`wKS&neLmE~<~PuUI&IKsvZFYQ=xd*w>gk9(W0OsdkP(dQ;mAmF z9J(xpgLN$9nr=(!%kVd%)@LH;&HpwFh{+ZrHqG_kCu*4eURZ=pL?+Ux6 z##5>``C=4Z_5#P4-c03(-4>jbuKmY+-&ZSgx7%9Z10a5uvZq+kSCCpoQ&XQfC)P(|oi z^9nJ18s@a)4o%Kr?63fWTc~Ms*{ve&k=0yN@}cW$|B%~Y`|E4Y~?#)zWgTkVm*CcJ}QY<69>S0`STUVUVMrlg51w&Mpbk#EHIin8ed(*SY zj7H<0OzH2+)E753`uSDUmJr*=x}`&GG8)t){}=T+Aj=j*+&lR%w7e`?ZG=)0Yz_PLZybv`&&!HsK%gtn5S$f$mp#=46 zGvjki{hXFawF#dp;ew`g1h8-G+1Dm(fykAZrn4LPTmfE^ye`518$}*SJ5G>sG9O^+ zF_;TDM?_aw^DUtA%_t`-X`oli`_%W^8W}{G<66m%kk=?p(rGU2tVkRv?NA3ViZoFN zUuKBn3Tztfae(4!^Szx1G3kxPddt}v2~TM|bprZUU%RBLg{FNUB)p!0_NIU3lud6( zDo;H;0(pCgUv{IU@}Zlhr)ghB)4YleJabGuJw27jGWY}P%gc}KA)8EdpHY=eLU(p( zgV))&YghmM^(&#(L38u)9gwKzB{nTC5|!no=Y7*R?E4fb_p~rBbU)&4)+h2;Uj80G zI3L0&<&cNL88A&?Eyu0n@3KexRV_&5vUez{YLfx-jP7w_A@7zw_w6r9Q)-H778}IyzLWs8_R5q6+MuAeYYDlWy$!S7* z44ZGF+&cSou(fQ|G5w*(-J}t($QI7sfSGZg)++LNQpe=U6N`h&gWdNuO+7jkCd9Zc zimLLA+7?2`ikAk;&V8Qe5u0_Gg{=%|jlEIhx=3YdmRY?jqo0;8UeZ>>rzZ{JJiq#H`|jmU-S0&%Gs@z2|j?k_JdnX6tuJhHeFz$hySDzgP->Jzks_rD6{IsrVo>{I0e)YpK$^0~lUJ=8bjI_aahnx?x+<{W zp^NV}`CaUHobOBn)d_#?+69L>o8+?ZdYAPRG= zXD*sV9kmu4WBK~H+@ez%Q8jM4TPKJ6d{#!LAIWT1pX&=_7aUaNQpm9=Aeer_x zCT%$R_04*5nyIgclA=omchKcQj`Y{dat*dj0GqYXsvCWFSsGbMryx#Zm-0Hp$ z|E`@S11Ipda&fFSD582e?O~cU_cK3hCXeV-=%J!Ei4P96q4V zx-S=sdDjNu*M5^FHWt@l$&2`VH4-TYF#6IO2u-|ULwbKH>tO%wIEI(uc*ZT~(fN}( zhfEMm^+z+?@0}VgC4h1XjAfI(U5Z5oX)hHD1wz^FAyHOBGKY6`e8z@v!m|qqwdeEd z{~fqXyu%`*^N*kj>L{zOF5aqTP4BtX-2ZxGh_Rx@K%DqUdEuzr@yC?$)9)7TJVPrF zkQ9G;sSGVWM9=>F8%65KkK^zT($BQ3Dy!1$>s8Ldb!m;y=lRyjlzbe4tKcIXYBDk# zAd=8qzx~O`xjCy7DsZ3t?AG!H``M&iTyZj{`4v#LJjz;CnGuVsUC;MVB;qjMd-8)c;A>(h02^boXv82+^I{(M%zW{32KJpnkG3 zRJj?=l_79Xl~QyDej5IPt(LdZ|LXWHa93Is1SApM4h{}h)gg&fFcOD;dVY!C7+Ps= z_#5;jo49YFtS+p>cOyfH%=7G$-TK!OW;%k@w4PYb|2PXBBf_d$nVuXyXSodnTCI3@ zrm9=Ky25Z=>@l2Epc|CRhC^h(^h+ZeJ-0>~Pk|#$M|MVrPvO!5(dZFSF0Di-iwy=+ zz7-zestRm|0k-g_@6NdNvfU9MzL^v*3I>3x7qL3?jt1bj-xCPB5e`YHFU&jLUQWvGdLOUb1c#y4tzGH>xj&-HN!bmG)i709nx$P`fTF4S({8z2FD}O{gor zAmhCavYi=Qv?jm7`!*G)sAg~B8YO&B(mp*D{5fN?Zx9+!tLoc#u>8o0k_yga*3)qW zcf@DFnVnuAK^SAO(E-PEe5IS4n}c{i)@DX=6=exaKApXVo8yo698_$l7Ly|Kd;XvlTElSOB~hlAO%|(i7n0?uuP^9tp18i zX>s2c_|(Ps*{(Fd0tf#U)?BkwdLRpj$Un87PJthPJh5eoF3xyQmz8NN6VpmDn@;RP=o4)4#V!3;+ew3Irosv~N9#>)d23 zxp)-VgDtY_)@v<(B_--Nkhn}{z(D;z8i*&L59(+^BmP9ryT+kiYNB7=@UU-#`7dE; z1Y$IVEr4V>2PIit}+ieZZvhTntGEj}J)6#dQIn+|} z?CGpqQv(*=){25|S?bbvPMjy;K!K%}^(U7t69xPW!GkY6G|_2qGrMQ^JzJXYcWq@_ zLb?K(OxlEdZm3h><=`y<61k5IxH<3d={Yd-nAFuH7Ni_EGL~WZO;g6&yIV$sV@eIB z!HrfIJeAt9y!ZliB&>-)zJQtR9cV1)sV%#tS;%|JJ^y)K_`4u-W+gi<&Fl1h-i7{d z&asBJsIFI|V@mvN=VCDvni~#7;z5DBXNmL0{sPJe0}kx0n3k`Q2CeZh1|yP&a-k(OypU*t4Hk(Mfi3##-4vkJuP69Ng&L+Zxt_IAe z9R02vB}&bz8hjzfk7xEEK|TQF0su>#O{2g8F5s=%kWL>1k{II(wtNl; z6Cc(eXtOUiCx&4x;H}T?!HTATCYq@fpYd6dZ!Hsj0Lcv9dS7ps_G(}HaEdKek^A1R z!m=1Z>SDq(|CcHFl-!h6|bM|T&hK0Q{ zxecrk^Cv8a0B&Hv|B>$U|L`lGg=`>&0<=&L1u-#H#8t6?Nk|EWUPeQw^kO^7S9W9vwqy5}!^7{50WnRN&eu zRsqT`sC&Gg}(0zy&c- zVARB5?2o8ynSXC!it!b3l9-!HOa3oZiZ&A(;qNEcdr zAA3G_=iUCmd@ie``jMWQQbsR3`)iayC&TMf6 zA;73_mkGSRR4tc35l>BtS55+XK|}9CX!0u~VY0jef4_+g$%>4K10$qLl8Csd%n7IEnSO0F2!J`(Q z!|HuDsb|{;EH`;tk%XoE7FzSZJPucq)3*Z+Tr*nL%Zt?l(%g6s2Bec>Yns@u)NE|lQ-to#Kpr3KSf!-jVDM)9zulv?z_+#<(pBU~zbJ_w~Q zY9hPRE}y-Iwut1yh>XzcVypVIS*gnPfe~f%^k=GTyQ?bFt;2a;{$9oaw^9>$&DP}Ewcl&LW9Q~91aB2o(4+S5SPL0;bPMaTIZsg;bEKW7`=2-SQZxfy zfRyS1Tvyk?8wSlnd-WU!aH1@F2_tcQdM)CK9}zRDfc>LG6%L;Qxe=-m9Ao4=KmvWI zPlbj)JsPOnzFc%e#BpUw{qOL2DyHsiZ>xqYyT;}<9S#`gTx!+-5Bg+)} z=$^k!W20tWzAEPI^78FDXmfx-d@qGGrT{xWWeO~EqLr}K#D}%9fTH=*FfO3sj z(|-N$?(X{RhSVO-PK}y)o?w)*i7W(4+|yc!YbwKF;SnxDECp8-rl;C{ZRY^$MS(1J z??4$F+0_}Fb#LE*`MFvs_S#5{w+&o<#?cSoP6RB*={ZgQjBf{~pG^0>$5FggRN3uD zgfqV|vhNTjfF&*-^`h%Huqk{^qzR{wqY-yAH#9Wt^==0*7;(IeAd`@0ru{CatVASw zg=tqZX9WG6`zu49`-P=KWI33|_E*{jRvKb6JC>%2mXh4)y$Os~X$?~=F$V`ad*vA^ zA9mhz72$3QX`0;gtZ(bc@Y-%W{>@#gb*Z=X=9{|hc}`V2l`PHY;I1r5esN3~UZ)^H ztgO^7RFcv%G1;rGsj*F7o-G9X9RDiXP4!F)%KuH-Gp>ViK>Mk-HAHGs-~|O6nunk^ z>tbw17Zpfy@4KA!^}VllY;Vl@+M8!d+;8=5q~`qk4w63+MvCV2eQa!Guv`#)Q7K77 z$o=FS&|J0Au>jPXhz4^cryPnm{A~w34YS z0PY&Y#H1L1Cn!@JF*x{Gqa=ce9s5`=52M0w?rYd7To8&Av4A#{Nz!)>iY6^rz4NX%L!K8*Yq)g+7;JWSeG2jf`2%GCM zLEb1eof}$o{}xnrb+;YJ++x$w2=QL#-Th-#=<wR9G_1=2)RZVrel!(~fYNZL zPz@>%aJ9SSiKN_7mq)7)vS_tEV@L|ZZf_j2lDuuVG0g8iNy&YI%L(Z&nZRzSpzCf&vhT4^=VGW&=$%%6dA_MIM8xSd(2cF#< zu*ji(Vy9P66L7bm1&@TO<;k?Vu5@)Q`5m-rLJhw5jF=5Zn?kNQX%+=>7{FbZ8-@_y z%P5+#{YNdzW}$MzJ-Imk{1Jt9FFS$;=rGJ# zn{>a-kQZ!{-1S*m@p<6uV-h3=w%(MEmFX)*u6F&;%K4>F?Wcus(Cj|RF!Le_=`idy zBzK*mRYLO!6erE_hx32+eVH?Tzaj_LEA)Y%BWU$W>i(#go_>|6HbqnQ8T8TPZHEPmDda~&s!o3^5mqxK{jgvPjnl=2 zlRl~X^3B{fCq(5XVdZb9J^{v=bmF2Y`+Sb~#{`+tAfBXoEga+`UNjc8IAwyE(?I!( z4`%^Imc2qy5Xl~8DH^(n*)mWVlACklo;%JT4@K6LAHj2va4w4hMv*!Rb_5|98GFHUs#ZH_lO+*!OPqW)6mA9pEXAJZb`|$6P&oy2o-RErCV>;T?;wy|=2H1Z@of{1?q zJ0PO}(t3Zr<1+O7w?v*W1egApVY(6WnN?H+(?M*kBJqwI_n3+N&6T{^t0!S5jh%!{ zp*hmSg0;)ow3S6sPb+5`39>1eu!a3J2&xT=UJZv_M=cV;V*Y+`jU}mq4N&FvT^q#w zBVB1DYZZELJIhKYM(*zV+wQ=sHd28%oJU~A#FN@d10o4tw5-RoU3zchOEKiGwI@4 zxc;>}u>rE6mmm3rni0+Jmk?=46~u@zx`5)|{MD|to(5Z&MU4B0NVBdLq(ZNEQgYZo zVr43ZzyFL!!$Pbf%M#jKGDT)#xyWuRjDyr(LfEj)={T)5@eE=Y_iHudnxxgyi>1#D zy+7~@ImRvOql7Ogd|!!RwftpxK6?aph$f0dN;}O9`T#}-ge06EFrgJbKIt9GHw zMu*hT(L>LcSddoETDfhy<~zeLSw%%Dfu{6N#bQR{@e zhc(nYEdPF_sFSmS@!Lm5xN%g}56z{1?sadImjuvkobt&8$B=)981VU@;hf1L*dGsH zQj2hAQ)s+}PYb!GkG~C_FpE)CU5-}UXw29!8&RlpikKunr(Yk_0iJie7XI)tU7Ll(D`UIc%#+_r2{ zK@q`H7SvCiG|?e(r10lPVzjaTjNI=CJkq&-NGnr!Jm-fg<%mBaveOPs&24;Noin|o z_?Aq&0jT+xSy(>6n5T)OQRZG=Eh0AuaBFu_*nG_Ze-g^1zCt6BJ)8-)#~$4^Ij836 z6{NHrv)P^D_^!GnjbA{)`IF_M3`&jh-_hHclBvoVjDRUQLRn0y1?2!ApDUH)wUG=- zul?Rrub<<^s^oFE-(O^pcJm)WYKc>csZtv$X&RS@ZQ)6ql51>UUV>K z1wM+}zovYb9JpT^0Sb%npKQ*pfnu4FlKIjtP>Q>8&oY%t_37erED5%sZ%PCZ^DG69 zn19%n@`Cw*3_y=p`$-N&fb_o$_U*|^y`|*jWV$us12tK$q6DksO(97mJ3KYwIj@}L z!;7tY@%g<>&cY58#Wh5_KV=J0*J$wo>W(}8fo6UHbD$di{0`vf%Hab8!}mv&XfgrH zgJ+V8C(rCqO^SGaiccUT--~GT0pQ3mfG1cR+wnYYjz4V`V`eUtmxcir)MJ=qUvYw8 zBi7CuSutgF_%C2!_*7-6k4h+@h|w8q5pm#fY}ZxXq|ifN*NlY#%oqDpVlEc!dWhK5ztwk_BhW$MymNrD6nJhlJ3 Y3_PD6i1tWy7IqEm-vdgb{}CAd9|>NN@c;k- literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3cad002b91b96ce38780bcad04f635ed8909c08f GIT binary patch literal 41189 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⪙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 IKL;26A1oS`FaQ7m literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a68f1d50e0f5c229286d5da6d3759772f6ae5add GIT binary patch literal 58959 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%0AgF z$I@FJCspy9Owqi9syAl45tGKPE=WDu+5bpVtxfpLf9#}ddH^n?3h|BuJZ}g8oZoe( zNb6>%GMlvP0ceiHUI%j>pl6y_UXm zoJuz}Fr^->>WfZ^f~x#5s@4A2aUjSD(%GJI;=SgD;0;I?cAiymuY18WLCw8HJ z!Fah&sfvRso&72dj{e0mmnL2%v0te3kaM&LPSI`5b5i55iFx1b6PWPV+!wM4Nh^Y+ZQ>YC2jr1uX%vt+wv zugdc=ibstK;*pD>GHn8N!`-+bA5QSsTDC{G%|OYO_plFMVqhb7lPe-_JXVWyZDCr= zQi{D(?r5(j&*)X>e8o8Mpw6>pzgLP*=DQ!^?c;DA94;_>n7@Wd3j3C_^YGt87TIis z&75Ygjn9jLBh52*{T;Cu)`!^Y*k!XQA?z(*y<2KRnn!{N8K?($m`S^_*A}x}^u97E zKR>R|`tBLFmzvgA;?wP@q-`6w2ifbgR0CkzQs|h{f5DRwpdDb73^)esmxg8-b@!-WXP|US28qn78 zz56X~YW2jH4gO%+G@?M^RE{jmRN8sS38>SpH-_dX<7LC^h6f^r!u>?yi0#soAmKcjeJtrT0bcipvo4lo;yHng*hD?D;6% z<3^tN(jsI#;{xSz(f>sQWF&q&)9ov3(@5`HmSkP}Bo~i=tRPIIiV$_cIWyP5XMD_1 ze+>0Id}wyL;;eB`>?-Zpe}K7=@JnEOZ9!=H?{pI@8v3gW)LeB@>5R;FhMEuPE^W;a zQ%SKJ2!f7=dRgj~FOmCMgvj;0Iz^vDTk1m794PPIyXAL4OOIV}(AV1jd508~H!K7z z^!K3@N)y$-cA*N|{oBB@VPU$S)d14KQ)*S|bN$(taHBAnKZ?yaH~&^y>G2C4o6+MT zi(UeVb{LB0_hOs7&})8D94kk(93!aKx-a2DW!U6+InJqa7NEJ}yX2HndRh;TIketh z<9Md4(h_1#2FZE#SvNT%3eMXit9E`GY_~c*U=br@5vgRr>O*a|G{1WOvF)qpd5A+M zhLxw{QY%szT;qn=8APp#(BoAIeFw(dg^dY+|b((~j4L5On%Wjw1k&i+$P<aSTwod&2zs`o2O#R5caHS``AH~Rv`;az zup%W=ezk}ebr87mTPLnb2@Whr!-1Q3R9*LB;mK2PG}6rl==fj*gE`lFpCMSQV%qIw zKUO)*q?y>&jEJf8;Wh^3NK=Z2buvzbPW?K_^r&Z$&c&M)>u~T=Xq7-~{G6BiyZk3u zXP)kUeZguLq2XGbMBSGt>;f(GacBFs72s*Y330^KIR$8{`JrZ*l)- zUdm3T^HQ&Hl4~r0B3Uns%UPg6f$iPyo!CPo_Su!A%xU~>REodE+CT@jWG-fH5KR3UMk&gqVmTJ4)96n#zRvAcWL4zj{GIe> zna1oE`ZAPi$%jscaOvZF>oYn&PHtv5x=+~h;a$O!a{nowih#Ed zO=Ao8X?WkJbaI{4vfOr{i=kAgX$d)o`qah|2D3dQ0`f#R4~K0JQ&n@ zHc~ycYD?CpX;F5rM|YpRslZI`vg)j`p$eZi!?S{29liynABy;qKr6%+c+y8dWAk+Z zZSVadgZIxc!Q?-y^DSU_)4uYY%H9nyBYk)0jpffG@T)M>ufrkJb(jrl@?yV{gScgz zME|^}2Q;z`Q*NG+o)|p5726vubTS5x6nzL&5QpjmJ-R;8C>COlvH8t@y=CWtPH$vc zkl!Q;H+cU_KJ-Wq?Q%rr!v%Is+;AD=Tn!QSt|R?j8P0yl+B?)fK*kKOx#osKyzV$h0u$cK)WA`x4A4Y^O! zc>_>?y2cFGyy7v<{~6*TOsIh3HS^%YnFj}z#~5EvaYha;t468p#=`6VO+W zw(@aNimUXps2R}Qv-H?oekFJ@SoyjkK(c*U>!ygz=C>>}4BG`bDT@Wmf65Z^PF=S` zs0t>oJNZbV%mrz+G!Wxz7}TF`AC{Vv1L8O6ON18Qg2{hXA&k(lH3Rf<^~XViqBsvg z|B@L6xyCFm9kO7mBe+*In8lY<#2O*&Paccwoq=c`EIiW~%|VdWP)UKZCu z=|%#p6NWX~bjyp92@O}(hrXk?XdT1;A2+k2Aq62A_v(c>jY&F;P0OAfvuW^MV}uGg zSP=Z%k(%lQ;fLeWI}4f<>z7UOnX`{x85ljjhsnFGF)}o)4!!}bs(Ek)Bu1kKWn0?j8votq}$A ztsLjAiqv}G#G@Hb0g3n8lw1L39jiap+4BLbA*47>l*-r0yDGa!$?MLGacw*d9`?P5 zs#zRshe+80NR0cwMMw%%oh$n2{SelDqAT*-@JUU$#SBPh`Q@zUE^Na;dG>99#XsSI&MnNajzQ^`;ND)xIuU1Kzqu&&G-sO~(u-6n<- zLjF|0pVM6rkob64VA=s(K0qcMI8X&sy@hhITcwm$zPrvJlX zz`Cv%)__xX9M7~Xhf&!9tmb>0^vE8#z*^`bWIYQ#IgZaCRIB#D?JcceZk5ty}(w>pwh1B=5{0wdw1}7upt@ zhW~E=6(c^i{1peho{^y&foqa%slQbespPNea+{E;^EvoTJA?Zp9JPRy)Rc@s5ZTuU;; zU8#YcPxI(24;ngI?n;{A11ocZWkknT%8d-u7Dfd*jrfVPA9BTDpA?gjACk!lQ%{zX zDiK3*Eg6{+Z}pvi0g#R!h|Xd9$YC&J>bPmVv8=`}BQf@k&F8?7)}(l|Pb%>CQDMZ< zXHy9f7j}eFels?eob&fooJJ)zTPpIu9ZR7rY`6WVz!JvcW5Z7srNYFZiKc;diAOGT zATF?E@9J?boq&e}{^TpxOR-mubKKTV#G=j03qw}Qv+o~yT16Ae05-LuSG!jxIaya$}Tw`K#Ijw(8obSzY6z)@Weu=Uyz`3l(nXTI?JuIqh$drOhH zsyFQ8QQu@ zpP>j6@N09%k#jP!=W|_Hi4zXL)UT8CKcnY!oHi|X#V#fuVw)>1I&Z*2SL~Y~Zs9{q z0wb2mpR5ocCGGtH!@$L{q{)*tTp1P4h6bTT{atyVV`Uuhcga)SU&j1R?@Df3<=8Qr zJy4fMK;UP;WSP`}IT6onEFId1BxpbJ3}Dhg5%!iJPmkvr=i;e`x-B$uMHX~5GL^k* zE5v~PklpbY|Dku@nIxUq{Y?AqQ)!m@8$0(#5p6Bls;~ffKtNJ=CfGx0{o$Q>|NZk5 zfhS_zMA57>l>CVIMSGc~N;sflg4S{9{uT+Cb#Ik2diCm-6(3tyQ!t7J0C;C(N1l2N zkFZ%nfx`AU2ppKb;mMi^IX{7G~~$< zlAfEI4ea=L4LFvs(pRVgwHbQM_q^l4deR#SuTG^e>?m1D`w``FWEnOt^JVw zo6hyNz3TPY;fJV+XTPaIz5zROLm?{d$33L<>Caar_5=pHVZ<-*{J-{|L!CNvi}9SS zDHu@EIa%w_RTNbiq?H<+YT=WDwY2X@I9gVq8B)SqZCjlbbkabjUoRgpO7*~lt4x*^ z*1T8KqzS^L?8)clXz=^+=Bi>J{8ByMR&kb)Z~)34 ze6EFg9B^>AAqg$-82*NP{Ol=+Rn%7!j~)4HY8a<1`8MK!s9kXHm&AXn561*sq?qDm zr!bFEV$|^+YSqh(K;}P8Yc^h8RPSeQ`t!@pdMadGARL?0XDwhInIed5^8DUMAEr`D z|DxfF3a3|(MGSPmfX#~y>E+U+dT4`Hj~ha*7t1`Ow@^a*7k3kzUT7NwB15D~MWsF% z`r>+rkHFc4ko5K&GP;yW$4uT{B0+}1)~AaJi)5AB#vI9{ZpydL$k#0DCa;2EOKIy_e;T2P2y$a{fKi>MB<^XE=?+3cWUv1-(u2j zL?SIB#uo&NxZ><`tsK~18NT{K}k?sb6-( zC>2p00Nu--H~mHU`j@i5`_s$|-~61*?E>pnDqw1rU={i+^`;gn@o^Y? zZfcR22pL6#EKWbx7gjS4)YRTwfC(gp%@BnHo$$$0acIEQ@aSbcJ-VbUF zzwkUd*c=a#BmkhzwZx4+-%*cvkc?B^JPRF9Ype zL(xbtBxWW%^Ny&nU8i<0$GO_^v&!M+)8(4o7G}ph$>GG>+!5Sd0M$iM%i*l~7AP#~ z=&#Sg+kiOSoK@N52*|&XhL4JZ0xVJ>#KJR^_W#^#WsWVf2$w@W$rWEO+ogf*kG3WC zg*bvE#`dq^bs#wE$Q0yw=OW^btd-`iCZQ!SJ{aL|p@0G7!ql--m`=A4w-6AsOr?si z4q&FW&Vx#|RH+Hg4#B#gJ#8xQ&Qyp3aUj`Y^gr?*dy4~J(d~kQf{JxFxUwcZTBf{q za?;i-iP9Fd<|2l$HAL^MR@aTqGo#h5UM6wHwU^AxfjR7L-e~*KS_XT}`aNN{=byb= z03qEHptGQ;*1R&#-w6m^46I)CqpL(QH2=a-eb$1kA!`Fh7^>dUWs3iiG=(Ds@B zr_%$yl~VWWuoJeyx>j>wdZ!s z{dTR?vOUu(dz3j)x8(8p%NrieAz&VQKxvx=>*6>0?1mnftw{Ve4qd52i-RurRu!Wx zHQ+~I3NcQ2&K^YWxL6fb6S|83c}vPpH`;`zgYJqKCC zy$r3I!sMecA9*NJ#)a{}{ueyt%3C zV_W}dY>FDQxR+(<7-zUQl|;Cl+rV~I<+7845~KTm48;`DqD~@fI5Y?F{RMrzw^TdE zAKtpNe=!|I8Y;tv@i`0^Uq(40p3%(;6yG8DL^P(X0p*R~#;yH9fe@akdE0r+UJcwr zAke2e@w|D!Fvg1JTS}!ZzOh!~-eJc8OV>w=FD^`$>^mx7OG`yzg)n@_Yp=74(TgXC zftwD{6U14|TH0@qG)p<-zQ>r0W4~<_Gp~8^5Ffar-p%a%l%S*TOKV|$cWy|gfy|rB zhzwMBsMu$PiteMc9)lT>Sh90iWbuJ#PC18CX<4$Ui28T63ZcgivnEL>1r%DAJ%|C(jf4CYSDL=5tGi_MFWnLIQV3pm=DQyM@XMD`ZHAaa7Iu#xO$y zS{cPe90jxS=6(Y*6^qEkqfkZ>$Bigx-r#*lEZ{=ve@V^$zF61xT|?{UAatsjf|*`L zzCGNmqHPMpiozKDwtRkzed34}G&F6*>Tu#&J?9rfNF&W8;YCI3%d=cUi0|Jx({$Gt zR@suycXBU?sK|I+lxG|^QOh^;>fbh4unA75|53)~;u$`6ihe{qM7X zaIa_Qif|X=a zYEf#8sP5TbpQ^Dap-7DkggEO_J)YU6A!&87^mX*2QxJ)O>s#&ZsyW!vo&6(2|KfY6 zw}3QrrGl|e<Ft-!j?4=A?+$D&ah`wf?gfQb{GOKoc4cXE`TEtj=85S?*FC0+ z&DXyBQ0LjJ7uyjPrSFS+3(V>Vv3FXxrPuO)6AWBs7jrA8h2?^WuWpf*B@h|(Iy+W_ zqxA0i8rF^qXOgrxBKIS6(RaYi7T9TX=|g;UVrqbMkI%aOQ6rb; z_VP*atf@_lqj0eZn!eJp-(LeI=KLH0om(av^cu-n$C|!0=GgLw{koa6PZGb5)thr? znO{{dl=~&(amxiVwKV6C1GyYT-kOGLHD0Lf@*5 zrd?8Al57gz-CYAWZXGV>I~#pBB5ulj&AZ zdwOV3;WX0@qboP-@eV_MMaMg@B`U|ffaCR>gKu?PL5(_UAWdBG0 zQFT3zh_|949Y!ek&xtEF=8WmjJz~^Q26b#fG<>*bx%<1&2-cElbLHaAR;T;7MZ8OS z6SrTD;fqdB=V}C_$(c>XLr~(S?A`N_R+4hNCI98n)X^O2k?(&qkxFt=RIo0?|18X5 zr9eaqGI>!@|C*RW6U1KYc(_pV^(0?Hv8C#J6<0P%Z2tO$jel>Y%%JKWSzE{(Ri{|o zje@ObQaJ<88JCN7$qodPqa8DYiL+y~G&S__kALD#mn^7T(h(On`J+Gm=TmJNt|6SFA-gYiFhQHx zHww_k&nYdhhmBem3Z9o^&dE7Jrm^)nWGh8dg&bIgO`5RrM)SSU?gQ?xdXStQJv18` zpSxs{+@I`<5_QDXR69HqR<*;vNQ%NT1bueiCc?@OmYIjWz@K^fTAQ7@Hvmd%BKMv_ zc^3uo!3(EbAut!mQYSi12OcLuP(8u@t#3p9-;x>wg;LK~QS?tLNQ6hV#Y zijkOHI25TAc!ImeECxAFSdW1W>>I{=IEj!gCb!Kqm4-use#?R1^2J3B^zLg(3E#{K z;NMfFLZk#4l+ON{bg_r@7Dlj!E3K$m7YQQfPdKL64zxUrIAktsjtfQhI@--2_t0TR zm}J(Hpz;ywTOvkjn4m_Juh*@D*-=xZ@+&?~_xaM7*7J59eQc`mM=ijWxEGjoY$GULJf^a+r~?E1 z5|zYP-R62cO0=k*-*a5tB(bf(1BBEw4tuPAX6~P>ef)D8KK$yZZ{997^Nv7ZQt zk1uASO^78k$KVeI`iV;jet(@!&k^!k2ffP5FMp-I*`Q3w0w?g>jUBaVG7 zUYFn91=40LM;gv$gm`9Bn8J*|S;(2MyZXeYgMr!OvvWfL%xfk9n5JM4Sm)03-&;4% z`e|Se6@69|1=k}%ySS5OrZrVz75xtb)_gf-bYAx}n331m&axPxN0`2)-kf|Twy3md z!XfV+TG)!i$^Ivf%Tji0 zyRlO!Jb7gG6#s?ky6kbPG|rR_iPd5|gUY`KE{V=`nci00EU6H3Ub@aLHMj1_H>L=Ziu z%pj~*)^0^xRSXoeK{L`@Q%!!Y8tJELV zOt907;;rlYanxCZlU{vUUT&Ld6|l;?4R#aCZL6J-SPeMvlcB8V3453xy>rSX??l+H9wG)^)cfeUlK`tTOiu))_#;?CH|NHAT_cs zRMFB%Uw_(OJ(=l(+AAS@4nqnv29ZSZV$E&w9r6HI+?kAwjAk0snMRz103pvz%~f?8 zbih~M$R+{YunKeM-#!%$TzBa^WMLr_!VBlaWA9=lJ59Job?^p~GF*Ckof<0F7XE z@11g){uc}Me&bM`AF=8FlvW1`f#0g!mH6*_P3^0T+zUz`Il5Z*S&gQzKYlR&&7QTN zoJbg;+EW=S6)Gz}0Du{pTH3LDikre5EO@@3J zkSR*W-)A-0Up_ik(fErO`oe?PXX?hh`0nWV<}5;)&Ryhn1)OHf zZe`Y6^thG#W8a%~L66Z|9>Z#jWa9M!?->K$ANj`mzc;ipBN9`9ZT-9KRYE&f^Jf7U z$7_%pqFnZC1h%?ux7>dR(=_|Vw*$vJBPy<`M8Cx+f^t1V)F;y^L#e9tn2Z$b4>6CN zu7(nc37e-nji03Uua>cs8x?y!hn5s-bH)Y=JQYx6q`9aAb#=tDR~QMancs;=^}ZPh z2LLfm2?+`6pTcf-pv_H9Wlvqd+|d(qg481JUa_FBrk;zf9=0E0Xhc?!Rf^yg-t2r@ z@!8ydJ%8d!+YfdF2)5^6W9R`fx+La;f9sL|XD5^c;Djuy%$%T=Q@}wv?-yL~Xay;} zX6n>wY2Va`pPwuxGB8EN8$nZfCg~g**lNQ|5uYWu>P!DWvrPOp^-c3aZmJ z;5-Im%ASLh(@ojL_H%ET6({NY&{bv{$B_7iB}?X2b#-D|qL-^WcA`;Y8@{XY&D-l0 zG72#Uj^wnx&&s4Al*G_{?vD+OfZ;fi7QGo+mBQPVv-ZBaTz76JneW#7*%JI5u=&Qy z8YFtx2p$v*c`s6DeIv&96!aZz=nAT)8f*f8Ith@6HfjHdKVKwO{9e=S;dmr&tC3QP zR1m(;z|o%Qf@}>j{St)PRTT2Ymm8#e=FD;SKOnm2&-(5W;pKAMAB_gN}!!>Z8y=uhppRsE`e`JD>u;Y%sfOM%-uXN?@W4OV;DfR?vikv zDz*Wj(oC}a_y7VH{E)S9%GK&Bn_jPSjN?sVE*@DQhmz?h$-Se(b-sh;Akf+w@TW7o zfL)&3d2U3>mKgZI>B|8Wk$%F+m!3Jz6D3gkkC^RuJ6MyEbN7TDC~QkT#>xtj_>r#U zyT|HN@8(6n;K1e3t2-AXBcw;QE`F@)h+AZN?rZI;)77Re;mil*sEeLm-21l+mq^>j zFE!K1Gr;EygXC}88(aX^mdzMEQ3`uvz?lbk2URGV7rw+eIhB*f-`Gz>g+5{??oVS8 zDnJdJXv)jL750y6`gXlP8N!urVDy<4H*lJ#p1|qiepqKPD8r5Q2iW!t9!~c=@W>^Z zqoi^Tvn7Nh=2ALwl~PT@C42n?B!=|@x>*x;QGrZLyqVDYg+(ZD41;>=act9vio>=( z+AA&tK8POS90a*zCi<^g?n`_0i7FS9H`qF@CjPYK;HNBZ;2T#gWXgy)0DL*c{YL*j z6{NSH-jPzjgXorEAdxxP#oh1AFyDB(+f*W zqqt?ukJl=nCzl70ph)MM&Jxd31Bp9#c0e2QB>cCaf3wMV7si^KtCS~)Ed*ZpEDqB5 zytF&!@-iQ4{|XFOC<>FG$$s`AG{STMh9sgQg*klWj|7$$89MvqaR%q+k0Z}@!q`_T zmT(5f7KyM0+51$DS)1cwK=aZ4{hH6EJM{Js&ug4>A32c{>;WDp=+8a6y&21(9bWIX zAMs*(pX9Iq0%_%HbU!Y?UA}a!v$0D4a^eHzSA!1+vwV6)2!y%KHw$$lrB&p+RsjqX z0i!Hjp^1+Bp-^4dSKRia??Qx!-JBnmA#ADcJaDYzGI~n}@_E3_&@RL3iLx2!5931l z`wF~IA*Vw+jkOb{_)Dru-&f2GFRMJK3&oHhTU?%k; zN&CENV7O@yhzrESIJ=YX6JgNg$|8VJks5|MD}aMFum5mT;ne1LGs8xWD^J@0f!>=n zP}s?Y7!ld>j8KQFA*n9u;b_Tc8-nkcCF-q@nHauVSVRub&t zOE{n}Sxzko+7&SP&j5{i;z041$d7D}dgbieN0e3@8-i(BPkGYP*%=zLdI4@}pj%O= zi$$W2{SxE*%zuN+?g2HHHT!3bX6jpZe`|v-?G2n4!6&zo~{Q09m`%07j;*K^g7Gc+$zdi*YKDM7K)*RqVA1Z%( zgD);6lEud0%_v(uANyE`V3sG@>`EySUxRAp|6c+-SWnsydE?f$(d_hkRZ4rO*B;jq z3=lUL&U@JMaY(C*zN@RNy-tDR9q&zZA}!a@)v_lQJ%R$yoq`M0fiVBKsUH9>%I#@_ zziZK{5s^6Imr3CgOH!DJ60o2G()`z+gn&ua0pVi#3lqlUm0-fYG?NA@#<73d678vk zUoy1oY+7<$cD?SE;Ma!Z2OoYqP()mR;GCn-5)BgM zOS*ndh%rtH&>!qoT)}H=kk;E#<7#FewDiqUJ0a3q-tf(48{hu-KW;<>IMKzo0;`t# z`VGh3gzWO0BbJzlGS_L=kSF(^g8UTE3E2WT+OL*^C-US2PgenjA~z{H$t(6RyB^GQ zVwn|mvWXfnr)QI-#K3mDgQgNO0;jjQo#0+v6#R_?YF4=^`|s<-uNAXzfN^X!DQW?J zWI;4kp3M^CJX@*%FRW2^576ZMzTCIpRwhE|61ajW;yeLdTPG{c1Kp7LI7HU_AzL*G z9;GHKKI&TNX!I_OeuA2KWe^8xCjkc1FznGiP5^uKE%oCRT89sWz}Mfcg~RU^R2wG~ z)9@93;WE^y1~^^5HAv^lR=@F&_MfiL%MB{b%s6y_T}Hnqz=pRH^gE9jVP2CdW*Md` z%Mw;xQ6Z$2O8-kXt~=rrqwlZnZr2J}0d#>lS+U#IbxVYAanzEmq(RNv4YQDWG_74q zI=+9U5DKMisKp&0g?1DyJIUQHjawe=H(y={Ytuxd$3+SxZ}atBg(}Kxq#I_AT*lI- zms>Vlvhl|q*}bQa_JXgg?7-goqelyCOeK-d=NEau_d+gj1FyvvT*x;@F^}Qc>vU(& z7Y?{|Vy2&?pdIz~RIBdq+tZ)ioIJkj{TF?(pF%HRyIqaYfr+9}n7{yo-FRLZ&GRtCfgg0jspP+a3DAayQm|lh zL+nQsZ5jv@)yT;MoO|cwGqYKEaM#NMCa0bU1){wzp6g1O+ow^G-VHPcz_R96cV5mH zygw?a`22JjO~Ix?hTy=-J$(Gt4oD>Dg=#uZ30~vMKD|8dxX(QBMC{6m91vWl3;F!I z2@P-yHOaWg_H7?#y~Hg6dU7a7jr#&6JsjxfvO2MpL`qrS3+}!^+3t8HJ!pW2U)(VY zuED>5zl2lDA0t|qv6!pYhE&~z6e6rLaPUQv3GZv3A?ZX+qJW{`+g9)K#}7Vf^Oa8N z+ez@imeYCUpjO(wgN5`HH4_|~PZlcNgOC0_7|&|J{D00r{;byD8;_?&Pi?%66}y68 zh+Ljj^_Gqp2^K&NR&(I_hgWNnKx&eauBX_Ve4jDjO5+E1C4vg3Ofjc-~7fzbBo7G2i`1C15vw_Z96xNmsF`9 z6oge8!r^ZchAkwvymxreN-Pw@Mva+q&=3KRVx75Y0Gv)IVvI7a3f-Ox^c5xsVC*!Q z_lGhXoOCc{viSg)OXT)MLBS%B#uj8hd^=n`J3G6WSVlMaB3T}IQ6}*^_pkIdu2OZP zjtKWAYP$cI&1@jbx>+4@FW#_=J}xH7I4H1o)fe*n<7%YJwfZyxE&eLK!C3fvTog9m z_R z1*r}K#fz#|&obf9!hTg0tMAKbJ!&kIwk}2Yb$cKzBmmKbxS-mkX*X&j?6Sf8H#J8O z^jHPh3WS7X8wRBNT-3)5X)s_CvfrJQSc8da*NicwWHwRFTu#w#go^m@-NpZXMsn*a z)Ei+L{4jEe`wOZY%;{5|ms;Hzui&>#9tMX4$Aa1@FqC$hl9ECL@T6c@gIZ-;=!A*? zc^VZc9YlS3&9kD(1=f$lOA`5n2NKX%c{Q=}*GcA4F@Tuit-`^T5tHY@Q;JHWf_;X_ zkW341rBJQJ}bY_i)4;x1TlV+`QW# zFyb>LbCvRb|mtJZxFFD3Er}Ogv2d4J87?Jk?V%o|QV+ zWa1an@T#8WSOc63FuMg8z@C#{oo;4hAtC}({R`@~gcEH|W;q41#&^-_6`rbUq>9%Y zG{0t%Hlu(4+m#Oae*euS_QQBS4G{k3WB{Av*E0*T4Fq^9gik>+43D_M`KmZj0QL8a!>;y@w`{ek#ItJu-{Q`M&YflA>v>G|nWmtq5K;5N9rW;+`6zZa2V zN4FLlhX)7iyYJ|Me5Sj4-pOFa{ybZPVRjP6rG24=itSzP1E7iz@_-EXsD5jr$8z_U zQh^A}5HXj8$0JN#8~ptFhy^;}GcE1`eMNb=58M9QgjG-zWulz4@ZZ56y-bh@HafSn zre;ED!}EcqF_2Oxl~Tc`3YeeF)rfrTE4~pI{Y0%2u>Qcf;SIOn@3%&PXoE<J_vDw^7;yu^j9qP#57$7}HSlI_kU%3pm{vDtbS(5f->5Uo|QhaDo2% zw__A66n&wGYeO!=utcM%Z*Z=e+#p>ng)^o$RgxKZK+a^1sHGZQswe=sHXMz z1Y)$6lW6t^cOLbSbxk(qQ4_d=<~1$-J8WCmlI7s~odObh_AgtI);f^;DhoiD@5+Q@ z)b3ELzXbOWUMK2hiKvw)8O;1%Lo`OZC5 zU`tiBA7?q6F|y3}?Ps)aoU~Dw^cIs-fw>oJdR!q+x}+#-PON=j4lH~pTkx50d1X;2 z00h7wR!&f~r49c$`H_m9te5rUEN zd~SKTOLz~%i%%Z$9)}S}YH44cEwK3d2aR5y*6mdZ5I(84x2>6p*k#C085nu~a=V#r z_CPZE-j(d(?VL+!I}-4W!ER7)Q)CW8N1mws;Ly&d<<>$YzKXb;tgG@KdZzcrojwv$ zsqE|hDQX-mVvV0EdpW>00IIL}&NB3%35hue`Yx=JIQi{2@yBAUarlKl5VN3qJO^N| zXx4r-`((B2_VBhpikL?6&(ELtL}sZGFT&N@NZUSkbN(c2#Y3Z7SdD*X{1=KBq{7J* z44t680W9CCNRu<$z+HEec%X4rw*3M60S9xPrLZkMJ z1a`*<40*^U`JI$_1T+yclT#`>=v4F$7G3=!`@1)K52tp$nj5e1*qLm;btw2L{ti<~ z`7(5)MJvR=0QT^@hBqC{Fm)3v{fpk_)SiEpJ#|24^0DVQ7CnJoK<_t9IQe8csPbq} zOL6jx{H6N9qcPXO%W-?NSJNIt&U|?Yq+@>Cfczr;yk#VXk^eAVrzH-L$46|}OaL7e zLIOddFjY(Iel-Dzpt-?V(87e-{}eK&@9X~p7aG1F{_-JWTBzns<#1Ck0Sfl zcV-7o=G5XKz}+=^@s87-=dzwgPZjE9kz6r1hYPXsQZne+pj?7@X;4(~*DH(JA0CGLlgf#Oe zho&UDO^pLzh7R^H+<z36)Q4 z+UH>MAZm4Qd}TQM**uw)sZR8M*v7x@f*9`@U&+nY8H!wDU3KT!_gzowtniqX#T}AP zoSa&UuCp2V{JBf_U=5 zq1}x3c@kn7T6Gtxkr6y|HKYH25(dhUnj^@A5W%IKW4EC4(oc?j|+2FgLZ7+Xu`8 z@xA(gO`3?RHul(U9PfnB6Q!>kW+yVcjD`IcJAq&OvaIw|Tf!p9t=Y5@^Dr8C5eA^% zxCN|`w~Ci@HnI1JTRv5SgT0{O5#CyzvM-f-Z>Kd|lF2gdLt0#uNhzzfI5lI9~7)t4u7;@-__wwOg??3ULFK5~!0FN3&+k-Pp&_C}K4o?>|l1R}Xmxz_sgXJkn+Ezm_TAu~k{sqL`h( zC^#GvMg}O7R%-))X%oOc@=)Ie{|%~B8Zdgly*nMoR!=%?U9AgDDtP_M_mzoK6(s{L z(Ug@Py_AIpJw;qH8I>8kyCR(>molH-3Z@z! zW=)Dz9MB~BhLDV+`pejY=P7;uS?6BCE`yIrQNFp;pF5^MUavpB`UG!=FWxaMUP0m& z+@W}hyzE7;&MTwY9H=!`@8_(?Bcs4g+Bl{fA-mYO6hGB9QctWX00v|$VJZy4yW9Hf zJ3pzXJRf!|LL&dF@5?Hicic>5IG34ekp(82$wHxLJxsUgZelv| z^1>Ev0*(r7;8*LXu;k?r?>HnKIF!of@Xjj|kJvTiU_t`rLqQv&SG3+;D|GA^T@y#zc;%+E*y z*)R!Sd+Cvq1ImCdShLA6W@6QY?36K=WYaYnP9Et^cudT=Tbf{6jC%E3A16c+p1vrF z4!F^Cn{C?N2URKia$Uar7T#QZ|9Hy}@k+w*0a|L`4A?PIinTI5F>T-4+pZU_UMMER ziis6%j`8a0Janm&Md>h12^XiDV2IET_1U2~QpaG68|C%L)`NCQQTPr?FsT^$};lF!>#fWqX% z^Vm)jOaOe<{n>v8ml5Q+xFHJ};dS|gQK7oAhNy@M?_(|%ibUsMayhk=X7ln%FS~}j zv~(QMv)?>7CjZu$ogqNXo4@g_TuI*VW~m281)Qt9*BW~M7yZ5q9Vs}X7jl>`Mo)as zsD?FMX~Mg_^|PNlhGMZ#Gg8K&LBVOL2rgPbYvAtUwrkwZ#(25qa5u-^cgvA z|A-=>03@gZEm4-g4mLC)54(ZjR(@69SCJ^&RKB%9(q~<^=SWFg>7TX@0kk2;|2S*f z$^_sQ6{t|j$vcMOldgaNE`{4k^T@zQ`p)AMtMO38BPbda$@)pbarZX2w_j&{FzATG zuA-@uV6|HBpHMp16jtrpWDVGRk=i;$5qX}T06X&d8*@}6iHC(Dbb8z4i*5t-FM^@D zrTNLd%MNjoyz?jvuHK8ROcj6LOszgq9Uk9UcCSB=puBcGx&-F zGWY(5lE`T3B!UtL6G$LL24RZytFL|f;2IaQZMN7N*^$w;ySG=sekIv~we{SsxMK7H zgt{~uAPoD=ShPsP_N7fw{YmnB$Gf76F-!w^g}#_93?I=~7Y3X!`F@q7UC%nnvwQb` zC}}M1d9hQb9CSz4LE=>7Yk6e|s@=pom1hzz-q}|5!rL1^&u8%P$~9>7WAxsCT_HCg zySo)n#?#g5+CzjGnE?fJv?|tnK2xQ8pf4P>8@a&>6p(ONR#3{Qbk5nzfaufIv0-Z` z;lFUujkHfTNRS@G-Ie_Blf;$I06Ou>cQyMKR9K}>7(g3%xBTQ>187kRRyjQ`GwC89 zaWdf1%=#TWwxXJz@LPCmf4?LSQe?FK*x5wt3Ufuba4qC%CCGrH5E{zGbI{KHt9pG$M}Ftcu3McIi~Ezs9|GiVDoXEjgQF+5 zF230m$El>peM^9iGirD3gL=(ZnDH(Y{lG}njQVi zx5Osq-hXcB4^8-6@(r-E5qJ~C_<+7|o^W5QC{@KFx`&hwH0^4M8pmuVCL#)Y$$?$z z8w_jB78}ZOFIO&8N~*RA(|oTR&8^urOnYo+k`p4KU#i`ptvJ6YQa+i$3i^vXP$A=ReUYWTse5*%~d$g8}Tbl zt1GNy7roe1xDHPyy9y$e&|+?` z&P-6~loSVZsin92RQ4-2ti5Yi{=1jbwTrov>sZmxapKk%#*j?C#S{Is7O zhWFuyLp;CtA*X-3(S()ph3%GnkinzwZ5CV60a-`7>=7H7G+>(?AydHX!4@ zdrW9*YKeYr*5@3>lc4I41`ltPW%inW)T(7Ks!;#be3bCBzI2EYwX<{GOy}0_u@5rs z0?4YZkPBAFO)L%yd_YKwW=204_PItYOQ3AlwQV;%lh-69T{iFQw2L^8#7t}qeoJ9p zF{VpO98NmHw=Z5sEWBjJJH)DNj#kNC3Lr)lkk4M|2=I*M7K1e*%(@XZ6Fsk`#eco+%f1fjFE&+Hb z;uYxpavSBA5Gp4mM3&nZ18d#PRLLs9WEVLS31=3ph2&g&%+o*g>#!OTy;1Jkuiy1t z?V!{MsCY?Iavm1R5GwLhS(hv-C+00mB)H3ZUM&cIoN*kyf<`G46BFy5ou1w=d{0L}Op@WdkV4W?UZ;GEhvg$?D2kH?I9DB+FxlyEHH6>=3>O9zJ)i`PBld{| zs3QcWf@42$CIUlmgf{1>=x$XLhZC|hxJV4;=8**efrwT&y ziMx3AC`$xxFeqY`dv9;9_Jhxtqnqm|-S!qb%;c(Oev`z4WQ~Ln7tP5MwT*YV}g8(+BqAV$C^i_9p z90}DRwYR?Y?P4DaGYe{qiy<^{M!yy`s((;0;gC`4+{MZgV7PkBUf5N{tzD>%gR1t6 z{ABPRbG--(`Hw4edb1Hjmt%TdkH;3YM3as_@4&No4K`eIUqXa}{&=#A0%1pbJ;Mtr;#W&X2EgJ<7}@d zo6Hg(<9y|q-wEp2G4x4jCu&qS^Oa&2`nJBv^N)s!c(0q1WlR;JL&<~vZeU9Remvg5 z{RJFH9r1I9xY7k3pd;Od6vm4cb0^7)BZ(C+U!*xUbz6jRKP`KidwAW@+uzT+$ymN5fC(re{Orh`ZLHArHrTuRcaFN!r7}>se4S zr6dQ1exGZ*ZUeXra+_V}TdP1qDU_HnjPPwdAf>XvT3nm({qsl1#CryMz|=6Ju$4@?u=J~;f6EZ8!(yP_d{IwKFj~hi8NPMVf08N6ybQ*;wq2gPy!+$)1juGC{)Ut+sQVQ-i(+ zlO{SUcXu8}j^j;lW}956>X*&oVab=G{ns=?*GopY;Ig`;smQ;|(wWb>sU8~}Q+hpF zTLwCzehEI=`ZIZGYxz%q+vS_EmXX4LaA{AH&Br;tJmD~xbZ%9RB$IV6p|YqVt{WUp zmx*a+?5B?!DKoHGwwk_sWvFxuKPzEt?`!2091SNp$>f9J+5ahAcq_9WXRE)H5zbFF zw;2|vKSAqN;}9~N%nG>Jx)O_`OOv_}R%B=QwDo)*KZOf1Sz*y#{;L0F5ezdN1-?R| z`PMHcY{<&O*)^RwQ1;J=e^yf+X<}=b+6z&A(w|~xgVqF`QBZ%zNfvYQs7rldlie)X zi|8E#(c;3XuFyNI9h94GvV5E8hOT$8Gj~@ze>cEfj{IVc5^j_fI|SrxR9{kzI-T zbJcO9C?gZ%xG{R+zIt^oBQH%8%n9R(iVqPi9qr>ld<0Q^#A7v*vG(D^G~3i7nccWI z8OG%KYZ+tT(wY1dZq&)K+$=hw9_}4M1dDwykRQV~vDXd@}LNItP&)ez0q6vI~etNyuN0Cie~PAIU+W=dcP~Figv( zsWs;;Iv_UjJnW!`0Qb^zC`d9`yuDbff0=q{P4DzuvgLfi4t{EXJjkvzpW$v5EeuWBx!uq z1ogr+SZ*;8TVdP71FZ;ljo_);#`bTuNfJ~f4J=|@eOg>pk9rQaypt8r*7rEO+n7!{ z-_kUvSt{dOJ~ij#D3tL-FNMk<_OZ2r(cdV@m9TtQP|4CCCH*8q23QTOI`KT3Y;2_* z{P$F1&i&~ufAiei3lQk2wTTFLKo|z$xaA^$xKVt- zBJ4}U>Jii~Vwh1DE)njs6tUOkUn6zII}uWFCOW^G`&%BvxDm?pqpmj5PK2BCNM>+y zpk%h$?d}h#guGZkLdxrnwH4-Nq&=I87Lv~%QvhJ&xZnJ>1ikzJNK33c*C0TzF9^S7 z=XLzf=*`1GFB%$x$aiz-h*SNBbjU;6*wloNlkVgAs-IVgJ~Z;RJy)pV=fqhOTN&<( z-T-7A_XbebMbq#f;!91A^(EZHP58i@f2(KE^M=k@yF!aAp$U%`{))1qx`~mI`sBLU z-e#BS!_7g#u4{^CGfi(k1U~l?zC2WFULu24kYEFnvVuFyUom;M_zl9qcvcvFUupFn z%nPXV#?5nd;ezWMX+8}W2H0U{qD7&&}+nJ5D8^QUCDM zYE{o#%_Ins`)k9Rdd@G;i4*)p+->1{r`Eh}46K!UcP0JrwA%?xJtR8>-QjQ;KE|st z>WVGaB;1jKOx_4k_9O)=$Sj9b!;p=5=M~-E-H;@b@=0kn(z#J=csng%3`UX0%<9hS z;$bl+h%L|rQc_Ht|pIl8h-iZZXFd$`)ep?K$F-^64^D;=i{Si#soQgkUE1&TTKG*)5lQ?eDc}N{GjzgHmZ+4pV{{4I8p(jn*I7+46m7>HT zU4%?=3Cf}T;8*hN%ntMO2`TTxbDQ%czKPRDysqSq%U2`}(#Q04SCdnlq@NG!ZiCem z-6!~jFZnj-wnFa;OqT-PJuwjx@a-Zq1+MZ<#4&0dRb_coc^sVV;kCpku28rXoi$V- zdzId9@#7b~jKiK;(6a=4OZGu(_-MV%wsU4@9vr%Fp=_GV6uN!SK;+-4GFB@S!^SIa1dljJ`l{%Tb`ir9Any6yT9 zEOH1Ap)yrH=Owr9!@S6I9gr+|qnmPGiWgR57 z&$!=-*fiDI4_Y;pP2%UI)d)o{a7)@}V(4}qfZ*O}p>P~z(Je+3|zRDPvoCf>N4z79gzP*VWF4rPXimB^Y{@#B{fP%N2jtG zMk|>!oL%T<0Ya)?7LfV_OQBc8d7}PZjs7|Ly6_LvjykJniGzWyzeacUtdNqD+I%l` zvBMl&mKokSEKvTG9=3J0Q~uiPoow)TB}Z#&VfG-US!Y3RfINfo7H;&f!ymoW-F!jc z(eVmdAdepFuS0d-b7gFPXFR3*+;dfltN696cL!r>ziv}ve&q<$O=u2VONlHF!i8B9w zlJ?ii&AhYFXs(|~YCa+&qC=L5@V&49V)I2qMEfGS_)at^Ix6%&XxPvh=Nq66x)1<& zfQ4q?r>wQUf(5dzXbgQdW&p@$b}q(tp86;{pdhPLa2!@jk~afHx(rI5*blz%Px}pm z^w;ijiEpstBUK?}&DS%+=V6h08)N>}TbV3<2tu$uZN$JaFB zTSDOPC$kSN#)em1eZhu&jBBggHYE#YTvY!WEOevkw>LLaVm)~d=Vhz|zw$2*c{0uk zbwc9>aTyn60ZLMA07y^ZC3DiyI1x7MhZn^N z>j$Am*fZGZ_jBD)OyQ(lTOlzuKK#F2+YjXDa=*^J{}NU6%E%eP-$!?lZMB0Td7%IR zLO;=u1zFYTjS8g~wB*0{zUU1c=0Ae?WwS-v)=={~iV(Ism{( z!Q=`YU?+t8Y3V8R{RA+9Av`$F$?)$dM6|;F^#4EozuR=nM54b>_3r3V-u;cyP|;Pc IRk8~IA1%W|Q2+n{ literal 0 HcmV?d00001 diff --git a/src-tauri/src/libs/error.rs b/src-tauri/src/libs/error.rs new file mode 100644 index 000000000..fa89788ac --- /dev/null +++ b/src-tauri/src/libs/error.rs @@ -0,0 +1,50 @@ +use anyhow::Result; +use serde::{ser::Serializer, Serialize}; +use thiserror::Error; + +/** + * Create the error type that represents all errors possible in our program + * Stolen from https://github.com/tauri-apps/tauri/discussions/3913 + */ +#[derive(Debug, Error)] +pub enum MuseeksError { + #[error(transparent)] + Lofty(#[from] lofty::LoftyError), + + #[error(transparent)] + Database(#[from] bonsaidb::core::Error), + + #[error(transparent)] + LocalDatabase(#[from] bonsaidb::local::Error), + + #[error(transparent)] + NoSleep(#[from] nosleep::Error), + + // #[error(transparent)] + // NoSleepPoison(#[from] PoisonError), + #[error(transparent)] + Unknown(#[from] anyhow::Error), + + /** + * Custom errors + */ + #[error("{message}")] + Library { message: String }, + + #[error("Playlist not found")] + PlaylistNotFound, +} + +/** + * Let's make anyhow's errors Tauri friendly, so they can be used for commands + */ +impl Serialize for MuseeksError { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} + +pub type AnyResult = Result; diff --git a/src-tauri/src/libs/events.rs b/src-tauri/src/libs/events.rs new file mode 100644 index 000000000..c0b45a92e --- /dev/null +++ b/src-tauri/src/libs/events.rs @@ -0,0 +1,23 @@ +use serde::{Deserialize, Serialize}; +use strum_macros::{AsRefStr, Display}; +use ts_rs::TS; + +#[derive(Serialize, Deserialize, Debug, Clone, TS, Display, AsRefStr)] +#[ts(export, export_to = "../src/generated/typings/IPCEvent.ts")] +pub enum IPCEvent<'a> { + // Playback-related events + PlaybackPlay(&'a str), + PlaybackPause, + PlaybackStop, + PlaybackPlayPause, + PlaybackPrevious, + PlaybackNext, + PlaybackTrackChange, + // Scan-related events + LibraryScanProgress, + // Menu-related events + GoToLibrary, + GoToPlaylists, + GoToSettings, + JumpToPlayingTrack, +} diff --git a/src-tauri/src/libs/mod.rs b/src-tauri/src/libs/mod.rs new file mode 100644 index 000000000..7947cb112 --- /dev/null +++ b/src-tauri/src/libs/mod.rs @@ -0,0 +1,3 @@ +pub mod error; +pub mod events; +pub mod utils; diff --git a/src-tauri/src/libs/utils.rs b/src-tauri/src/libs/utils.rs new file mode 100644 index 000000000..80c5fb71f --- /dev/null +++ b/src-tauri/src/libs/utils.rs @@ -0,0 +1,114 @@ +/** + * Small utility to display time metrics with a log message + */ +use log::info; +use std::{ffi::OsStr, path::PathBuf, time::Instant}; +use tauri::{Runtime, WebviewWindow}; +use walkdir::WalkDir; + +/** + * Small helper to compute the execution time of some code + */ +pub struct TimeLogger { + start_time: Instant, + message: String, +} + +impl TimeLogger { + pub fn new(message: String) -> Self { + TimeLogger { + start_time: Instant::now(), + message, + } + } + + pub fn complete(&self) { + let duration = self.start_time.elapsed(); + info!("{} in {:.2?}", self.message, duration); + } +} + +/** + * Get the app configuration/storage directory + */ +pub fn get_app_storage_dir() -> PathBuf { + let path = dirs::home_dir().expect("Get home dir"); + path.join(".museeks") +} + +/** + * Check if a directory or a file is visible or not + */ +fn is_dir_visible(entry: &walkdir::DirEntry) -> bool { + entry + .file_name() + .to_str() + .map(|s| !s.starts_with(".")) + .unwrap_or(false) +} + +/** + * Take an entry and filter out: + * - directories + * - non-allowed extensions + */ +fn is_entry_valid( + result: std::result::Result, + allowed_extensions: &[&str], +) -> Option { + // If the user does not have access to the file + if result.is_err() { + return None; + } + + let entry = result.unwrap(); + let file_type = entry.file_type(); + + let extension = entry + .path() + .extension() + .and_then(OsStr::to_str) + .unwrap_or(""); + + let is_file = file_type.is_file(); + let has_valid_extension = allowed_extensions.contains(&extension); + + if is_file && has_valid_extension { + // Only return the file path, that's what we're interested in + return Some(entry.into_path()); + } + + return None; +} + +/** + * Scan multiple directories and filter files by extension + */ +pub fn scan_dirs(paths: &Vec, allowed_extensions: &[&str]) -> Vec { + paths + .iter() + .map(|path| scan_dir(path, allowed_extensions)) + .flatten() + .collect() +} + +/** + * Scan directory and filter files by extension + */ +pub fn scan_dir(path: &PathBuf, allowed_extensions: &[&str]) -> Vec { + WalkDir::new(path) + .follow_links(true) + .into_iter() + .filter_entry(|entry| is_dir_visible(entry)) + .filter_map(|entry| is_entry_valid(entry, allowed_extensions)) + .collect() +} + +/** + * Ensure a window is shown and visible + */ +pub fn show_window(window: &WebviewWindow) { + window.maximize().unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 000000000..c4f15bbe6 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,59 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +mod libs; +mod plugins; + +use libs::utils::show_window; +use log::LevelFilter; +use tauri::Manager; +use tauri_plugin_log::fern::colors::ColoredLevelConfig; +use tauri_plugin_log::{Target, TargetKind}; + +/** + * The beast + */ +#[tokio::main] +async fn main() { + // Is there any way to instantiate that in the plugin directly? + let db = plugins::database::setup().await.ok().unwrap(); + + tauri::Builder::default() + // Custom integrations + .plugin(plugins::app_menu::init()) + .plugin(plugins::config::init()) + .plugin(plugins::cover::init()) + .plugin(plugins::database::init(db)) + .plugin(plugins::debug::init()) + .plugin(plugins::default_view::init()) + .plugin(plugins::shell_extension::init()) + .plugin(plugins::sleepblocker::init()) + .plugin(plugins::macos::init()) + // Tauri integrations with the Operating System + .plugin(tauri_plugin_dialog::init()) + .plugin(tauri_plugin_os::init()) + .plugin(tauri_plugin_notification::init()) + .plugin(tauri_plugin_shell::init()) + .plugin(tauri_plugin_single_instance::init(|app_handle, _, _| { + let window = app_handle.get_webview_window("main").unwrap(); + show_window(&window); + })) + .plugin(tauri_plugin_window_state::Builder::default().build()) + .plugin( + tauri_plugin_log::Builder::default() + .targets([ + Target::new(TargetKind::Stdout), + Target::new(TargetKind::Webview), + ]) + .level(LevelFilter::Info) + .with_colors(ColoredLevelConfig::default()) + .build(), + ) + // TODO: tauri-plugin-theme to update the native theme at runtime + .setup(|_app| { + // :] + Ok(()) + }) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/src-tauri/src/plugins/app_menu.rs b/src-tauri/src/plugins/app_menu.rs new file mode 100644 index 000000000..3f1b09fe8 --- /dev/null +++ b/src-tauri/src/plugins/app_menu.rs @@ -0,0 +1,173 @@ +use std::path::PathBuf; +use tauri::image::Image; +use tauri::{ + menu::{AboutMetadataBuilder, MenuBuilder, MenuId, MenuItemBuilder, SubmenuBuilder}, + plugin::{Builder, TauriPlugin}, + Manager, Runtime, +}; + +use crate::libs::events::IPCEvent; + +pub fn init() -> TauriPlugin { + Builder::new("app-menu") + .invoke_handler(tauri::generate_handler![/*popup, toggle*/]) + .on_window_ready(|window| { + let app_handle = window.app_handle(); + + // ----------------------------------------------------------------- + // Museeks sub-menu + // ----------------------------------------------------------------- + let package_info = app_handle.package_info(); + let version = package_info.version.to_string().into(); + let resource_path: PathBuf = app_handle.path().resource_dir().unwrap(); + let icon_path = resource_path.join("icons").join("icon.png"); + let icon = Image::from_path(icon_path).unwrap(); + + let about_metadata = AboutMetadataBuilder::new() + .version(version) // TODO: Automate all that? + .authors(Some(vec![package_info.authors.to_string()])) + .license("MIT".into()) + .website("https://museeks.io".into()) + .website_label("museeks.io".into()) + .icon(Some(icon)) + .build(); + + let museeks_menu = SubmenuBuilder::new(app_handle, "Museeks") + .about(Some(about_metadata)) + .separator() + .services() + .hide() + .hide_others() + .show_all() + .separator() + .quit() + .build() + .unwrap(); + + // ----------------------------------------------------------------- + // File sub-menu + // ----------------------------------------------------------------- + let file_menu = SubmenuBuilder::new(app_handle, "File") + .close_window() + .build() + .unwrap(); + + // ----------------------------------------------------------------- + // Edit sub-menu + // ----------------------------------------------------------------- + let edit_menu = SubmenuBuilder::new(app_handle, "Edit") + .undo() + .redo() + .separator() + .cut() + .copy() + .paste() + .select_all() + .build() + .unwrap(); + + // ----------------------------------------------------------------- + // View sub-menu + // ----------------------------------------------------------------- + // TODO: create events listeners and shortcuts + let view_menu = SubmenuBuilder::new(app_handle, "View") + .item( + &MenuItemBuilder::new("Jump to playing track") + .id(MenuId::new("jump_to_playing_track")) + .accelerator("CmdOrCtrl+T") + .build(app_handle) + .unwrap(), + ) + .separator() + .item( + &MenuItemBuilder::new("Go to library") + .id(MenuId::new(IPCEvent::GoToLibrary.as_ref())) + .accelerator("CmdOrCtrl+L") + .build(app_handle) + .unwrap(), + ) + .item( + &MenuItemBuilder::new("Go to playlists") + .id(MenuId::new(IPCEvent::GoToPlaylists.as_ref())) + .accelerator("CmdOrCtrl+P") + .build(app_handle) + .unwrap(), + ) + .item( + &MenuItemBuilder::new("Go to settings") + .id(MenuId::new(IPCEvent::GoToSettings.as_ref())) + .accelerator("CmdOrCtrl+P") + .build(app_handle) + .unwrap(), + ) + .build() + .unwrap(); + + // ----------------------------------------------------------------- + // Window sub-menu + // ----------------------------------------------------------------- + let window_menu: tauri::menu::Submenu = SubmenuBuilder::new(app_handle, "Window") + .item( + &MenuItemBuilder::new("-") + .enabled(false) + .build(app_handle) + .unwrap(), + ) + .build() + .unwrap(); + + // ----------------------------------------------------------------- + // Help sub-menu + // ----------------------------------------------------------------- + let help_menu = SubmenuBuilder::new(app_handle, "Help") + .item( + &MenuItemBuilder::new("-") + .enabled(false) + .build(app_handle) + .unwrap(), + ) + .build() + .unwrap(); + + // ----------------------------------------------------------------- + // Assembled menu + listeners + // ----------------------------------------------------------------- + let menu = MenuBuilder::new(app_handle) + .items(&[ + &museeks_menu, + &file_menu, + &edit_menu, + &view_menu, + &window_menu, + &help_menu, + ]) + .build() + .unwrap(); + + // The menu on macOS is app-wide and not specific to one window + #[cfg(target_os = "macos")] + { + app_handle.set_menu(menu).unwrap(); + } + + // On Windows / Linux, app menus are wasting vertical space, so we + // hide it by default. The menu get toggle-able by pressing Alt. + #[cfg(not(target_os = "macos"))] + { + window.set_menu(menu).unwrap(); + window.hide_menu().unwrap(); + } + + // TODO: hide/show menu with Alt on Linux + Windows + // TODO: support menu events + // https://github.com/tauri-apps/tauri/issues/9060 + // window.on_menu_event(|_app_handle, event| { + // // let main_webview = app_handle.get_webview_window("main").unwrap(); + + // info!("event {:?}", event.id()); + // // TODO: + // // main_webview.emit(); + // }); + }) + .build() +} diff --git a/src-tauri/src/plugins/config.rs b/src-tauri/src/plugins/config.rs new file mode 100644 index 000000000..d7a8cd440 --- /dev/null +++ b/src-tauri/src/plugins/config.rs @@ -0,0 +1,183 @@ +/** + * Module in charge of persisting and returning the config to/from the filesystem + */ +use home_config::HomeConfig; +use log::info; +use serde::{Deserialize, Serialize}; +use std::{path::PathBuf, sync::RwLock}; +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{Manager, Runtime, State}; +use ts_rs::TS; + +use crate::libs::utils::get_app_storage_dir; + +#[derive(Serialize, Deserialize, Debug, Clone, TS)] +#[ts(export, export_to = "../src/generated/typings/Repeat.ts")] +pub enum Repeat { + All, + One, + None, +} + +#[derive(Serialize, Deserialize, Debug, Clone, TS)] +#[ts(export, export_to = "../src/generated/typings/SortBy.ts")] +pub enum SortBy { + Artist, + Album, + Title, + Duration, + Genre, +} + +#[derive(Serialize, Deserialize, Debug, Clone, TS)] +#[ts(export, export_to = "../src/generated/typings/SortOrder.ts")] +pub enum SortOrder { + Asc, + Dsc, +} + +#[derive(Serialize, Deserialize, Debug, Clone, TS)] +#[ts(export, export_to = "../src/generated/typings/DefaultView.ts")] +pub enum DefaultView { + Library, + Playlists, +} + +#[derive(Serialize, Deserialize, Debug, Clone, TS)] +#[ts(export, export_to = "../src/generated/typings/Config.ts")] +pub struct Config { + pub theme: String, + pub audio_volume: f32, + pub audio_playback_rate: f32, + pub audio_output_device: String, + pub audio_muted: bool, + pub audio_shuffle: bool, + pub audio_repeat: Repeat, + pub default_view: DefaultView, + pub library_sort_by: SortBy, + pub library_sort_order: SortOrder, + pub library_folders: Vec, // Not used yet + pub sleepblocker: bool, + pub auto_update_checker: bool, + pub minimize_to_tray: bool, + pub notifications: bool, + pub track_view_density: String, +} + +impl Config { + pub fn default() -> Self { + Config { + theme: "__system".to_owned(), + audio_volume: 1.0, + audio_playback_rate: 1.0, + audio_output_device: "default".to_owned(), + audio_muted: false, + audio_shuffle: false, + audio_repeat: Repeat::None, + default_view: DefaultView::Library, + library_sort_by: SortBy::Artist, + library_sort_order: SortOrder::Asc, + library_folders: vec![], + sleepblocker: false, + auto_update_checker: true, + minimize_to_tray: false, + notifications: false, + track_view_density: "normal".to_owned(), + } + } +} + +#[derive(Debug)] +pub struct ConfigManager { + manager: HomeConfig, + pub data: RwLock, +} + +impl ConfigManager { + pub fn get(&self) -> Config { + self.data.read().unwrap().clone() + } + + pub fn update(&self, config: Config) { + let mut writer = self.data.write().unwrap(); + *writer = config; + std::mem::drop(writer); + self.save(); + } + + pub fn set_sleepblocker(&self, sleepblocker: bool) { + let mut writer = self.data.write().unwrap(); + writer.sleepblocker = sleepblocker; + std::mem::drop(writer); + self.save(); + } + + pub fn set_default_view(&self, default_view: DefaultView) { + let mut writer = self.data.write().unwrap(); + writer.default_view = default_view; + std::mem::drop(writer); + self.save(); + } + + fn save(&self) { + let config = self.data.read().unwrap(); + self.manager.save_toml(config.clone()).unwrap(); + info!("Config updated"); + } +} + +#[tauri::command] +pub fn get_config(config_manager: State) -> Config { + config_manager.get() +} + +#[tauri::command] +pub fn set_config(config_manager: State, config: Config) { + config_manager.update(config); +} + +pub fn init() -> TauriPlugin { + let conf_path = get_app_storage_dir(); + let manager = HomeConfig::with_file(conf_path.join("config.toml")); + let existing_config = manager.toml::(); + + let config = match existing_config { + Ok(config) => ConfigManager { + manager, + data: RwLock::new(config), + }, + Err(_) => { + // The config does not exist, so let's instantiate it with defaults + // Potential issue: if the config is extended, the defaults will be + // reloaded + let default_config = Config::default(); + manager.save_toml(&default_config).unwrap(); + + ConfigManager { + manager, + data: RwLock::new(default_config), + } + } + }; + + // We need to inject the initial state of the config to the window object of + // our webview, because some of our front-end modules are instantiated at + // parsing time and require data that would otherwise only load-able asynchronously + let initial_config_script = format!( + r#" + window.__MUSEEKS_INITIAL_CONFIG = {}; + window.__MUSEEKS_PLATFORM = {:?}; + "#, + serde_json::to_string(&config.get()).unwrap(), + tauri_plugin_os::type_().to_string() + ); + + Builder::::new("config") + .invoke_handler(tauri::generate_handler![get_config, set_config,]) + .js_init_script(initial_config_script) + .setup(|app_handle, _api| { + app_handle.manage(config); + Ok(()) + }) + .build() +} diff --git a/src-tauri/src/plugins/cover.rs b/src-tauri/src/plugins/cover.rs new file mode 100644 index 000000000..232624541 --- /dev/null +++ b/src-tauri/src/plugins/cover.rs @@ -0,0 +1,91 @@ +use std::path::PathBuf; +use std::str::FromStr; + +use base64::prelude::*; +use lofty::{MimeType, PictureType, TaggedFileExt}; +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::Runtime; + +use crate::libs::error::AnyResult; +use crate::libs::utils::scan_dir; + +const SUPPORTED_COVER_EXTENSIONS: [&str; 5] = ["png", "jpg", "jpeg", "bmp", "gif"]; +const SUPPORTED_COVER_NAMES: [&str; 5] = ["album", "albumart", "folder", "cover", "front"]; + +#[memoize::memoize] +fn get_cover_from_id3(path: String) -> Option { + let tagged_file = match lofty::read_from_path(path) { + Ok(tagged_file) => tagged_file, + Err(_) => return None, + }; + + let primary_tag = match tagged_file.primary_tag() { + Some(tag) => tag, + None => return None, + }; + + let cover = match primary_tag.get_picture_type(PictureType::CoverFront) { + Some(cover) => cover, + None => return None, + }; + + let format = match cover.mime_type() { + Some(MimeType::Png) => "png".to_string(), + Some(MimeType::Jpeg) => "jpg".to_string(), + Some(MimeType::Tiff) => "tiff".to_string(), + Some(MimeType::Bmp) => "bmp".to_string(), + Some(MimeType::Gif) => "gif".to_string(), + _ => return None, + }; + + let cover_base64 = BASE64_STANDARD.encode(&cover.data()); + Some(format!("data:{};base64,{}", format, cover_base64)) +} + +#[memoize::memoize] +fn get_cover_from_filesystem<'a>(path: String) -> Option { + let dir_path = PathBuf::from_str(&path) + .unwrap() + .parent() + .unwrap() + .to_path_buf(); + + match scan_dir(&dir_path, &SUPPORTED_COVER_EXTENSIONS) + .iter() + .find(|file| { + let file_stem = file + .file_stem() + .unwrap() + .to_str() + .unwrap_or("???") + .to_lowercase(); + + SUPPORTED_COVER_NAMES.contains(&file_stem.as_str()) + }) { + // Ideally, the file URL would be converted to asset.localhost + // here, but I could not find the equivalent on convertFileSrc + // for the back-end; + Some(path) => Some(path.to_str().unwrap().into()), + None => None, + } +} + +#[tauri::command] +pub async fn get_cover(path: String) -> AnyResult> { + // 1. Try to get the Cover from the ID3 tag + match get_cover_from_id3(path.clone()) { + Some(path) => Ok(Some(path)), + // 2. Cover was not found, so let's fallback to scanning the directory + // for a valid cover file + None => Ok(get_cover_from_filesystem(path)), + } +} + +/** + * Module in charge of assisting the UI with cover retrieval + */ +pub fn init() -> TauriPlugin { + Builder::::new("cover") + .invoke_handler(tauri::generate_handler![get_cover]) + .build() +} diff --git a/src-tauri/src/plugins/database.rs b/src-tauri/src/plugins/database.rs new file mode 100644 index 000000000..fb309ba32 --- /dev/null +++ b/src-tauri/src/plugins/database.rs @@ -0,0 +1,581 @@ +use bonsaidb::core::connection::{AsyncCollection, AsyncConnection, AsyncStorageConnection}; +use bonsaidb::core::document::OwnedDocument; +use bonsaidb::core::schema::{Collection, SerializedCollection}; +use bonsaidb::core::transaction::{Operation, Transaction}; +use bonsaidb::local::config::{Builder as BonsaiBuilder, StorageConfiguration}; +use bonsaidb::local::AsyncDatabase; +use bonsaidb::local::AsyncStorage; +use lofty::{Accessor, AudioFile, ItemKey, TaggedFileExt}; +use log::{error, info, warn}; +use rayon::prelude::*; +use serde::{Deserialize, Serialize}; +use std::collections::HashSet; +use std::path::PathBuf; +use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::Arc; +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{Manager, Runtime, State}; +use ts_rs::TS; +use uuid::Uuid; + +use crate::libs::error::{AnyResult, MuseeksError}; +use crate::libs::events::IPCEvent; +use crate::libs::utils::{get_app_storage_dir, scan_dirs, TimeLogger}; + +const INSERTION_BATCH: usize = 200; + +pub const SUPPORTED_TRACKS_EXTENSIONS: [&str; 12] = [ + "mp3", "mp4", "aac", "m4a", "3gp", "wav", /* mp3 / mp4 */ + "ogg", "ogv", "ogm", "opus", /* Opus */ + "flac", /* Flac */ + "webm", /* Web media */ +]; + +// pub const SUPPORTED_PLAYLISTS_EXTENSIONS: [&str; 1] = [".m3u"]; + +/** ---------------------------------------------------------------------------- + * Databases + * exposes databases for tracks and playlists + * TODO: + * - Export all needed structs to a single file: ts-rs#59 + * -------------------------------------------------------------------------- */ +pub struct DB { + pub tracks: AsyncDatabase, + pub playlists: AsyncDatabase, +} + +impl DB { + fn tracks_collection(&self) -> AsyncCollection<'_, AsyncDatabase, Track> { + self.tracks.collection::() + } + + fn playlists_collection(&self) -> AsyncCollection<'_, AsyncDatabase, Playlist> { + self.playlists.collection::() + } + + /** + * Get all the tracks (and their content) from the database + */ + pub async fn get_all_tracks(&self) -> AnyResult> { + let timer = TimeLogger::new("Retrieved and decoded tracks".into()); + let docs = self.tracks_collection().all().await?; + let tracks = self.decode_docs::(docs); + timer.complete(); + tracks + } + + /** + * Get tracks (and their content) given a set of document IDs + */ + pub async fn get_tracks(&self, track_ids: Vec) -> AnyResult> { + let docs = self.tracks_collection().get_multiple(&track_ids).await?; + + match self.decode_docs::(docs) { + Ok(mut tracks) => { + // document may not ordered the way we want, so let's ensure they map to track_ids + tracks.sort_by_key(|track| track_ids.iter().position(|id| id == &track._id)); + Ok(tracks) + } + Err(err) => Err(err), + } + } + + /** Delete multiple tracks by ID */ + pub async fn remove_tracks(&self, ids: Vec) -> AnyResult<()> { + let tracks = self.tracks_collection().get_multiple(&ids).await?; + + let mut tx = Transaction::new(); + for track in tracks { + tx.push(Operation::delete(Track::collection_name(), track.header)); + } + tx.apply_async(&self.tracks).await?; + + Ok(()) + } + + /** + * Insert a new track in the DB, will fail in case there is a duplicate unique + * key (like track.path) + * + * Doc: https://github.com/khonsulabs/bonsaidb/blob/main/examples/basic-local/examples/basic-local-multidb.rs + */ + pub async fn insert_track(&self, tracks: &Vec) -> AnyResult<()> { + // BonsaiDB does not work well (as of today) with a lot of very small + // insertions, so let's insert tracks by batch instead then + // TODO: if a batch fails (because for example a duplicate path), the whole + // transaction should not + let batches: Vec> = tracks.chunks(INSERTION_BATCH).map(|x| x.to_vec()).collect(); + + info!("Splitting tracks in {} batche(s)", batches.len()); + + for batch in batches { + let mut tx = Transaction::new(); + + for track in batch { + tx.push(Operation::push_serialized::(&track)?); + } + + // Let's goooo + let result = tx.apply_async(&self.tracks).await; + + match result { + Ok(_) => (), + // TODO: + // Err(bonsaidb::core::Error::DocumentConflict(_err, _)) => { + // info!("Track already in library: '{:?}'", &track.path); + // } + Err(err) => { + error!("Failed to insert tracks: {:?}", err); + } + } + } + + Ok(()) + } + + /** Get all the playlists (and their content) from the database */ + pub async fn get_all_playlists(&self) -> AnyResult> { + let timer = TimeLogger::new("Retrieved and decoded playlists".into()); + let docs = self.playlists_collection().all().await?; + let playlists = self.decode_docs::(docs); + timer.complete(); + playlists + } + + /** Get a single playlist by ID */ + pub async fn get_playlist(&self, playlist_id: String) -> AnyResult> { + let maybe_doc = self.playlists_collection().get(&playlist_id).await?; + + match maybe_doc { + Some(doc) => Ok(Some(self.decode_doc::(doc)?)), + None => Ok(None), + } + } + + /** Create a playlist given a name and a set of track IDs */ + pub async fn create_playlist(&self, name: String, tracks: Vec) -> AnyResult { + let playlist = Playlist { + _id: uuid::Uuid::new_v4().to_string(), + name, + tracks, + import_path: None, + }; + + self.playlists_collection() + .insert(&playlist._id, &playlist) + .await?; + + Ok(playlist) + } + + /** Set the tracks of a playlist given its ID and tracks IDs */ + pub async fn set_playlist_tracks( + &self, + id: String, + tracks: Vec, + ) -> AnyResult { + if let Some(document) = self.playlists_collection().get(&id).await? { + let mut playlist = self.decode_doc::(document)?; + + // Insert new tracks + make sure we remove duplicates (the UI does + // not play well with those). + playlist.tracks = tracks + .into_iter() + .collect::>() + .into_iter() + .collect::>(); + + match playlist.overwrite_into_async(&id, &self.playlists).await { + Ok(doc) => Ok(doc.contents), + Err(_) => Err(MuseeksError::Library { + message: "Failed to set playlist tracks".into(), + }), + } + } else { + Err(MuseeksError::PlaylistNotFound) + } + } + + /** Update a playlist name by ID */ + pub async fn rename_playlist(&self, id: String, name: String) -> AnyResult { + if let Some(document) = self.playlists_collection().get(&id).await? { + let mut playlist = self.decode_doc::(document)?; + playlist.name = name; + + match playlist.overwrite_into_async(&id, &self.playlists).await { + Ok(doc) => Ok(doc.contents), + Err(_) => Err(MuseeksError::Library { + message: "Failed to rename playlist".into(), + }), + } + } else { + Err(MuseeksError::PlaylistNotFound) + } + } + + /** Delete a playlist by ID */ + pub async fn delete_playlist(&self, id: String) -> AnyResult<()> { + if let Some(document) = self.playlists_collection().get(&id).await? { + Ok(self.playlists_collection().delete(&document).await?) + } else { + Err(MuseeksError::PlaylistNotFound) + } + } + + /** + * Decode the content for a given set of document (track, playlist, etc) + */ + fn decode_docs( + &self, + docs: Vec, + ) -> AnyResult::Contents>> { + let mut entries = vec![]; + + for doc in docs { + let deserialized = T::document_contents(&doc)?; + entries.push(deserialized); + } + + Ok(entries) + } + + fn decode_doc( + &self, + doc: OwnedDocument, + ) -> AnyResult<::Contents> { + Ok(T::document_contents(&doc)?) + } +} + +/** ---------------------------------------------------------------------------- + * Track + * represent a single track, id and path should be unique + * -------------------------------------------------------------------------- */ +#[derive(Debug, Clone, Serialize, Deserialize, Collection, TS)] +#[collection(name="tracks", primary_key = String)] +#[ts(export, export_to = "../src/generated/typings/Track.ts")] +pub struct Track { + #[natural_id] + pub _id: String, + pub title: String, + pub album: String, + pub artists: Vec, + pub genres: Vec, + pub year: Option, + pub duration: u32, + pub track: NumberOf, + pub disk: NumberOf, + pub path: PathBuf, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TS)] +#[ts(export, export_to = "../src/generated/typings/NumberOf.ts")] +pub struct NumberOf { + pub no: Option, + pub of: Option, +} + +/** ---------------------------------------------------------------------------- + * Playlist + * represent a playlist, that has a name and a list of tracks + * -------------------------------------------------------------------------- */ + +#[derive(Debug, Clone, Serialize, Deserialize, Collection, TS)] +#[collection(name = "playlists", primary_key = String)] +#[ts(export, export_to = "../src/generated/typings/Playlist.ts")] +pub struct Playlist { + #[natural_id] + pub _id: String, + pub name: String, + pub tracks: Vec, // vector of IDs + pub import_path: Option, +} + +/** + * Scan progress + */ +#[derive(Debug, Clone, Serialize, Deserialize, TS)] +#[ts(export, export_to = "../src/generated/typings/Progress.ts")] +pub struct Progress { + current: usize, + total: usize, +} + +/** ---------------------------------------------------------------------------- + * Commands + * -------------------------------------------------------------------------- */ + +/** + * Popup a directory picker dialog, scan the selected folders, extract all + * ID3 tags from it, and update the DB accordingly. + */ +#[tauri::command] +async fn import_tracks_to_library( + window: tauri::Window, + db: State<'_, DB>, + import_paths: Vec, +) -> AnyResult> { + let webview_window = window.get_webview_window("main").unwrap(); + + info!("Importing paths to library:"); + for path in &import_paths { + info!(" - {:?}", path) + } + + let paths = scan_dirs(&import_paths, &SUPPORTED_TRACKS_EXTENSIONS); + let task_count = paths.len(); + + let progress = Arc::new(AtomicUsize::new(1)); + let total = Arc::new(AtomicUsize::new(paths.len())); + + webview_window + .emit( + IPCEvent::LibraryScanProgress.as_ref(), + Progress { + current: 0, + total: paths.len(), + }, + ) + .unwrap(); + + // Let's get all tracks ID3 + info!("Importing ID3 tags from {} files", task_count); + let scan_logger = TimeLogger::new("Scanned all id3 tags".into()); + + let tracks = &paths + .par_iter() + .map(|path| -> Option { + // let counter = processed.clone(); + let p_current = progress.clone().fetch_add(1, Ordering::SeqCst); + let p_total = total.clone().load(Ordering::SeqCst); + + if p_current % 200 == 0 || p_current == p_total { + info!("Processing tracks {:?}/{:?}", p_current, total); + webview_window + .emit( + IPCEvent::LibraryScanProgress.as_ref(), + Progress { + current: p_current, + total: p_total, + }, + ) + .unwrap(); + } + + match lofty::read_from_path(&path) { + Ok(tagged_file) => { + let tag = tagged_file.primary_tag()?; + + // TODO: make sure we don't save tracks that are already in DB + // IMPROVE ME: Is there a more idiomatic way of doing the following? + let mut artists: Vec = tag + .get_strings(&ItemKey::TrackArtist) + .map(ToString::to_string) + .collect(); + + if artists.is_empty() { + artists = tag + .get_strings(&ItemKey::AlbumArtist) + .map(ToString::to_string) + .collect(); + } + + if artists.is_empty() { + artists = vec!["Unknown Artist".into()]; + } + + Some(Track { + _id: Uuid::new_v3(&Uuid::NAMESPACE_OID, path.to_string_lossy().as_bytes()) + .to_string(), + title: tag + .get_string(&ItemKey::TrackTitle) + .unwrap_or("Unknown") + .to_string(), + album: tag + .get_string(&ItemKey::AlbumTitle) + .unwrap_or("Unknown") + .to_string(), + artists, + genres: tag + .get_strings(&ItemKey::Genre) + .map(ToString::to_string) + .collect(), + year: tag.year(), + duration: u32::try_from(tagged_file.properties().duration().as_secs()) + .unwrap_or(0), + track: NumberOf { + no: tag.track(), + of: tag.track_total(), + }, + disk: NumberOf { + no: tag.disk(), + of: tag.disk_total(), + }, + path: path.to_owned(), + }) + } + Err(err) => { + warn!("Failed to get ID3 tags: \"{}\". File {:?}", err, path); + None + } + } + }) + .flatten() + .collect::>(); + + info!("{} tracks successfully scanned", tracks.len()); + info!("{} tracks failed to be scanned", paths.len() - tracks.len()); + scan_logger.complete(); + + let db_insert_logger: TimeLogger = TimeLogger::new("Inserted tracks".into()); + + // Insert all tracks in the DB + let result = db.insert_track(tracks).await; + + if result.is_err() { + warn!("Something went wrong when inserting tracks"); + } + + db_insert_logger.complete(); + + let tracks = db.get_all_tracks().await.unwrap(); + + Ok(tracks) +} + +#[tauri::command] +async fn get_all_tracks(db: State<'_, DB>) -> AnyResult> { + db.get_all_tracks().await +} + +#[tauri::command] +async fn get_tracks(db: State<'_, DB>, ids: Vec) -> AnyResult> { + db.get_tracks(ids).await +} +#[tauri::command] +async fn remove_tracks(db: State<'_, DB>, ids: Vec) -> AnyResult<()> { + db.remove_tracks(ids).await +} + +#[tauri::command] +async fn get_all_playlists(db: State<'_, DB>) -> AnyResult> { + db.get_all_playlists().await +} + +#[tauri::command] +async fn get_playlist(db: State<'_, DB>, id: String) -> AnyResult { + match db.get_playlist(id).await { + Ok(Some(playlist)) => Ok(playlist), + Ok(None) => Err(MuseeksError::PlaylistNotFound), + Err(err) => Err(err), + } +} + +#[tauri::command] +async fn create_playlist( + db: State<'_, DB>, + name: String, + tracks: Vec, +) -> AnyResult { + db.create_playlist(name, tracks).await +} + +#[tauri::command] +async fn rename_playlist(db: State<'_, DB>, id: String, name: String) -> AnyResult { + db.rename_playlist(id, name).await +} + +#[tauri::command] +async fn set_playlist_tracks( + db: State<'_, DB>, + id: String, + tracks: Vec, +) -> AnyResult { + db.set_playlist_tracks(id, tracks).await +} + +#[tauri::command] +async fn delete_playlist(db: State<'_, DB>, id: String) -> AnyResult<()> { + db.delete_playlist(id).await +} + +#[tauri::command] +async fn reset(db: State<'_, DB>) -> AnyResult<()> { + info!("Resetting DB..."); + let timer = TimeLogger::new("Reset DB".into()); + + let tracks = db.tracks_collection().all().await?; + let playlists = db.playlists_collection().all().await?; + + // We create a transaction to delete tracks much faster + let mut tx = Transaction::new(); + + for track in tracks { + tx.push(Operation::delete(Track::collection_name(), track.header)); + } + + tx.apply_async(&db.tracks).await?; + + // Now let's delete playlists + tx = Transaction::new(); + + for playlist in playlists { + tx.push(Operation::delete( + Playlist::collection_name(), + playlist.header, + )); + } + + tx.apply_async(&db.playlists).await?; + + timer.complete(); + + Ok(()) +} + +/** + * Database setup + * Doc: https://github.com/khonsulabs/bonsaidb/blob/main/examples/basic-local/examples/basic-local-multidb.rs + */ +pub async fn setup() -> AnyResult { + let conf_path = get_app_storage_dir(); + let storage_configuration = StorageConfiguration::new(conf_path.join("main.bonsaidb")) + .with_schema::()? + .with_schema::()?; + + let storage = AsyncStorage::open(storage_configuration).await?; + + let tracks = storage.create_database::("tracks", true).await?; + let playlists = storage + .create_database::("playlists", true) + .await?; + + Ok(DB { tracks, playlists }) +} + +/** + * Database plugin, exposing commands and state + */ +pub fn init(db: DB) -> TauriPlugin { + Builder::::new("database") + .invoke_handler(tauri::generate_handler![ + get_all_tracks, + get_tracks, + remove_tracks, + get_tracks, + get_all_playlists, + get_playlist, + get_playlist, + create_playlist, + rename_playlist, + set_playlist_tracks, + delete_playlist, + reset, + import_tracks_to_library, + ]) + .setup(|app_handle, _api| { + app_handle.manage(db); + Ok(()) + }) + .build() +} diff --git a/src-tauri/src/plugins/debug.rs b/src-tauri/src/plugins/debug.rs new file mode 100644 index 000000000..71ceb4674 --- /dev/null +++ b/src-tauri/src/plugins/debug.rs @@ -0,0 +1,13 @@ +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::Runtime; + +pub fn init() -> TauriPlugin { + Builder::::new("debug") + .on_webview_ready(|window| { + #[cfg(dev)] + { + window.open_devtools(); + } + }) + .build() +} diff --git a/src-tauri/src/plugins/default_view.rs b/src-tauri/src/plugins/default_view.rs new file mode 100644 index 000000000..a58f973dd --- /dev/null +++ b/src-tauri/src/plugins/default_view.rs @@ -0,0 +1,38 @@ +use log::info; +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{Manager, Runtime, State}; + +use crate::libs::error::AnyResult; +use crate::plugins::config::{ConfigManager, DefaultView}; + +#[tauri::command] +pub fn set(config_manager: State, default_view: DefaultView) -> AnyResult<()> { + info!("Default view set to '{:?}'", default_view); + config_manager.set_default_view(default_view); + Ok(()) +} + +/** + * Set the default view on application load based on user preference + */ +pub fn init() -> TauriPlugin { + Builder::::new("default-view") + .invoke_handler(tauri::generate_handler![set]) + .on_webview_ready(|mut window| { + if window.label().eq("main") { + let config_manager = window.state::(); + let mut url = window.url(); + let default_view = config_manager.get().default_view; + + let fragment = match default_view { + DefaultView::Library => "/library", + DefaultView::Playlists => "/playlists", + }; + + info!("Navigating to '{}'", fragment); + url.set_fragment(Some(fragment)); + window.navigate(url); + } + }) + .build() +} diff --git a/src-tauri/src/plugins/macos.rs b/src-tauri/src/plugins/macos.rs new file mode 100644 index 000000000..d006420ae --- /dev/null +++ b/src-tauri/src/plugins/macos.rs @@ -0,0 +1,27 @@ +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{Manager, Runtime}; + +/** + * Plugin in charge on making sure closing the app does not stop the audio + */ +pub fn init() -> TauriPlugin { + Builder::::new("sleepblocker") + .on_window_ready(|win| { + // Prevent macOS to kill the player when closing the main window. Instead, + // the window should be hidden and re-shown when invoking it again. + #[cfg(target_os = "macos")] + { + // Weird, should "win" be a reference instead maybe? + let window = win.clone(); + + win.on_window_event(move |event| match event { + tauri::WindowEvent::CloseRequested { api, .. } => { + window.app_handle().hide().unwrap(); + api.prevent_close(); + } + _ => {} + }); + } + }) + .build() +} diff --git a/src-tauri/src/plugins/mod.rs b/src-tauri/src/plugins/mod.rs new file mode 100644 index 000000000..b9e41c81d --- /dev/null +++ b/src-tauri/src/plugins/mod.rs @@ -0,0 +1,31 @@ +/** + * Those are a bunch of Tauri plugins used to interact with the Operating Systems + * features, like global menu, sleep-blocker, dock, thumbar, etc. + * + * It also holds the different DB creations and various helpers. + */ +pub mod debug; + +/** + * Core features + */ +pub mod app_menu; +pub mod cover; +pub mod shell_extension; + +/** + * Stores + */ +pub mod config; +pub mod database; + +/** + * Settings-related plugins + */ +pub mod default_view; +pub mod sleepblocker; + +/** + * OS-specific plugins + */ +pub mod macos; diff --git a/src-tauri/src/plugins/shell_extension.rs b/src-tauri/src/plugins/shell_extension.rs new file mode 100644 index 000000000..96c2263d2 --- /dev/null +++ b/src-tauri/src/plugins/shell_extension.rs @@ -0,0 +1,112 @@ +// Stolen and adapted from https://github.com/tauri-apps/plugins-workspace/issues/999 +// TODO: make sure it works on Windows and Linux + +use std::process::Command; + +#[cfg(not(target_os = "windows"))] +use std::path::PathBuf; + +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{generate_handler, Runtime}; + +#[cfg(target_os = "linux")] +use { + std::sync::Mutex, + std::time::Duration, + tauri::{Manager, State}, +}; + +/** + * Show item in folder for Linux, using dbus + */ +#[cfg(target_os = "linux")] +#[tauri::command] +pub fn show_item_in_folder(path: String, dbus_state: State) -> Result<(), String> { + let dbus_guard = dbus_state.0.lock().map_err(|e| e.to_string())?; + + // see https://gitlab.freedesktop.org/dbus/dbus/-/issues/76 + if dbus_guard.is_none() || path.contains(",") { + let mut path_buf = PathBuf::from(&path); + let new_path = match path_buf.is_dir() { + true => path, + false => { + path_buf.pop(); + path_buf.into_os_string().into_string().unwrap() + } + }; + Command::new("xdg-open") + .arg(&new_path) + .spawn() + .map_err(|e| format!("{e:?}"))?; + } else { + // https://docs.rs/dbus/latest/dbus/ + let dbus = dbus_guard.as_ref().unwrap(); + let proxy = dbus.with_proxy( + "org.freedesktop.FileManager1", + "/org/freedesktop/FileManager1", + Duration::from_secs(5), + ); + let (_,): (bool,) = proxy + .method_call( + "org.freedesktop.FileManager1", + "ShowItems", + (vec![format!("file://{path}")], ""), + ) + .map_err(|e| e.to_string())?; + } + Ok(()) +} + +/** + * Show item in folder + * - for macOS, using Finder + * - for Windows, using Explorer + */ +#[cfg(not(target_os = "linux"))] +#[tauri::command] +pub fn show_item_in_folder(path: String) -> Result<(), String> { + #[cfg(target_os = "windows")] + { + Command::new("explorer") + .args(["/select,", &path]) // The comma after select is not a typo + .spawn() + .map_err(|e| e.to_string())?; + } + + #[cfg(target_os = "macos")] + { + let path_buf = PathBuf::from(&path); + if path_buf.is_dir() { + Command::new("open") + .args([&path]) + .spawn() + .map_err(|e| e.to_string())?; + } else { + Command::new("open") + .args(["-R", &path]) + .spawn() + .map_err(|e| e.to_string())?; + } + } + Ok(()) +} + +#[cfg(target_os = "linux")] +pub struct DbusState(Mutex>); + +/** + * Plugin in charge of adding shell-related extended features + */ +pub fn init() -> TauriPlugin { + Builder::::new("shell-extension") + .invoke_handler(generate_handler![show_item_in_folder]) + .setup(|_app_handle, _| { + #[cfg(target_os = "linux")] + _app_handle.manage(DbusState(Mutex::new( + dbus::blocking::SyncConnection::new_session().ok(), + ))); + + Ok(()) + }) + .build() +} diff --git a/src-tauri/src/plugins/sleepblocker.rs b/src-tauri/src/plugins/sleepblocker.rs new file mode 100644 index 000000000..ffe2c7967 --- /dev/null +++ b/src-tauri/src/plugins/sleepblocker.rs @@ -0,0 +1,58 @@ +use std::sync::Mutex; + +use log::info; +use nosleep::{NoSleep, NoSleepType}; +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{Manager, Runtime, State}; + +use crate::libs::error::AnyResult; +use crate::plugins::config::ConfigManager; + +pub struct NoSleepInstance(Mutex); + +#[tauri::command] +pub fn enable( + config_manager: State, + nosleep: State, +) -> AnyResult<()> { + config_manager.set_sleepblocker(true); + + nosleep + .0 + .lock() + .unwrap() // TODO, use ? + .start(NoSleepType::PreventUserIdleSystemSleep)?; + + info!("Enabled sleepblocker"); + Ok(()) +} + +#[tauri::command] +pub fn disable( + config_manager: State, + nosleep: State, +) -> AnyResult<()> { + config_manager.set_sleepblocker(false); + + nosleep + .0 + .lock() + .unwrap() // TODO, use ? + .stop()?; + + info!("Disabled sleepblocker"); + Ok(()) +} + +/** + * Plugin in charge of preventing the app from going to sleep + */ +pub fn init() -> TauriPlugin { + Builder::::new("sleepblocker") + .invoke_handler(tauri::generate_handler![enable, disable]) + .setup(|app_handle, _api| { + app_handle.manage(NoSleepInstance(Mutex::new(NoSleep::new().unwrap()))); + Ok(()) + }) + .build() +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 000000000..f55d575e2 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,48 @@ +{ + "productName": "Museeks", + "version": "0.20.0", + "identifier": "io.museeks.app", + "build": { + "beforeDevCommand": "yarn dev", + "devUrl": "http://localhost:1420", + "beforeBuildCommand": "yarn build", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "Museeks", + "visible": false, + "hiddenTitle": true, + "titleBarStyle": "Overlay", + "height": 550, + "minHeight": 550, + "width": 900, + "minWidth": 900, + "fullscreen": false, + "resizable": true, + "fileDropEnabled": false + } + ], + "security": { + "assetProtocol": { + "enable": true, + "scope": ["**/*"] + }, + "csp": "default-src 'none'; img-src 'self' data:; media-src 'self' asset: https://asset.localhost http://asset.localhost; child-src 'self'; object-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src ipc: http://ipc.localhost 'self' https://api.github.com; font-src 'self' data:" + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "resources": ["icons/icon.png"] + } +} diff --git a/src/shared/assets/icons/player-next.svg b/src/assets/icons/player-next.svg similarity index 100% rename from src/shared/assets/icons/player-next.svg rename to src/assets/icons/player-next.svg diff --git a/src/shared/assets/icons/player-pause.svg b/src/assets/icons/player-pause.svg similarity index 100% rename from src/shared/assets/icons/player-pause.svg rename to src/assets/icons/player-pause.svg diff --git a/src/shared/assets/icons/player-play.svg b/src/assets/icons/player-play.svg similarity index 100% rename from src/shared/assets/icons/player-play.svg rename to src/assets/icons/player-play.svg diff --git a/src/shared/assets/icons/player-previous.svg b/src/assets/icons/player-previous.svg similarity index 100% rename from src/shared/assets/icons/player-previous.svg rename to src/assets/icons/player-previous.svg diff --git a/src/shared/assets/icons/player-queue.svg b/src/assets/icons/player-queue.svg similarity index 100% rename from src/shared/assets/icons/player-queue.svg rename to src/assets/icons/player-queue.svg diff --git a/src/shared/assets/icons/player-repeat-one.svg b/src/assets/icons/player-repeat-one.svg similarity index 100% rename from src/shared/assets/icons/player-repeat-one.svg rename to src/assets/icons/player-repeat-one.svg diff --git a/src/shared/assets/icons/player-repeat.svg b/src/assets/icons/player-repeat.svg similarity index 100% rename from src/shared/assets/icons/player-repeat.svg rename to src/assets/icons/player-repeat.svg diff --git a/src/shared/assets/icons/player-shuffle.svg b/src/assets/icons/player-shuffle.svg similarity index 100% rename from src/shared/assets/icons/player-shuffle.svg rename to src/assets/icons/player-shuffle.svg diff --git a/src/shared/assets/icons/windows/backward-disabled.ico b/src/assets/icons/windows/backward-disabled.ico similarity index 100% rename from src/shared/assets/icons/windows/backward-disabled.ico rename to src/assets/icons/windows/backward-disabled.ico diff --git a/src/shared/assets/icons/windows/backward.ico b/src/assets/icons/windows/backward.ico similarity index 100% rename from src/shared/assets/icons/windows/backward.ico rename to src/assets/icons/windows/backward.ico diff --git a/src/shared/assets/icons/windows/forward-disabled.ico b/src/assets/icons/windows/forward-disabled.ico similarity index 100% rename from src/shared/assets/icons/windows/forward-disabled.ico rename to src/assets/icons/windows/forward-disabled.ico diff --git a/src/shared/assets/icons/windows/forward.ico b/src/assets/icons/windows/forward.ico similarity index 100% rename from src/shared/assets/icons/windows/forward.ico rename to src/assets/icons/windows/forward.ico diff --git a/src/shared/assets/icons/windows/pause-disabled.ico b/src/assets/icons/windows/pause-disabled.ico similarity index 100% rename from src/shared/assets/icons/windows/pause-disabled.ico rename to src/assets/icons/windows/pause-disabled.ico diff --git a/src/shared/assets/icons/windows/pause.ico b/src/assets/icons/windows/pause.ico similarity index 100% rename from src/shared/assets/icons/windows/pause.ico rename to src/assets/icons/windows/pause.ico diff --git a/src/shared/assets/icons/windows/play-disabled.ico b/src/assets/icons/windows/play-disabled.ico similarity index 100% rename from src/shared/assets/icons/windows/play-disabled.ico rename to src/assets/icons/windows/play-disabled.ico diff --git a/src/shared/assets/icons/windows/play.ico b/src/assets/icons/windows/play.ico similarity index 100% rename from src/shared/assets/icons/windows/play.ico rename to src/assets/icons/windows/play.ico diff --git a/src/shared/assets/logos/museeks-128.png b/src/assets/logos/museeks-128.png similarity index 100% rename from src/shared/assets/logos/museeks-128.png rename to src/assets/logos/museeks-128.png diff --git a/src/shared/assets/logos/museeks-128@2x.png b/src/assets/logos/museeks-128@2x.png similarity index 100% rename from src/shared/assets/logos/museeks-128@2x.png rename to src/assets/logos/museeks-128@2x.png diff --git a/src/shared/assets/logos/museeks-32.png b/src/assets/logos/museeks-32.png similarity index 100% rename from src/shared/assets/logos/museeks-32.png rename to src/assets/logos/museeks-32.png diff --git a/src/shared/assets/logos/museeks-32@2x.png b/src/assets/logos/museeks-32@2x.png similarity index 100% rename from src/shared/assets/logos/museeks-32@2x.png rename to src/assets/logos/museeks-32@2x.png diff --git a/src/shared/assets/logos/museeks-48.png b/src/assets/logos/museeks-48.png similarity index 100% rename from src/shared/assets/logos/museeks-48.png rename to src/assets/logos/museeks-48.png diff --git a/src/shared/assets/logos/museeks-48@2x.png b/src/assets/logos/museeks-48@2x.png similarity index 100% rename from src/shared/assets/logos/museeks-48@2x.png rename to src/assets/logos/museeks-48@2x.png diff --git a/src/shared/assets/logos/museeks-64.png b/src/assets/logos/museeks-64.png similarity index 100% rename from src/shared/assets/logos/museeks-64.png rename to src/assets/logos/museeks-64.png diff --git a/src/shared/assets/logos/museeks-64@2x.png b/src/assets/logos/museeks-64@2x.png similarity index 100% rename from src/shared/assets/logos/museeks-64@2x.png rename to src/assets/logos/museeks-64@2x.png diff --git a/src/shared/assets/logos/museeks-tray-dark.png b/src/assets/logos/museeks-tray-dark.png similarity index 100% rename from src/shared/assets/logos/museeks-tray-dark.png rename to src/assets/logos/museeks-tray-dark.png diff --git a/src/shared/assets/logos/museeks-tray-dark@2x.png b/src/assets/logos/museeks-tray-dark@2x.png similarity index 100% rename from src/shared/assets/logos/museeks-tray-dark@2x.png rename to src/assets/logos/museeks-tray-dark@2x.png diff --git a/src/shared/assets/logos/museeks-tray.ico b/src/assets/logos/museeks-tray.ico similarity index 100% rename from src/shared/assets/logos/museeks-tray.ico rename to src/assets/logos/museeks-tray.ico diff --git a/src/shared/assets/logos/museeks-tray.png b/src/assets/logos/museeks-tray.png similarity index 100% rename from src/shared/assets/logos/museeks-tray.png rename to src/assets/logos/museeks-tray.png diff --git a/src/shared/assets/logos/museeks.icns b/src/assets/logos/museeks.icns similarity index 100% rename from src/shared/assets/logos/museeks.icns rename to src/assets/logos/museeks.icns diff --git a/src/shared/assets/logos/museeks.ico b/src/assets/logos/museeks.ico similarity index 100% rename from src/shared/assets/logos/museeks.ico rename to src/assets/logos/museeks.ico diff --git a/src/shared/assets/logos/museeks.png b/src/assets/logos/museeks.png similarity index 100% rename from src/shared/assets/logos/museeks.png rename to src/assets/logos/museeks.png diff --git a/src/shared/assets/placeholder.png b/src/assets/placeholder.png similarity index 100% rename from src/shared/assets/placeholder.png rename to src/assets/placeholder.png diff --git a/src/renderer/components/AudioOutputSelect/AudioOutputSelect.tsx b/src/components/AudioOutputSelect/AudioOutputSelect.tsx similarity index 63% rename from src/renderer/components/AudioOutputSelect/AudioOutputSelect.tsx rename to src/components/AudioOutputSelect/AudioOutputSelect.tsx index cfe2dac2e..d44c2ea36 100644 --- a/src/renderer/components/AudioOutputSelect/AudioOutputSelect.tsx +++ b/src/components/AudioOutputSelect/AudioOutputSelect.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; -import logger from '../../../shared/lib/logger'; import * as Setting from '../Setting/Setting'; +import { logAndNotifyError } from '../../lib/utils'; type Props = { defaultValue: string; @@ -15,13 +15,24 @@ export default function AudioOutputSelect(props: Props) { useEffect(() => { const refreshDevices = async () => { try { + // Webkit sucks, we need to request permissions for inputs, when we only + // need outputs + // const test = await navigator.mediaDevices.getUserMedia({ + // audio: true, + // video: false, + // }); + // console.log('media', test); const devices = await navigator.mediaDevices.enumerateDevices(); - - setDevices(devices.filter((device) => device.kind === 'audiooutput')); + // console.log('all devices', devices); + const audioDevices = devices.filter( + (device) => device.kind === 'audiooutput', + ); + // console.log('audioDevices', audioDevices); + setDevices(audioDevices); } catch (err) { setDevices([]); setHasError(true); - logger.warn(err); + logAndNotifyError(err); } }; @@ -34,17 +45,17 @@ export default function AudioOutputSelect(props: Props) { if (!devices) { return ( - + ); } if (hasError) { return ( - + ); } diff --git a/src/renderer/components/Cover/Cover.module.css b/src/components/Cover/Cover.module.css similarity index 73% rename from src/renderer/components/Cover/Cover.module.css rename to src/components/Cover/Cover.module.css index c9bdbd3ee..8354305aa 100644 --- a/src/renderer/components/Cover/Cover.module.css +++ b/src/components/Cover/Cover.module.css @@ -7,16 +7,20 @@ align-items: center; justify-content: center; box-sizing: content-box; + background-color: var(--header-bg-softer); } .empty { border: solid 1px var(--border-color); - border-width: 0 1px; box-sizing: border-box; } +.no_border { + border-width: 0; +} + .cover__note { font-family: monospace; /* the sexy one */ - font-size: 28px; - line-height: 28px; + font-size: 1em; + line-height: 1em; } diff --git a/src/components/Cover/Cover.tsx b/src/components/Cover/Cover.tsx new file mode 100644 index 000000000..136812675 --- /dev/null +++ b/src/components/Cover/Cover.tsx @@ -0,0 +1,37 @@ +import * as AspectRatio from '@radix-ui/react-aspect-ratio'; +import cx from 'classnames'; + +import type { Track } from '../../generated/typings'; +import useCover from '../../hooks/useCover'; + +import styles from './Cover.module.css'; + +type Props = { + track: Track; + noBorder?: boolean; +}; + +export default function Cover(props: Props) { + const coverPath = useCover(props.track); + + if (coverPath) { + return ( + + Album cover + + ); + } + + const classes = cx(styles.cover, styles.empty, { + [styles.no_border]: props.noBorder, + }); + + return ( + +

+ + ); +} diff --git a/src/renderer/components/DropzoneImport/DropzoneImport.module.css b/src/components/DropzoneImport/DropzoneImport.module.css similarity index 100% rename from src/renderer/components/DropzoneImport/DropzoneImport.module.css rename to src/components/DropzoneImport/DropzoneImport.module.css diff --git a/src/components/DropzoneImport/DropzoneImport.tsx b/src/components/DropzoneImport/DropzoneImport.tsx new file mode 100644 index 000000000..fdf5caa49 --- /dev/null +++ b/src/components/DropzoneImport/DropzoneImport.tsx @@ -0,0 +1,66 @@ +import cx from 'classnames'; +// import { getCurrent } from '@tauri-apps/api/window'; +import { /** useEffect,*/ useState } from 'react'; +// import { getCurrent } from '@tauri-apps/api/window'; + +// import { logAndNotifyError } from '../../lib/utils'; + +import styles from './DropzoneImport.module.css'; + +export default function DropzoneImport() { + const [isShown, setIsShown] = useState(false); + + // const unlisten = await getCurrent().onFileDropEvent((event) => { + // if (event.payload.type === 'hover') { + // console.log('User hovering', event.payload.paths); + // } else if (event.payload.type === 'drop') { + // console.log('User dropped', event.payload.paths); + // } else { + // console.log('File drop cancelled'); + // } + // }); + + // useEffect(() => { + // async function attachFileDropEvent() { + // await getCurrent() + // .onFileDropEvent((event) => { + // if (event.payload.type === 'hover') { + // setIsShown(true); + // } else if (event.payload.type === 'drop') { + // console.log(event.payload.paths); + // setIsShown(false); + // } else { + // setIsShown(false); + // } + // }) + // .catch(logAndNotifyError); + // } + + // attachFileDropEvent().catch(logAndNotifyError); + + // return getCurrent().clearEffects; + // }, []); + + const classes = cx(styles.dropzone, { + [styles.shown]: isShown, + }); + + // TODO: Fix this, drop files from TAURI instead + // const files = item.files.map((file) => file.path); + // libraryAPI + // .add(files) + // .then((/* _importedTracks */) => { + // // TODO: Import to playlist here + // }) + // .catch((err) => { + // logger.warn(err); + // }); + return ( +
+
Add music to the library
+
+ Drop files or folders anywhere +
+
+ ); +} diff --git a/src/renderer/components/Events/AppEvents.tsx b/src/components/Events/AppEvents.tsx similarity index 55% rename from src/renderer/components/Events/AppEvents.tsx rename to src/components/Events/AppEvents.tsx index 721d87b09..fe79473cf 100644 --- a/src/renderer/components/Events/AppEvents.tsx +++ b/src/components/Events/AppEvents.tsx @@ -1,14 +1,10 @@ import { useEffect } from 'react'; -import type { IpcRendererEvent } from 'electron'; import player from '../../lib/player'; -import { preventNativeDefault } from '../../lib/utils-events'; -import SettingsAPI from '../../stores/SettingsAPI'; -import channels from '../../../shared/lib/ipc-channels'; -import type { Theme } from '../../../shared/types/museeks'; -import logger from '../../../shared/lib/logger'; - -const { ipcRenderer } = window.ElectronAPI; +import { isDev, preventNativeDefault } from '../../lib/utils-events'; +// import SettingsAPI from '../../stores/SettingsAPI'; +// import type { Theme } from '../../types/museeks'; +import { logAndNotifyError } from '../../lib/utils'; /** * Handle app-level IPC Events init and cleanup @@ -19,19 +15,25 @@ function AppEvents() { window.addEventListener('dragover', preventNativeDefault, false); window.addEventListener('drop', preventNativeDefault, false); - // Auto-update theme if set to system and the native theme changes - function updateTheme(_event: IpcRendererEvent, theme: unknown) { - SettingsAPI.applyThemeToUI(theme as Theme); + // Disable the default context menu on production builds + if (!isDev()) { + window.addEventListener('contextmenu', preventNativeDefault); } - ipcRenderer.on(channels.THEME_APPLY, updateTheme); + // TODO: fix that https://github.com/tauri-apps/tauri/issues/5279 + // Auto-update theme if set to system and the native theme changes + // function updateTheme(_event: IpcRendererEvent, theme: unknown) { + // SettingsAPI.applyThemeToUI(theme as Theme); + // } + + // ipcRenderer.on(channels.THEME_APPLY, updateTheme); // Support for multiple audio output async function updateOutputDevice() { try { await player.setOutputDevice('default'); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } } @@ -41,7 +43,11 @@ function AppEvents() { window.removeEventListener('dragover', preventNativeDefault, false); window.removeEventListener('drop', preventNativeDefault, false); - ipcRenderer.off(channels.THEME_APPLY, updateTheme); + if (!isDev()) { + window.removeEventListener('contextmenu', preventNativeDefault); + } + + // ipcRenderer.off(channels.THEME_APPLY, updateTheme); navigator.mediaDevices.removeEventListener( 'devicechange', diff --git a/src/renderer/components/Events/GlobalKeyBindings.tsx b/src/components/Events/GlobalKeyBindings.tsx similarity index 94% rename from src/renderer/components/Events/GlobalKeyBindings.tsx rename to src/components/Events/GlobalKeyBindings.tsx index bec92c54a..59cab3f84 100644 --- a/src/renderer/components/Events/GlobalKeyBindings.tsx +++ b/src/components/Events/GlobalKeyBindings.tsx @@ -13,7 +13,7 @@ function GlobalKeyBindings() { const navigate = useNavigate(); const playerAPI = usePlayerAPI(); - // App shortcuts (not using Electron's global shortcuts API to avoid conflicts + // App shortcuts (not using global shortcuts API to avoid conflicts // with other applications) const onKey = useCallback( async (e: KeyboardEvent) => { diff --git a/src/renderer/components/Events/IPCNavigationEvents.tsx b/src/components/Events/IPCNavigationEvents.tsx similarity index 56% rename from src/renderer/components/Events/IPCNavigationEvents.tsx rename to src/components/Events/IPCNavigationEvents.tsx index 93381a64f..be4efadb3 100644 --- a/src/renderer/components/Events/IPCNavigationEvents.tsx +++ b/src/components/Events/IPCNavigationEvents.tsx @@ -1,10 +1,8 @@ import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; +import { getCurrent } from '@tauri-apps/api/window'; import { usePlayerAPI } from '../../stores/usePlayerStore'; -import channels from '../../../shared/lib/ipc-channels'; - -const { ipcRenderer } = window.ElectronAPI; /** * Handle app-level IPC Navigation events @@ -27,14 +25,23 @@ function IPCNavigationEvents() { } // Shortcuts from the application menu - ipcRenderer.on(channels.MENU_GO_TO_LIBRARY, goToLibrary); - ipcRenderer.on(channels.MENU_GO_TO_PLAYLISTS, goToPlaylists); - ipcRenderer.on(channels.MENU_JUMP_TO_PLAYING_TRACK, goToPlayingTrack); + const unlistenGoToLibrary = getCurrent().listen( + 'MENU_GO_TO_LIBRARY', + goToLibrary, + ); + const unlistenGoToPlaylists = getCurrent().listen( + 'MENU_GO_TO_PLAYLISTS', + goToPlaylists, + ); + const unlistenGoToPlayingTrack = getCurrent().listen( + 'MENU_JUMP_TO_PLAYING_TRACK', + goToPlayingTrack, + ); return function cleanup() { - ipcRenderer.off(channels.MENU_GO_TO_LIBRARY, goToLibrary); - ipcRenderer.off(channels.MENU_GO_TO_PLAYLISTS, goToPlaylists); - ipcRenderer.off(channels.MENU_JUMP_TO_PLAYING_TRACK, goToPlayingTrack); + unlistenGoToLibrary.then((u) => u()); + unlistenGoToPlaylists.then((u) => u()); + unlistenGoToPlayingTrack.then((u) => u()); }; }, [navigate, playerAPI]); diff --git a/src/renderer/components/Events/IPCPlayerEvents.tsx b/src/components/Events/IPCPlayerEvents.tsx similarity index 83% rename from src/renderer/components/Events/IPCPlayerEvents.tsx rename to src/components/Events/IPCPlayerEvents.tsx index 7755af7f3..eccc58598 100644 --- a/src/renderer/components/Events/IPCPlayerEvents.tsx +++ b/src/components/Events/IPCPlayerEvents.tsx @@ -1,26 +1,18 @@ import { useEffect } from 'react'; -import channels from '../../../shared/lib/ipc-channels'; +import channels from '../../lib/ipc-channels'; import { usePlayerAPI } from '../../stores/usePlayerStore'; -import useCurrentViewTracks from '../../hooks/useCurrentViewTracks'; import player from '../../lib/player'; -const { ipcRenderer } = window.ElectronAPI; - /** * Handle app-level IPC Events init and cleanup */ function IPCPlayerEvents() { const playerAPI = usePlayerAPI(); - const tracks = useCurrentViewTracks(); useEffect(() => { function play() { - if (player.getTrack()) { - playerAPI.play(); - } else { - playerAPI.start(tracks); - } + playerAPI.play(); } function onPlay() { @@ -57,7 +49,7 @@ function IPCPlayerEvents() { player.getAudio().removeEventListener('play', onPlay); player.getAudio().removeEventListener('pause', onPause); }; - }, [playerAPI, tracks]); + }, [playerAPI]); return null; } diff --git a/src/components/Events/LibraryEvents.tsx b/src/components/Events/LibraryEvents.tsx new file mode 100644 index 000000000..52d0252df --- /dev/null +++ b/src/components/Events/LibraryEvents.tsx @@ -0,0 +1,29 @@ +import { useEffect } from 'react'; +import { listen } from '@tauri-apps/api/event'; + +import { useLibraryAPI } from '../../stores/useLibraryStore'; +import { IPCEvent, Progress } from '../../generated/typings'; + +/** + * Handle Library-related app events, like refreshing and progress status + */ +function LibraryEvents() { + const { setRefresh } = useLibraryAPI(); + + useEffect(() => { + const promise = listen( + 'LibraryScanProgress' satisfies IPCEvent, + ({ payload }) => { + setRefresh(payload.current, payload.total); + }, + ); + + return () => { + promise.then((unlisten) => unlisten()); + }; + }, [setRefresh]); + + return null; +} + +export default LibraryEvents; diff --git a/src/renderer/components/Events/MediaSessionEvents.tsx b/src/components/Events/MediaSessionEvents.tsx similarity index 59% rename from src/renderer/components/Events/MediaSessionEvents.tsx rename to src/components/Events/MediaSessionEvents.tsx index da3006977..b550ca5f4 100644 --- a/src/renderer/components/Events/MediaSessionEvents.tsx +++ b/src/components/Events/MediaSessionEvents.tsx @@ -2,6 +2,7 @@ import { useEffect } from 'react'; import { usePlayerAPI } from '../../stores/usePlayerStore'; import player from '../../lib/player'; +import library from '../../lib/library'; /** * Integration for MediaSession (mpris, macOS player controls etc)... @@ -14,24 +15,28 @@ function MediaSessionEvents() { player.getAudio().addEventListener('play', onAudioPlay); player.getAudio().addEventListener('pause', onAudioPause); - navigator.mediaSession.setActionHandler('play', () => playerAPI.play()); - navigator.mediaSession.setActionHandler('pause', () => playerAPI.pause()); - navigator.mediaSession.setActionHandler('previoustrack', () => - playerAPI.previous(), - ); - navigator.mediaSession.setActionHandler('nexttrack', () => - playerAPI.next(), - ); + if ('mediaSession' in navigator) { + navigator.mediaSession.setActionHandler('play', () => playerAPI.play()); + navigator.mediaSession.setActionHandler('pause', () => playerAPI.pause()); + navigator.mediaSession.setActionHandler('previoustrack', () => + playerAPI.previous(), + ); + navigator.mediaSession.setActionHandler('nexttrack', () => + playerAPI.next(), + ); + } return function cleanup() { player.getAudio().removeEventListener('loadstart', syncArtwork); player.getAudio().removeEventListener('play', onAudioPlay); player.getAudio().removeEventListener('pause', onAudioPause); - navigator.mediaSession.setActionHandler('play', null); - navigator.mediaSession.setActionHandler('pause', null); - navigator.mediaSession.setActionHandler('previoustrack', null); - navigator.mediaSession.setActionHandler('nexttrack', null); + if ('mediaSession' in navigator) { + navigator.mediaSession.setActionHandler('play', null); + navigator.mediaSession.setActionHandler('pause', null); + navigator.mediaSession.setActionHandler('previoustrack', null); + navigator.mediaSession.setActionHandler('nexttrack', null); + } }; }, [playerAPI]); @@ -48,11 +53,11 @@ async function syncArtwork() { const track = player.getTrack(); if (track) { - const cover = await window.MuseeksAPI.covers.getCoverAsBase64(track); + const cover = await library.getCover(track.path); navigator.mediaSession.metadata = new MediaMetadata({ title: track.title, - artist: track.artist.join(', '), + artist: track.artists.join(', '), album: track.album, artwork: cover ? [{ src: cover }] : undefined, }); diff --git a/src/renderer/components/Events/PlayerEvents.tsx b/src/components/Events/PlayerEvents.tsx similarity index 61% rename from src/renderer/components/Events/PlayerEvents.tsx rename to src/components/Events/PlayerEvents.tsx index 69ae424cc..22eae5e18 100644 --- a/src/renderer/components/Events/PlayerEvents.tsx +++ b/src/components/Events/PlayerEvents.tsx @@ -1,9 +1,14 @@ import { useEffect } from 'react'; +import { sendNotification } from '@tauri-apps/plugin-notification'; +import { getCurrent } from '@tauri-apps/api/window'; import { usePlayerAPI } from '../../stores/usePlayerStore'; import { useToastsAPI } from '../../stores/useToastsStore'; import { useLibraryAPI } from '../../stores/useLibraryStore'; import player from '../../lib/player'; +import config from '../../lib/config'; +import { logAndNotifyError } from '../../lib/utils'; +import library from '../../lib/library'; const AUDIO_ERRORS = { aborted: 'The video playback was aborted.', @@ -21,23 +26,6 @@ function PlayerEvents() { const libraryAPI = useLibraryAPI(); const toastsAPI = useToastsAPI(); - // // If no queue is provided, we create it based on the screen the user is on - // if (!newQueue) { - // if (hash.startsWith('#/playlists')) { - // newQueue = library.tracks.playlist; - // newQueue = []; - // } else { - // // we are either on the library or the settings view - // // so let's play the whole library - // // Because the tracks in the store are not ordered, let's filter - // // and sort everything - // const { sort, search } = library; - // newQueue = library.tracks; - - // newQueue = sortTracks(filterTracks(newQueue, search), SORT_ORDERS[sort.by][sort.order]); - // } - // } - useEffect(() => { function handleAudioError(e: ErrorEvent) { playerAPI.stop(); @@ -66,22 +54,41 @@ function PlayerEvents() { } } - function incrementPlayCount() { - if (player.isThresholdReached()) { - const track = player.getTrack(); - if (track) libraryAPI.incrementPlayCount(track); + async function notifyTrackChange() { + const track = player.getTrack(); + const isEnabled = await config.get('notifications'); + const isMinimized = await getCurrent() + .isMinimized() + .catch(logAndNotifyError); + const isFocused = await getCurrent().isFocused().catch(logAndNotifyError); + + if (track == null || !isEnabled || isFocused || !isMinimized) { + return; } + + // FIXME: cover is not working as intended + const cover = await library.getCover(track.path); + + sendNotification({ + title: track.title, + body: `${track.artists.join(', ')}\n${track.album}`, + silent: true, + icon: cover ?? undefined, + // TODO: onClick event https://github.com/tauri-apps/tauri/issues/3698 + // show + focus + unminimize + }); } + // Bind player events // Audio Events - player.getAudio().addEventListener('ended', playerAPI.next); + player.getAudio().addEventListener('play', notifyTrackChange); player.getAudio().addEventListener('error', handleAudioError); - player.getAudio().addEventListener('timeupdate', incrementPlayCount); + player.getAudio().addEventListener('ended', playerAPI.next); return function cleanup() { + player.getAudio().removeEventListener('play', notifyTrackChange); player.getAudio().removeEventListener('ended', playerAPI.next); player.getAudio().removeEventListener('error', handleAudioError); - player.getAudio().removeEventListener('timeupdate', incrementPlayCount); }; }, [libraryAPI, toastsAPI, playerAPI]); diff --git a/src/renderer/components/Footer/Footer.module.css b/src/components/Footer/Footer.module.css similarity index 100% rename from src/renderer/components/Footer/Footer.module.css rename to src/components/Footer/Footer.module.css diff --git a/src/renderer/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx similarity index 94% rename from src/renderer/components/Footer/Footer.tsx rename to src/components/Footer/Footer.tsx index 664346fd3..29a609fa5 100644 --- a/src/renderer/components/Footer/Footer.tsx +++ b/src/components/Footer/Footer.tsx @@ -12,12 +12,12 @@ export default function Footer() { const refreshing = useLibraryStore((state) => state.refreshing); const getStatusContent = useCallback(() => { - const { processed, total } = refresh; + const { current, total } = refresh; if (refreshing) { // Sketchy const isScanning = total === 0; - const progress = total > 0 ? Math.round((processed / total) * 100) : 100; + const progress = total > 0 ? Math.round((current / total) * 100) : 100; return (
@@ -30,7 +30,7 @@ export default function Footer() {
{total > 0 && (
- {processed} / {total} + {current} / {total}
)} diff --git a/src/renderer/components/Header/Header.module.css b/src/components/Header/Header.module.css similarity index 75% rename from src/renderer/components/Header/Header.module.css rename to src/components/Header/Header.module.css index bf0e89536..3a2cb8f1c 100644 --- a/src/renderer/components/Header/Header.module.css +++ b/src/components/Header/Header.module.css @@ -1,10 +1,10 @@ -:global(.os__darwin) .header__mainControls { - padding-left: 65px; /* let some space for titleBarStyle */ +:global(.os__macos) .header__mainControls { + padding-left: 60px; /* let some space for titleBarStyle */ } /* The native frame may be light, so we need to increase the contrast between the frame and the header */ -:global(.os__win32), +:global(.os__windows), :global(.os__linux) { .header { border-top: 1px solid var(--border-color); @@ -14,6 +14,7 @@ .header { border-bottom: solid 1px var(--border-color); background-color: var(--header-bg); + box-sizing: content-box; color: var(--header-color); padding: 0 10px; display: flex; @@ -21,9 +22,6 @@ justify-content: space-between; height: 50px; flex: 0 0 auto; - - /* Draggable region (zone able to move the window) */ - -webkit-app-region: drag; } .header__mainControls { @@ -31,10 +29,10 @@ display: flex; align-items: center; padding-right: 10px; + min-width: 200px; } .header__search { - -webkit-app-region: no-drag; margin-left: 12px; flex: 0 0 auto; display: flex; @@ -45,11 +43,7 @@ flex: 1 1 auto; min-width: 0; max-width: 600px; -} - -.header__queue { display: flex; - align-items: center; } .queueToggle { @@ -60,11 +54,10 @@ background: transparent; font-size: 14px; box-shadow: none; - -webkit-app-region: no-drag; + flex-shrink: 0; } .queueContainer { - -webkit-app-region: no-drag; display: none; position: absolute; z-index: 1000; diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx new file mode 100644 index 000000000..45c3f801c --- /dev/null +++ b/src/components/Header/Header.tsx @@ -0,0 +1,54 @@ +import Icon from 'react-fontawesome'; +import * as Popover from '@radix-ui/react-popover'; + +import Queue from '../Queue/Queue'; +import PlayingBar from '../PlayingBar/PlayingBar'; +import PlayerControls from '../PlayerControls/PlayerControls'; +import Search from '../Search/Search'; +import usePlayerStore from '../../stores/usePlayerStore'; +import usePlayingTrack from '../../hooks/usePlayingTrack'; + +import styles from './Header.module.css'; + +export default function Header() { + const queue = usePlayerStore((state) => state.queue); + const queueCursor = usePlayerStore((state) => state.queueCursor); + const trackPlaying = usePlayingTrack(); + + return ( +
+
+ +
+
+ {trackPlaying != null && ( + <> + + + + + + + + + + + + + )} +
+
+ +
+
+ ); +} diff --git a/src/renderer/components/PlayerControls/PlayerControls.module.css b/src/components/PlayerControls/PlayerControls.module.css similarity index 94% rename from src/renderer/components/PlayerControls/PlayerControls.module.css rename to src/components/PlayerControls/PlayerControls.module.css index f7c76039a..93c0b8144 100644 --- a/src/renderer/components/PlayerControls/PlayerControls.module.css +++ b/src/components/PlayerControls/PlayerControls.module.css @@ -1,5 +1,4 @@ .playerControls { - -webkit-app-region: no-drag; display: flex; align-items: center; position: relative; diff --git a/src/renderer/components/PlayerControls/PlayerControls.tsx b/src/components/PlayerControls/PlayerControls.tsx similarity index 89% rename from src/renderer/components/PlayerControls/PlayerControls.tsx rename to src/components/PlayerControls/PlayerControls.tsx index 8b8c0abb0..12e65b2f1 100644 --- a/src/renderer/components/PlayerControls/PlayerControls.tsx +++ b/src/components/PlayerControls/PlayerControls.tsx @@ -1,7 +1,7 @@ import Icon from 'react-fontawesome'; import VolumeControl from '../VolumeControl/VolumeControl'; -import { PlayerStatus } from '../../../shared/types/museeks'; +import { PlayerStatus } from '../../types/museeks'; import usePlayerStore, { usePlayerAPI } from '../../stores/usePlayerStore'; import styles from './PlayerControls.module.css'; @@ -17,6 +17,7 @@ export default function PlayerControls() { className={styles.control} title="Previous" onClick={playerAPI.previous} + data-museeks-action > @@ -24,6 +25,7 @@ export default function PlayerControls() { className={`${styles.control} ${styles.play}`} title={playerStatus === PlayerStatus.PLAY ? 'Pause' : 'Play'} onClick={playerAPI.playPause} + data-museeks-action > diff --git a/src/renderer/components/PlayerOptionsButtons/ButtonRepeat.tsx b/src/components/PlayerOptionsButtons/ButtonRepeat.tsx similarity index 53% rename from src/renderer/components/PlayerOptionsButtons/ButtonRepeat.tsx rename to src/components/PlayerOptionsButtons/ButtonRepeat.tsx index 2ac2fb4c8..d49e63533 100644 --- a/src/renderer/components/PlayerOptionsButtons/ButtonRepeat.tsx +++ b/src/components/PlayerOptionsButtons/ButtonRepeat.tsx @@ -1,30 +1,38 @@ import InlineSVG from 'svg-inline-react'; import cx from 'classnames'; -import { Repeat } from '../../../shared/types/museeks'; import icons from '../../lib/icons'; import usePlayerStore, { usePlayerAPI } from '../../stores/usePlayerStore'; +import { Repeat } from '../../generated/typings'; import styles from './common.module.css'; -const svgMap = { - [Repeat.ONE]: icons.REPEAT_ONE, - [Repeat.ALL]: icons.REPEAT, - [Repeat.NONE]: icons.REPEAT, - default: icons.REPEAT, -}; +function getIcon(repeat: Repeat) { + switch (repeat) { + case 'One': + return icons.REPEAT_ONE; + case 'None': + case 'All': + default: + return icons.REPEAT; + } +} export default function ButtonRepeat() { const repeat = usePlayerStore((state) => state.repeat); const playerAPI = usePlayerAPI(); - const svg = svgMap[repeat] || svgMap.default; + const svg = getIcon(repeat); const buttonClasses = cx(styles.button, { - [styles.active]: repeat === Repeat.ONE || repeat === Repeat.ALL, + [styles.active]: repeat === 'One' || repeat === 'All', }); return ( - ); diff --git a/src/renderer/components/PlayerOptionsButtons/ButtonShuffle.tsx b/src/components/PlayerOptionsButtons/ButtonShuffle.tsx similarity index 96% rename from src/renderer/components/PlayerOptionsButtons/ButtonShuffle.tsx rename to src/components/PlayerOptionsButtons/ButtonShuffle.tsx index 7af930c98..e27101c80 100644 --- a/src/renderer/components/PlayerOptionsButtons/ButtonShuffle.tsx +++ b/src/components/PlayerOptionsButtons/ButtonShuffle.tsx @@ -21,6 +21,7 @@ export default function ButtonShuffle() { onClick={() => { playerAPI.toggleShuffle(); }} + data-museeks-action > diff --git a/src/renderer/components/PlayerOptionsButtons/common.module.css b/src/components/PlayerOptionsButtons/common.module.css similarity index 91% rename from src/renderer/components/PlayerOptionsButtons/common.module.css rename to src/components/PlayerOptionsButtons/common.module.css index 95a3a5949..a2e3257d7 100644 --- a/src/renderer/components/PlayerOptionsButtons/common.module.css +++ b/src/components/PlayerOptionsButtons/common.module.css @@ -7,11 +7,11 @@ } .button { - -webkit-app-region: no-drag; border: 0; color: inherit; background: transparent; font-size: 20px; + padding: 0 8px; &.active { .icon > svg { diff --git a/src/renderer/components/PlayingBar/PlayingBar.module.css b/src/components/PlayingBar/PlayingBar.module.css similarity index 89% rename from src/renderer/components/PlayingBar/PlayingBar.module.css rename to src/components/PlayingBar/PlayingBar.module.css index 84a8c9920..52737eec8 100644 --- a/src/renderer/components/PlayingBar/PlayingBar.module.css +++ b/src/components/PlayingBar/PlayingBar.module.css @@ -6,6 +6,8 @@ background: var(--header-bg-softer); border: solid 1px var(--border-color-softer); border-width: 0 1px; + flex: 1 1 auto; + min-width: 0; } .playingBar__cover { @@ -14,10 +16,10 @@ overflow: hidden; box-sizing: content-box; border-right: solid 1px var(--border-color-softer); + font-size: 28px; } .playerOptions { - -webkit-app-region: no-drag; flex-shrink: 0; display: flex; align-items: center; diff --git a/src/renderer/components/PlayingBar/PlayingBar.tsx b/src/components/PlayingBar/PlayingBar.tsx similarity index 77% rename from src/renderer/components/PlayingBar/PlayingBar.tsx rename to src/components/PlayingBar/PlayingBar.tsx index 7ba769983..0799fd7fd 100644 --- a/src/renderer/components/PlayingBar/PlayingBar.tsx +++ b/src/components/PlayingBar/PlayingBar.tsx @@ -3,24 +3,23 @@ import Cover from '../Cover/Cover'; import usePlayerStore from '../../stores/usePlayerStore'; import ButtonRepeat from '../PlayerOptionsButtons/ButtonRepeat'; import ButtonShuffle from '../PlayerOptionsButtons/ButtonShuffle'; -import usePlayingTrack from '../../hooks/usePlayingTrack'; +import { Track } from '../../generated/typings'; import styles from './PlayingBar.module.css'; -export default function PlayingBar() { +type Props = { + trackPlaying: Track; +}; + +export default function PlayingBar(props: Props) { const repeat = usePlayerStore((state) => state.repeat); const shuffle = usePlayerStore((state) => state.shuffle); - - const trackPlaying = usePlayingTrack(); - - if (trackPlaying === null) { - return null; - } + const trackPlaying = props.trackPlaying; return (
- +
+
{utils.parseDuration(elapsed)}
+
{trackPlaying.title}
- {trackPlaying.artist.join(', ')} + {trackPlaying.artists.join(', ')}  —  {trackPlaying.album}
diff --git a/src/renderer/components/PlayingIndicator/PlayingIndicator.module.css b/src/components/PlayingIndicator/PlayingIndicator.module.css similarity index 79% rename from src/renderer/components/PlayingIndicator/PlayingIndicator.module.css rename to src/components/PlayingIndicator/PlayingIndicator.module.css index d1f70c422..bef0a5d61 100644 --- a/src/renderer/components/PlayingIndicator/PlayingIndicator.module.css +++ b/src/components/PlayingIndicator/PlayingIndicator.module.css @@ -6,15 +6,6 @@ align-items: center; justify-content: center; cursor: pointer; - transform-origin: center; -} - -.playingIndicator :global(.fa) { - transition: transform ease-in-out 0.2s; -} - -.playingIndicator:hover :global(.fa) { - transform: scale(1.3); } .animation { @@ -35,8 +26,6 @@ animation-timing-function: ease-in-out; animation-iteration-count: infinite; transform-origin: bottom; - transform: scale3d(1, 0, 1); - will-change: transform; } .animation .bar.barSecond { diff --git a/src/renderer/components/PlayingIndicator/PlayingIndicator.tsx b/src/components/PlayingIndicator/PlayingIndicator.tsx similarity index 93% rename from src/renderer/components/PlayingIndicator/PlayingIndicator.tsx rename to src/components/PlayingIndicator/PlayingIndicator.tsx index b0d594d9c..dfbfb5355 100644 --- a/src/renderer/components/PlayingIndicator/PlayingIndicator.tsx +++ b/src/components/PlayingIndicator/PlayingIndicator.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; import Icon from 'react-fontawesome'; -import { PlayerStatus } from '../../../shared/types/museeks'; +import { PlayerStatus } from '../../types/museeks'; import usePlayerStore, { usePlayerAPI } from '../../stores/usePlayerStore'; import styles from './PlayingIndicator.module.css'; @@ -38,6 +38,7 @@ export default function TrackPlayingIndicator() { onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} tabIndex={0} + data-museeks-action > {icon} diff --git a/src/renderer/components/PlaylistsNav/PlaylistsNav.module.css b/src/components/PlaylistsNav/PlaylistsNav.module.css similarity index 100% rename from src/renderer/components/PlaylistsNav/PlaylistsNav.module.css rename to src/components/PlaylistsNav/PlaylistsNav.module.css diff --git a/src/renderer/components/PlaylistsNav/PlaylistsNav.tsx b/src/components/PlaylistsNav/PlaylistsNav.tsx similarity index 66% rename from src/renderer/components/PlaylistsNav/PlaylistsNav.tsx rename to src/components/PlaylistsNav/PlaylistsNav.tsx index 79f2d3363..ace709e6c 100644 --- a/src/renderer/components/PlaylistsNav/PlaylistsNav.tsx +++ b/src/components/PlaylistsNav/PlaylistsNav.tsx @@ -1,64 +1,68 @@ /* eslint-disable jsx-a11y/no-autofocus */ -import type { MenuItemConstructorOptions } from 'electron'; import React, { useCallback, useState } from 'react'; import Icon from 'react-fontawesome'; +import { Menu, MenuItem, PredefinedMenuItem } from '@tauri-apps/api/menu'; import PlaylistsAPI from '../../stores/PlaylistsAPI'; import PlaylistsNavLink from '../PlaylistsNavLink/PlaylistsNavLink'; -import { PlaylistModel } from '../../../shared/types/museeks'; +import { Playlist } from '../../generated/typings'; +import { logAndNotifyError } from '../../lib/utils'; import styles from './PlaylistsNav.module.css'; -const { menu } = window.ElectronAPI; - type Props = { - playlists: PlaylistModel[]; + playlists: Playlist[]; }; export default function PlaylistsNav(props: Props) { const [renamed, setRenamed] = useState(null); - const showContextMenu = useCallback((playlistID: string) => { - const template: MenuItemConstructorOptions[] = [ - { - label: 'Rename', - click: () => { - setRenamed(playlistID); - }, - }, - { - label: 'Delete', - click: async () => { - await PlaylistsAPI.remove(playlistID); - }, - }, - { - type: 'separator', - }, - { - label: 'Duplicate', - click: async () => { - await PlaylistsAPI.duplicate(playlistID); - }, - }, - { - type: 'separator', - }, - { - label: 'Export', - click: async () => { - await PlaylistsAPI.exportToM3u(playlistID); - }, - }, - ]; - - menu.showContextMenu(template); - }, []); + const showContextMenu = useCallback( + async (e: React.MouseEvent, playlistID: string) => { + e.preventDefault(); + + const menuItems = await Promise.all([ + MenuItem.new({ + text: 'Rename', + action: () => { + setRenamed(playlistID); + }, + }), + MenuItem.new({ + text: 'Delete', + action: async () => { + await PlaylistsAPI.remove(playlistID); + }, + }), + PredefinedMenuItem.new({ item: 'Separator' }), + MenuItem.new({ + text: 'Duplicate', + action: async () => { + await PlaylistsAPI.duplicate(playlistID); + }, + }), + PredefinedMenuItem.new({ item: 'Separator' }), + MenuItem.new({ + text: 'Export', + action: async () => { + await PlaylistsAPI.exportToM3u(playlistID); + }, + }), + ]); + + const menu = await Menu.new({ + items: menuItems, + }); + + await menu.popup().catch(logAndNotifyError); + }, + [], + ); const createPlaylist = useCallback(async () => { - // Todo 'new playlist 1', 'new playlist 2' ... - await PlaylistsAPI.create('New playlist', [], false, true); + // TODO: 'new playlist 1', 'new playlist 2' ... + await PlaylistsAPI.create('New playlist', [], false); }, []); const rename = useCallback(async (playlistID: string, name: string) => { @@ -108,7 +112,6 @@ export default function PlaylistsNav(props: Props) { const { playlists } = props; - // TODO (y.solovyov): extract into separate method that returns items const nav = playlists.map((elem) => { let navItemContent; @@ -148,6 +151,7 @@ export default function PlaylistsNav(props: Props) { className={styles.action} onClick={createPlaylist} title="New playlist" + data-museeks-action > diff --git a/src/renderer/components/PlaylistsNavLink/PlaylistsNavLink.module.css b/src/components/PlaylistsNavLink/PlaylistsNavLink.module.css similarity index 100% rename from src/renderer/components/PlaylistsNavLink/PlaylistsNavLink.module.css rename to src/components/PlaylistsNavLink/PlaylistsNavLink.module.css diff --git a/src/renderer/components/PlaylistsNavLink/PlaylistsNavLink.tsx b/src/components/PlaylistsNavLink/PlaylistsNavLink.tsx similarity index 82% rename from src/renderer/components/PlaylistsNavLink/PlaylistsNavLink.tsx rename to src/components/PlaylistsNavLink/PlaylistsNavLink.tsx index 7749b759c..56e5abf29 100644 --- a/src/renderer/components/PlaylistsNavLink/PlaylistsNavLink.tsx +++ b/src/components/PlaylistsNavLink/PlaylistsNavLink.tsx @@ -9,7 +9,7 @@ type Props = { children: React.ReactNode; className?: string; playlistID: string; - onContextMenu: (playlistID: string) => void; + onContextMenu: (e: React.MouseEvent, playlistID: string) => void; }; export default function PlaylistsNavLink(props: Props) { @@ -19,7 +19,7 @@ export default function PlaylistsNavLink(props: Props) { `${props.className} ${styles.playlistLink} ${isActive && 'isActive'}` } to={`/playlists/${props.playlistID}`} - onContextMenu={() => props.onContextMenu(props.playlistID)} + onContextMenu={(e) => props.onContextMenu(e, props.playlistID)} draggable={false} onDoubleClick={() => PlaylistsAPI.play(props.playlistID)} > diff --git a/src/components/ProgressBar/ProgressBar.module.css b/src/components/ProgressBar/ProgressBar.module.css new file mode 100644 index 000000000..93d9e85e6 --- /dev/null +++ b/src/components/ProgressBar/ProgressBar.module.css @@ -0,0 +1,13 @@ +.progress { + --progress-height: 6px; + + flex: 1; + display: block; + height: var(--progress-height); + background-color: var(--progress-bg); +} + +.progressBar { + height: var(--progress-height); + background-color: var(--main-color); +} diff --git a/src/renderer/components/ProgressBar/ProgressBar.tsx b/src/components/ProgressBar/ProgressBar.tsx similarity index 55% rename from src/renderer/components/ProgressBar/ProgressBar.tsx rename to src/components/ProgressBar/ProgressBar.tsx index 6f81dc924..3299f16d6 100644 --- a/src/renderer/components/ProgressBar/ProgressBar.tsx +++ b/src/components/ProgressBar/ProgressBar.tsx @@ -1,3 +1,4 @@ +import * as Progress from '@radix-ui/react-progress'; import cx from 'classnames'; import styles from './ProgressBar.module.css'; @@ -9,11 +10,14 @@ type Props = { export default function ProgressBar(props: Props) { return ( -
-
+
-
+ /> + ); } diff --git a/src/renderer/components/Queue/Queue.module.css b/src/components/Queue/Queue.module.css similarity index 84% rename from src/renderer/components/Queue/Queue.module.css rename to src/components/Queue/Queue.module.css index 6b31f98d8..f7431944b 100644 --- a/src/renderer/components/Queue/Queue.module.css +++ b/src/components/Queue/Queue.module.css @@ -2,6 +2,7 @@ width: 300px; background: var(--queue-bg); border: solid 1px var(--border-color); + border-radius: var(--border-radius); text-overflow: ellipsis; overflow-x: hidden; font-size: 12px; diff --git a/src/renderer/components/Queue/Queue.tsx b/src/components/Queue/Queue.tsx similarity index 90% rename from src/renderer/components/Queue/Queue.tsx rename to src/components/Queue/Queue.tsx index 380cf9a6f..263478048 100644 --- a/src/renderer/components/Queue/Queue.tsx +++ b/src/components/Queue/Queue.tsx @@ -2,12 +2,12 @@ import React, { useMemo } from 'react'; import QueueEmpty from '../QueueEmpty/QueueEmpty'; import QueueList from '../QueueList/QueueList'; -import { TrackModel } from '../../../shared/types/museeks'; +import { Track } from '../../generated/typings'; import styles from './Queue.module.css'; type Props = { - queue: TrackModel[]; + queue: Track[]; queueCursor: number | null; }; diff --git a/src/renderer/components/QueueEmpty/QueueEmpty.module.css b/src/components/QueueEmpty/QueueEmpty.module.css similarity index 100% rename from src/renderer/components/QueueEmpty/QueueEmpty.module.css rename to src/components/QueueEmpty/QueueEmpty.module.css diff --git a/src/renderer/components/QueueEmpty/QueueEmpty.tsx b/src/components/QueueEmpty/QueueEmpty.tsx similarity index 100% rename from src/renderer/components/QueueEmpty/QueueEmpty.tsx rename to src/components/QueueEmpty/QueueEmpty.tsx diff --git a/src/renderer/components/QueueList/QueueList.module.css b/src/components/QueueList/QueueList.module.css similarity index 83% rename from src/renderer/components/QueueList/QueueList.module.css rename to src/components/QueueList/QueueList.module.css index 965d417c0..85dac43f0 100644 --- a/src/renderer/components/QueueList/QueueList.module.css +++ b/src/components/QueueList/QueueList.module.css @@ -1,6 +1,7 @@ .queue__header { padding: 5px 10px; background-color: var(--queue-header-bg); + border-bottom: solid 1px var(--border-color); } .queue__header__infos { diff --git a/src/renderer/components/QueueList/QueueList.tsx b/src/components/QueueList/QueueList.tsx similarity index 98% rename from src/renderer/components/QueueList/QueueList.tsx rename to src/components/QueueList/QueueList.tsx index eb5af15e8..b6cb0cef9 100644 --- a/src/renderer/components/QueueList/QueueList.tsx +++ b/src/components/QueueList/QueueList.tsx @@ -2,16 +2,16 @@ import React, { useCallback, useState } from 'react'; import QueueListItem from '../QueueListItem/QueueListItem'; import { getStatus } from '../../lib/utils-library'; -import { TrackModel } from '../../../shared/types/museeks'; import Button from '../../elements/Button/Button'; import { usePlayerAPI } from '../../stores/usePlayerStore'; +import { Track } from '../../generated/typings'; import styles from './QueueList.module.css'; const INITIAL_QUEUE_SIZE = 20; type Props = { - queue: TrackModel[]; + queue: Track[]; queueCursor: number; }; diff --git a/src/renderer/components/QueueListItem/QueueListItem.module.css b/src/components/QueueListItem/QueueListItem.module.css similarity index 80% rename from src/renderer/components/QueueListItem/QueueListItem.module.css rename to src/components/QueueListItem/QueueListItem.module.css index 5747201e8..46ac41565 100644 --- a/src/renderer/components/QueueListItem/QueueListItem.module.css +++ b/src/components/QueueListItem/QueueListItem.module.css @@ -3,9 +3,8 @@ flex-wrap: nowrap; width: 100%; position: relative; - padding-bottom: 5px; - padding-top: 5px; cursor: pointer; + align-items: center; &:not(:first-child) { border-top: dashed 1px var(--border-color); @@ -41,6 +40,15 @@ } } +.queue__item__cover { + margin: 8px; + width: 32px; + aspect-ratio: 1; + border-radius: 3px; + overflow: hidden; + font-size: 16px; +} + .queue__item__remove { color: var(--text); border: none; @@ -68,12 +76,18 @@ .queue__item__info__title { font-weight: bold; + margin-bottom: 4px; } .queue__item__info__title, .queue__item__info__otherInfos { - padding: 0 10px; + padding-right: 10px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } + +.queue__item__info__otherInfos { + opacity: 0.7; + font-size: 0.875rem; +} diff --git a/src/renderer/components/QueueListItem/QueueListItem.tsx b/src/components/QueueListItem/QueueListItem.tsx similarity index 88% rename from src/renderer/components/QueueListItem/QueueListItem.tsx rename to src/components/QueueListItem/QueueListItem.tsx index 265837638..170ddb88e 100644 --- a/src/renderer/components/QueueListItem/QueueListItem.tsx +++ b/src/components/QueueListItem/QueueListItem.tsx @@ -1,8 +1,9 @@ import React, { useCallback } from 'react'; import cx from 'classnames'; -import { TrackModel } from '../../../shared/types/museeks'; +import { Track } from '../../generated/typings'; import { usePlayerAPI } from '../../stores/usePlayerStore'; +import Cover from '../Cover/Cover'; import styles from './QueueListItem.module.css'; @@ -11,7 +12,7 @@ type Props = { draggedOver: boolean; dragPosition?: null | 'above' | 'below'; index: number; - track: TrackModel; + track: Track; onDragStart: (e: React.DragEvent, index: number) => void; onDragOver: (e: React.DragEvent, index: number) => void; onDragEnd: React.DragEventHandler; @@ -60,10 +61,13 @@ export default function QueueListItem(props: Props) { onDragOver={onDragOver} onDragEnd={props.onDragEnd} > +
+ +
{track.title}
- {track.artist} - {track.album} + {track.artists[0]} - {track.album}
)} diff --git a/src/renderer/components/Setting/Setting.module.css b/src/components/Setting/Setting.module.css similarity index 89% rename from src/renderer/components/Setting/Setting.module.css rename to src/components/Setting/Setting.module.css index d1ae07bdc..7136662a7 100644 --- a/src/renderer/components/Setting/Setting.module.css +++ b/src/components/Setting/Setting.module.css @@ -23,6 +23,7 @@ .settingSelect, .settingInput { + appearance: none; display: block; background: var(--input-bg); color: var(--input-color); @@ -37,6 +38,11 @@ outline: none; border-color: var(--main-color); } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } } .settingError { diff --git a/src/renderer/components/Setting/Setting.tsx b/src/components/Setting/Setting.tsx similarity index 100% rename from src/renderer/components/Setting/Setting.tsx rename to src/components/Setting/Setting.tsx diff --git a/src/renderer/components/SettingCheckbox/SettingCheckbox.module.css b/src/components/SettingCheckbox/SettingCheckbox.module.css similarity index 76% rename from src/renderer/components/SettingCheckbox/SettingCheckbox.module.css rename to src/components/SettingCheckbox/SettingCheckbox.module.css index 79f50cbc2..f3716b90a 100644 --- a/src/renderer/components/SettingCheckbox/SettingCheckbox.module.css +++ b/src/components/SettingCheckbox/SettingCheckbox.module.css @@ -1,8 +1,9 @@ .checkbox { - input[type='checkbox'] { + input[type="checkbox"] { appearance: none; width: 16px; height: 16px; + border: solid 1px var(--border-color); border-radius: var(--border-radius); display: inline-block; background-color: var(--checkbox-bg); @@ -17,16 +18,17 @@ &:checked { background-color: var(--main-color); + border-color: var(--main-color-darker); &::after { - content: '\f00c'; + content: "\f00c"; /* stylelint-disable-next-line */ font-family: FontAwesome; font-size: 10px; color: white; position: absolute; - top: 3px; - left: 3px; + top: 2px; + left: 2px; } } } diff --git a/src/renderer/components/SettingCheckbox/SettingCheckbox.tsx b/src/components/SettingCheckbox/SettingCheckbox.tsx similarity index 100% rename from src/renderer/components/SettingCheckbox/SettingCheckbox.tsx rename to src/components/SettingCheckbox/SettingCheckbox.tsx diff --git a/src/renderer/components/Toasts/Toasts.module.css b/src/components/Toasts/Toasts.module.css similarity index 84% rename from src/renderer/components/Toasts/Toasts.module.css rename to src/components/Toasts/Toasts.module.css index ed0ceeb5b..f963c1c3a 100644 --- a/src/renderer/components/Toasts/Toasts.module.css +++ b/src/components/Toasts/Toasts.module.css @@ -1,7 +1,7 @@ .toasts { position: fixed; bottom: 40px; - right: 12px; + right: 10px; width: 350px; z-index: 1000; } diff --git a/src/renderer/components/Toasts/Toasts.tsx b/src/components/Toasts/Toasts.tsx similarity index 96% rename from src/renderer/components/Toasts/Toasts.tsx rename to src/components/Toasts/Toasts.tsx index 11a5ad22d..01c5779dd 100644 --- a/src/renderer/components/Toasts/Toasts.tsx +++ b/src/components/Toasts/Toasts.tsx @@ -8,7 +8,7 @@ export default function Toasts() { return (
{toasts.map((toast) => ( - + ))}
); diff --git a/src/renderer/components/TrackProgress/TrackProgress.module.css b/src/components/TrackProgress/TrackProgress.module.css similarity index 87% rename from src/renderer/components/TrackProgress/TrackProgress.module.css rename to src/components/TrackProgress/TrackProgress.module.css index 9e2ee3d90..a89a56140 100644 --- a/src/renderer/components/TrackProgress/TrackProgress.module.css +++ b/src/components/TrackProgress/TrackProgress.module.css @@ -1,7 +1,6 @@ .trackRoot { - --progress-height: 6px; + --progress-height: 7px; - -webkit-app-region: no-drag; position: relative; display: flex; align-items: center; @@ -11,7 +10,7 @@ /* the track progress is too close to the metadata, but using margin would * push the whole section up */ - transform: translateY(3px); + transform: translateY(4px); } .trackProgress { @@ -19,7 +18,8 @@ position: relative; width: 100%; height: 100%; - background-color: var(--progress-bg); + background-color: var(--header-bg); + border: solid 1px var(--border-color); } .trackRange { @@ -27,7 +27,6 @@ height: 100%; background-color: var(--main-color); box-shadow: inset 0 0 0 1px rgba(0 0 0 / 0.2); - min-width: 1px; } .progressTooltip { @@ -39,6 +38,7 @@ bottom: 10px; z-index: 1; transform: translateX(-11px); + pointer-events: none; &::before, &::after { diff --git a/src/renderer/components/TrackProgress/TrackProgress.tsx b/src/components/TrackProgress/TrackProgress.tsx similarity index 82% rename from src/renderer/components/TrackProgress/TrackProgress.tsx rename to src/components/TrackProgress/TrackProgress.tsx index 72f6354fa..49a4a29c3 100644 --- a/src/renderer/components/TrackProgress/TrackProgress.tsx +++ b/src/components/TrackProgress/TrackProgress.tsx @@ -2,14 +2,14 @@ import { useCallback, useState } from 'react'; import * as Slider from '@radix-ui/react-slider'; import { usePlayerAPI } from '../../stores/usePlayerStore'; -import { TrackModel } from '../../../shared/types/museeks'; +import { Track } from '../../generated/typings'; import usePlayingTrackCurrentTime from '../../hooks/usePlayingTrackCurrentTime'; import { parseDuration } from '../../lib/utils'; import styles from './TrackProgress.module.css'; type Props = { - trackPlaying: TrackModel; + trackPlaying: Track; }; export default function TrackProgress(props: Props) { @@ -60,19 +60,20 @@ export default function TrackProgress(props: Props) { value={[elapsed]} onValueChange={jumpAudioTo} className={styles.trackRoot} - onMouseMove={showTooltip} + onMouseMoveCapture={showTooltip} onMouseLeave={hideTooltip} > - {tooltipX !== null && ( -
- {parseDuration(tooltipTargetTime)} -
- )} +
+ {parseDuration(tooltipTargetTime)} +
diff --git a/src/renderer/components/TrackRow/TrackRow.module.css b/src/components/TrackRow/TrackRow.module.css similarity index 98% rename from src/renderer/components/TrackRow/TrackRow.module.css rename to src/components/TrackRow/TrackRow.module.css index e9ad3211d..ab889a76b 100644 --- a/src/renderer/components/TrackRow/TrackRow.module.css +++ b/src/components/TrackRow/TrackRow.module.css @@ -20,7 +20,7 @@ background-color: var(--tracks-bg-even); align-items: center; - &:nth-child(even) { + &.even { background-color: var(--tracks-bg-odd); } diff --git a/src/renderer/components/TrackRow/TrackRow.tsx b/src/components/TrackRow/TrackRow.tsx similarity index 96% rename from src/renderer/components/TrackRow/TrackRow.tsx rename to src/components/TrackRow/TrackRow.tsx index 9f459007b..cc5a01384 100644 --- a/src/renderer/components/TrackRow/TrackRow.tsx +++ b/src/components/TrackRow/TrackRow.tsx @@ -3,14 +3,14 @@ import cx from 'classnames'; import PlayingIndicator from '../PlayingIndicator/PlayingIndicator'; import { parseDuration } from '../../lib/utils'; -import { TrackModel } from '../../../shared/types/museeks'; import cellStyles from '../TracksListHeader/TracksListHeader.module.css'; +import { Track } from '../../generated/typings'; import styles from './TrackRow.module.css'; type Props = { selected: boolean; - track: TrackModel; + track: Track; index: number; isPlaying: boolean; onDoubleClick: (trackID: string) => void; @@ -99,6 +99,7 @@ export default function TrackRow(props: Props) { [styles.isReorderedOver]: reorderOver, [styles.isAbove]: reorderPosition === 'above', [styles.isBelow]: reorderPosition === 'below', + [styles.even]: index % 2 === 0, }); return ( @@ -135,13 +136,13 @@ export default function TrackRow(props: Props) { {parseDuration(track.duration)}
- {track.artist.sort().join(', ')} + {track.artists.join(', ')}
{track.album}
- {track.genre.join(', ')} + {track.genres.join(', ')}
); diff --git a/src/renderer/components/TracksList/TracksList.module.css b/src/components/TracksList/TracksList.module.css similarity index 73% rename from src/renderer/components/TracksList/TracksList.module.css rename to src/components/TracksList/TracksList.module.css index 9dc6a1a0c..a935903f1 100644 --- a/src/renderer/components/TracksList/TracksList.module.css +++ b/src/components/TracksList/TracksList.module.css @@ -8,21 +8,12 @@ } .tracksListScroller { - overflow: auto; + overflow-y: scroll; flex: 1 1 auto; + position: relative; } .tracksListRows { width: 100%; position: relative; } - -.tiles { - position: relative; -} - -.tile { - position: absolute; - width: 100%; - z-index: 10; -} diff --git a/src/renderer/components/TracksList/TracksList.tsx b/src/components/TracksList/TracksList.tsx similarity index 73% rename from src/renderer/components/TracksList/TracksList.tsx rename to src/components/TracksList/TracksList.tsx index 977ff9b66..5fae2890d 100644 --- a/src/renderer/components/TracksList/TracksList.tsx +++ b/src/components/TracksList/TracksList.tsx @@ -1,30 +1,31 @@ -import type { MenuItemConstructorOptions } from 'electron'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import Keybinding from 'react-keybinding-component'; -import { useNavigate } from 'react-router-dom'; import { useVirtualizer } from '@tanstack/react-virtual'; +import { + Menu, + MenuItem, + PredefinedMenuItem, + Submenu, +} from '@tauri-apps/api/menu'; +import { invoke } from '@tauri-apps/api/core'; +import { useNavigate } from 'react-router-dom'; import TrackRow from '../TrackRow/TrackRow'; import TracksListHeader from '../TracksListHeader/TracksListHeader'; -import PlaylistsAPI from '../../stores/PlaylistsAPI'; import { isLeftClick, isRightClick, isCtrlKey, isAltKey, } from '../../lib/utils-events'; -import { - Config, - PlaylistModel, - TrackModel, -} from '../../../shared/types/museeks'; import { usePlayerAPI } from '../../stores/usePlayerStore'; import useLibraryStore, { useLibraryAPI } from '../../stores/useLibraryStore'; +import { Config, Playlist, Track } from '../../generated/typings'; +import { logAndNotifyError } from '../../lib/utils'; +import PlaylistsAPI from '../../stores/PlaylistsAPI'; import styles from './TracksList.module.css'; -const { menu } = window.ElectronAPI; - const ROW_HEIGHT = 30; const ROW_HEIGHT_COMPACT = 24; @@ -34,10 +35,10 @@ const ROW_HEIGHT_COMPACT = 24; type Props = { type: string; - tracks: TrackModel[]; - tracksDensity: Config['tracksDensity']; + tracks: Track[]; + tracksDensity: Config['track_view_density']; trackPlayingID: string | null; - playlists: PlaylistModel[]; + playlists: Playlist[]; currentPlaylist?: string; reorderable?: boolean; onReorder?: ( @@ -68,7 +69,8 @@ export default function TracksList(props: Props) { const scrollableRef = useRef(null); const virtualizer = useVirtualizer({ count: tracks.length, - overscan: 10, + overscan: 20, + scrollPaddingEnd: 22, // Height of the track list header getScrollElement: () => scrollableRef.current, estimateSize: () => { switch (tracksDensity) { @@ -118,18 +120,18 @@ export default function TracksList(props: Props) { * Keyboard navigations events/helpers */ const onEnter = useCallback( - async (index: number, tracks: TrackModel[]) => { + async (index: number, tracks: Track[]) => { if (index !== -1) playerAPI.start(tracks, tracks[index]._id); }, [playerAPI], ); - const onControlAll = useCallback((tracks: TrackModel[]) => { + const onControlAll = useCallback((tracks: Track[]) => { setSelected(tracks.map((track) => track._id)); }, []); const onUp = useCallback( - (index: number, tracks: TrackModel[], shiftKeyPressed: boolean) => { + (index: number, tracks: Track[], shiftKeyPressed: boolean) => { const addedIndex = Math.max(0, index - 1); // Add to the selection if shift key is pressed @@ -145,7 +147,7 @@ export default function TracksList(props: Props) { ); const onDown = useCallback( - (index: number, tracks: TrackModel[], shiftKeyPressed: boolean) => { + (index: number, tracks: Track[], shiftKeyPressed: boolean) => { const addedIndex = Math.min(tracks.length - 1, index + 1); // Add to the selection if shift key is pressed @@ -342,148 +344,157 @@ export default function TracksList(props: Props) { * Context menus */ const showContextMenu = useCallback( - (_e: React.MouseEvent, index: number) => { + async (e: React.MouseEvent, index: number) => { + e.preventDefault(); + const selectedCount = selected.length; const track = tracks[index]; let shownPlaylists = playlists; - // Hide current playlist if needed + // Hide current playlist if one the given playlist view if (type === 'playlist') { shownPlaylists = playlists.filter( (elem) => elem._id !== currentPlaylist, ); } - const playlistTemplate: MenuItemConstructorOptions[] = []; - let addToQueueTemplate: MenuItemConstructorOptions[] = []; - - if (shownPlaylists) { - playlistTemplate.push( - { - label: 'Create new playlist...', - click: async () => { - await PlaylistsAPI.create('New playlist', selected); - }, - }, - { - type: 'separator', + // Playlist sub-menu + const playlistSubMenu = await Promise.all([ + MenuItem.new({ + text: 'Create new playlist...', + async action() { + await PlaylistsAPI.create('New playlist', selected); }, + }), + PredefinedMenuItem.new({ + item: 'Separator', + }), + ]); + + if (shownPlaylists.length === 0) { + playlistSubMenu.push( + await MenuItem.new({ text: 'No playlists', enabled: false }), + ); + } else { + playlistSubMenu.push( + ...(await Promise.all( + shownPlaylists.map((playlist) => + MenuItem.new({ + text: playlist.name, + async action() { + await PlaylistsAPI.addTracks(playlist._id, selected); + }, + }), + ), + )), ); - - if (shownPlaylists.length === 0) { - playlistTemplate.push({ - label: 'No playlists', - enabled: false, - }); - } else { - shownPlaylists.forEach((playlist) => { - playlistTemplate.push({ - label: playlist.name, - click: async () => { - await PlaylistsAPI.addTracks(playlist._id, selected); - }, - }); - }); - } } - addToQueueTemplate = [ - { - label: 'Add to queue', - click: async () => { - playerAPI.addInQueue(selected); - }, - }, - { - label: 'Play next', - click: async () => { - playerAPI.addNextInQueue(selected); - }, - }, - { - type: 'separator', - }, - ]; - - const template: MenuItemConstructorOptions[] = [ - { - label: + const menuItems = await Promise.all([ + MenuItem.new({ + text: selectedCount > 1 ? `${selectedCount} tracks selected` : `${selectedCount} track selected`, enabled: false, - }, - { - type: 'separator', - }, - ...addToQueueTemplate, - { - label: 'Add to playlist', - submenu: playlistTemplate, - }, - { - type: 'separator', - }, - ]; - - for (const artist of track.artist) { - template.push({ - label: `Search for "${artist}" `, - click: () => { - libraryAPI.search(track.artist[0]); + }), + PredefinedMenuItem.new({ + text: '?', + item: 'Separator', + }), + MenuItem.new({ + text: 'Add to queue', + action() { + playerAPI.addInQueue(selected); }, - }); - } + }), + MenuItem.new({ + text: 'Play next', + action() { + playerAPI.addNextInQueue(selected); + }, + }), + PredefinedMenuItem.new({ + item: 'Separator', + }), + Submenu.new({ + text: 'Add to playlist', + items: playlistSubMenu, + }), + PredefinedMenuItem.new({ + text: '?', + item: 'Separator', + }), + ]); + + menuItems.push( + ...(await Promise.all( + track.artists.map((artist) => + MenuItem.new({ + text: `Search for "${artist}" `, + action: () => { + libraryAPI.search(artist); + }, + }), + ), + )), + ); - template.push({ - label: `Search for "${track.album}"`, - click: () => { - libraryAPI.search(track.album); - }, - }); + menuItems.push( + await MenuItem.new({ + text: `Search for "${track.album}"`, + action() { + libraryAPI.search(track.album); + }, + }), + ); if (type === 'playlist' && currentPlaylist) { - template.push( - { - type: 'separator', - }, - { - label: 'Remove from playlist', - click: async () => { - await PlaylistsAPI.removeTracks(currentPlaylist, selected); - }, - }, + menuItems.push( + ...(await Promise.all([ + PredefinedMenuItem.new({ item: 'Separator' }), + MenuItem.new({ + text: 'Remove from playlist', + async action() { + await PlaylistsAPI.removeTracks(currentPlaylist, selected); + }, + }), + ])), ); } - template.push( - { - type: 'separator', - }, - { - label: 'Edit track', - click: () => { - navigate(`/details/${track._id}`); - }, - }, - { - type: 'separator', - }, - { - label: 'Show in file manager', - click: () => { - window.MuseeksAPI.library.showTrackInFolder(track); - }, - }, - { - label: 'Remove from library', - click: () => { - libraryAPI.remove(selected); - }, - }, + menuItems.push( + ...(await Promise.all([ + PredefinedMenuItem.new({ item: 'Separator' }), + MenuItem.new({ + text: 'Edit track', + action: () => { + navigate(`/details/${track._id}`); + }, + }), + PredefinedMenuItem.new({ item: 'Separator' }), + MenuItem.new({ + text: 'Show in file manager', + action: async () => { + await invoke('plugin:shell-extension|show_item_in_folder', { + path: track.path, + }); + }, + }), + MenuItem.new({ + text: 'Remove from library', + action: () => { + libraryAPI.remove(selected); + }, + }), + ])), ); - menu.showContextMenu(template); + const menu = await Menu.new({ + items: menuItems, + }); + + await menu.popup().catch(logAndNotifyError); }, [ currentPlaylist, @@ -500,9 +511,10 @@ export default function TracksList(props: Props) { return (
- {/* Scrollable element */}
+ + {/* The large inner element to hold all of the items */}
{ - if (sort && sort.by === sortType) { - if (sort.order === SortOrder.ASC) { +const getIcon = ( + sortBy: SortBy, + sortOrder: SortOrder, + sortByTarget: SortBy, +) => { + if (sortBy === sortByTarget) { + if (sortOrder === 'Asc') { return 'angle-up'; } @@ -23,7 +27,8 @@ type Props = { export default function TracksListHeader(props: Props) { const { enableSort } = props; - const sort = useLibraryStore((state) => state.sort); + const sortBy = useLibraryStore((state) => state.sortBy); + const sortOrder = useLibraryStore((state) => state.sortOrder); return (
@@ -34,32 +39,32 @@ export default function TracksListHeader(props: Props) {
); diff --git a/src/renderer/components/TracksListHeaderCell/TracksListHeaderCell.module.css b/src/components/TracksListHeaderCell/TracksListHeaderCell.module.css similarity index 100% rename from src/renderer/components/TracksListHeaderCell/TracksListHeaderCell.module.css rename to src/components/TracksListHeaderCell/TracksListHeaderCell.module.css diff --git a/src/renderer/components/TracksListHeaderCell/TracksListHeaderCell.tsx b/src/components/TracksListHeaderCell/TracksListHeaderCell.tsx similarity index 95% rename from src/renderer/components/TracksListHeaderCell/TracksListHeaderCell.tsx rename to src/components/TracksListHeaderCell/TracksListHeaderCell.tsx index 3b15f3ed7..ddb79a956 100644 --- a/src/renderer/components/TracksListHeaderCell/TracksListHeaderCell.tsx +++ b/src/components/TracksListHeaderCell/TracksListHeaderCell.tsx @@ -2,7 +2,7 @@ import React, { useCallback } from 'react'; import cx from 'classnames'; import Icon from 'react-fontawesome'; -import { SortBy } from '../../../shared/types/museeks'; +import { SortBy } from '../../generated/typings'; import { useLibraryAPI } from '../../stores/useLibraryStore'; import styles from './TracksListHeaderCell.module.css'; diff --git a/src/renderer/components/VolumeControl/VolumeControl.module.css b/src/components/VolumeControl/VolumeControl.module.css similarity index 97% rename from src/renderer/components/VolumeControl/VolumeControl.module.css rename to src/components/VolumeControl/VolumeControl.module.css index 8725192b1..bb3ea9b5f 100644 --- a/src/renderer/components/VolumeControl/VolumeControl.module.css +++ b/src/components/VolumeControl/VolumeControl.module.css @@ -4,7 +4,6 @@ } .volumeControl { - -webkit-app-region: no-drag; background-color: var(--header-bg); position: absolute; z-index: 10; diff --git a/src/renderer/components/VolumeControl/VolumeControl.tsx b/src/components/VolumeControl/VolumeControl.tsx similarity index 100% rename from src/renderer/components/VolumeControl/VolumeControl.tsx rename to src/components/VolumeControl/VolumeControl.tsx diff --git a/src/renderer/elements/Button/Button.module.css b/src/elements/Button/Button.module.css similarity index 90% rename from src/renderer/elements/Button/Button.module.css rename to src/elements/Button/Button.module.css index 9d98ca285..b93fe9175 100644 --- a/src/renderer/elements/Button/Button.module.css +++ b/src/elements/Button/Button.module.css @@ -7,6 +7,10 @@ cursor: pointer; &:active { + opacity: 0.7; + } + + &[disabled] { opacity: 0.5; } } diff --git a/src/renderer/elements/Button/Button.tsx b/src/elements/Button/Button.tsx similarity index 100% rename from src/renderer/elements/Button/Button.tsx rename to src/elements/Button/Button.tsx diff --git a/src/renderer/elements/ExternalLink/ExternalLink.module.css b/src/elements/ExternalLink/ExternalLink.module.css similarity index 100% rename from src/renderer/elements/ExternalLink/ExternalLink.module.css rename to src/elements/ExternalLink/ExternalLink.module.css diff --git a/src/renderer/elements/ExternalLink/ExternalLink.tsx b/src/elements/ExternalLink/ExternalLink.tsx similarity index 85% rename from src/renderer/elements/ExternalLink/ExternalLink.tsx rename to src/elements/ExternalLink/ExternalLink.tsx index 635819c5a..d97cdac59 100644 --- a/src/renderer/elements/ExternalLink/ExternalLink.tsx +++ b/src/elements/ExternalLink/ExternalLink.tsx @@ -1,9 +1,8 @@ import React, { useCallback } from 'react'; +import { open } from '@tauri-apps/plugin-shell'; import styles from './ExternalLink.module.css'; -const { shell } = window.MuseeksAPI; - type Props = { children: string; href: string; @@ -13,7 +12,7 @@ export default function ExternalLink(props: Props) { const openLink = useCallback( (e: React.SyntheticEvent) => { e.preventDefault(); - shell.openExternal(props.href); + open(props.href); }, [props.href], ); diff --git a/src/renderer/elements/Heart/Heart.module.css b/src/elements/Heart/Heart.module.css similarity index 100% rename from src/renderer/elements/Heart/Heart.module.css rename to src/elements/Heart/Heart.module.css diff --git a/src/renderer/elements/Heart/Heart.tsx b/src/elements/Heart/Heart.tsx similarity index 100% rename from src/renderer/elements/Heart/Heart.tsx rename to src/elements/Heart/Heart.tsx diff --git a/src/renderer/elements/Nav/Nav.module.css b/src/elements/Nav/Nav.module.css similarity index 100% rename from src/renderer/elements/Nav/Nav.module.css rename to src/elements/Nav/Nav.module.css diff --git a/src/renderer/elements/Nav/Nav.tsx b/src/elements/Nav/Nav.tsx similarity index 100% rename from src/renderer/elements/Nav/Nav.tsx rename to src/elements/Nav/Nav.tsx diff --git a/src/renderer/elements/Toast/Toast.module.css b/src/elements/Toast/Toast.module.css similarity index 93% rename from src/renderer/elements/Toast/Toast.module.css rename to src/elements/Toast/Toast.module.css index 896491f39..1707a6bdb 100644 --- a/src/renderer/elements/Toast/Toast.module.css +++ b/src/elements/Toast/Toast.module.css @@ -5,6 +5,7 @@ border-top-color: var(--border-color); border-right-color: var(--border-color); border-bottom-color: var(--border-color); + border-radius: var(--border-radius); color: var(--text); box-shadow: 0 5px 3px -5px rgba(0 0 0 0.5); padding: 15px; diff --git a/src/renderer/elements/Toast/Toast.tsx b/src/elements/Toast/Toast.tsx similarity index 100% rename from src/renderer/elements/Toast/Toast.tsx rename to src/elements/Toast/Toast.tsx diff --git a/src/renderer/elements/ViewMessage/ViewMessage.module.css b/src/elements/ViewMessage/ViewMessage.module.css similarity index 100% rename from src/renderer/elements/ViewMessage/ViewMessage.module.css rename to src/elements/ViewMessage/ViewMessage.module.css diff --git a/src/renderer/elements/ViewMessage/ViewMessage.tsx b/src/elements/ViewMessage/ViewMessage.tsx similarity index 100% rename from src/renderer/elements/ViewMessage/ViewMessage.tsx rename to src/elements/ViewMessage/ViewMessage.tsx diff --git a/src/generated/typings/index.ts b/src/generated/typings/index.ts new file mode 100644 index 000000000..b77364840 --- /dev/null +++ b/src/generated/typings/index.ts @@ -0,0 +1,13 @@ +/** + * Re-export of types generates by ts-rs + */ +export type { Config } from './Config'; +export type { DefaultView } from './DefaultView'; +export type { IPCEvent } from './IPCEvent'; +export type { NumberOf } from './NumberOf'; +export type { Playlist } from './Playlist'; +export type { Progress } from './Progress'; +export type { Repeat } from './Repeat'; +export type { SortBy } from './SortBy'; +export type { SortOrder } from './SortOrder'; +export type { Track } from './Track'; diff --git a/src/hooks/useCover.ts b/src/hooks/useCover.ts new file mode 100644 index 000000000..df2d6e48f --- /dev/null +++ b/src/hooks/useCover.ts @@ -0,0 +1,22 @@ +import { useEffect, useState } from 'react'; + +import { Track } from '../generated/typings'; +import library from '../lib/library'; + +/** + * Given a track, get its associated cover as an Image src + */ +export default function useCover(track: Track): string | null { + const [coverPath, setCoverPath] = useState(null); + + useEffect(() => { + const refreshCover = async () => { + const cover = await library.getCover(track.path); + setCoverPath(cover); + }; + + refreshCover(); + }, [track.path]); + + return coverPath; +} diff --git a/src/renderer/hooks/useDebounce.ts b/src/hooks/useDebounce.ts similarity index 100% rename from src/renderer/hooks/useDebounce.ts rename to src/hooks/useDebounce.ts diff --git a/src/hooks/useFilteredTracks.ts b/src/hooks/useFilteredTracks.ts new file mode 100644 index 000000000..4150e7cea --- /dev/null +++ b/src/hooks/useFilteredTracks.ts @@ -0,0 +1,23 @@ +import { useMemo } from 'react'; + +import { filterTracks, sortTracks } from '../lib/utils-library'; +import SORT_ORDERS from '../lib/sort-orders'; +import useLibraryStore from '../stores/useLibraryStore'; +import { Track } from '../generated/typings'; +import { stripAccents } from '../lib/utils-id3'; + +export default function useFilteredTracks(tracks: Track[]): Track[] { + const search = useLibraryStore((state) => stripAccents(state.search)); + const sortBy = useLibraryStore((state) => state.sortBy); + const sortOrder = useLibraryStore((state) => state.sortOrder); + + // Filter and sort TracksList + // sorting being a costly operation, do it after filtering + const filteredTracks = useMemo( + () => + sortTracks(filterTracks(tracks, search), SORT_ORDERS[sortBy][sortOrder]), + [tracks, search, sortBy, sortOrder], + ); + + return filteredTracks; +} diff --git a/src/renderer/hooks/usePlayingTrack.ts b/src/hooks/usePlayingTrack.ts similarity index 66% rename from src/renderer/hooks/usePlayingTrack.ts rename to src/hooks/usePlayingTrack.ts index 6153b3c01..7ce434f40 100644 --- a/src/renderer/hooks/usePlayingTrack.ts +++ b/src/hooks/usePlayingTrack.ts @@ -1,7 +1,7 @@ -import { TrackModel } from '../../shared/types/museeks'; +import { Track } from '../generated/typings'; import usePlayerStore from '../stores/usePlayerStore'; -export default function usePlayingTrack(): TrackModel | null { +export default function usePlayingTrack(): Track | null { return usePlayerStore((state) => { if (state.queue.length > 0 && state.queueCursor !== null) { return state.queue[state.queueCursor]; diff --git a/src/renderer/hooks/usePlayingTrackCurrentTime.ts b/src/hooks/usePlayingTrackCurrentTime.ts similarity index 100% rename from src/renderer/hooks/usePlayingTrackCurrentTime.ts rename to src/hooks/usePlayingTrackCurrentTime.ts diff --git a/src/renderer/hooks/usePlayingTrackID.ts b/src/hooks/usePlayingTrackID.ts similarity index 100% rename from src/renderer/hooks/usePlayingTrackID.ts rename to src/hooks/usePlayingTrackID.ts diff --git a/src/shared/lib/__tests__/ipc-channels.test.ts b/src/lib/__tests__/ipc-channels.test.ts similarity index 100% rename from src/shared/lib/__tests__/ipc-channels.test.ts rename to src/lib/__tests__/ipc-channels.test.ts diff --git a/src/shared/lib/__tests__/themes.test.ts b/src/lib/__tests__/themes.test.ts similarity index 90% rename from src/shared/lib/__tests__/themes.test.ts rename to src/lib/__tests__/themes.test.ts index da0d293b8..653b425e0 100644 --- a/src/shared/lib/__tests__/themes.test.ts +++ b/src/lib/__tests__/themes.test.ts @@ -1,6 +1,8 @@ import { describe, test, expect } from 'vitest'; -import { themes } from '../themes'; +import { themes as themesMap } from '../themes'; + +const themes = Object.values(themesMap); describe('themes', () => { test('themes should have a unique identifier', () => { diff --git a/src/lib/config.ts b/src/lib/config.ts new file mode 100644 index 000000000..c503358d3 --- /dev/null +++ b/src/lib/config.ts @@ -0,0 +1,49 @@ +import { invoke } from '@tauri-apps/api/core'; + +import type { Config } from '../generated/typings'; + +import { logAndNotifyError } from './utils'; + +/** + * Config Bridge for the UI to communicate with the backend + */ +class ConfigManager { + initialConfig: Config | null = null; + + /** + * Get the initial value of the config at the time of instantiation. + * Should only be used when starting the app. + */ + getInitial(key: T): Config[T] { + if (window.__MUSEEKS_INITIAL_CONFIG == undefined) { + throw new Error('Config has not been injected from the back-end'); + } + + return window.__MUSEEKS_INITIAL_CONFIG[key]; + } + + async getAll(): Promise { + // TODO: check data shape? + return invoke('plugin:config|get_config'); + } + + async get(key: T): Promise { + const config = await this.getAll(); + return config[key]; + } + + async set(key: T, value: Config[T]): Promise { + const config = await this.getAll(); + config[key] = value; + + try { + invoke('plugin:config|set_config', { config }); + } catch (err) { + logAndNotifyError(err); + } + + return; + } +} + +export default new ConfigManager(); diff --git a/src/lib/icons.ts b/src/lib/icons.ts new file mode 100644 index 000000000..392129a83 --- /dev/null +++ b/src/lib/icons.ts @@ -0,0 +1,23 @@ +/* eslint-disable import/no-unresolved */ + +import NEXT from '../assets/icons/player-next.svg?raw'; +import PAUSE from '../assets/icons/player-pause.svg?raw'; +import PLAY from '../assets/icons/player-play.svg?raw'; +import PREVIOUS from '../assets/icons/player-previous.svg?raw'; +import QUEUE from '../assets/icons/player-queue.svg?raw'; +import REPEAT_ONE from '../assets/icons/player-repeat-one.svg?raw'; +import REPEAT from '../assets/icons/player-repeat.svg?raw'; +import SHUFFLE from '../assets/icons/player-shuffle.svg?raw'; + +const icons = { + NEXT, + PAUSE, + PLAY, + PREVIOUS, + QUEUE, + REPEAT_ONE, + REPEAT, + SHUFFLE, +}; + +export default icons; diff --git a/src/shared/lib/ipc-channels.ts b/src/lib/ipc-channels.ts similarity index 100% rename from src/shared/lib/ipc-channels.ts rename to src/lib/ipc-channels.ts diff --git a/src/lib/library.ts b/src/lib/library.ts new file mode 100644 index 000000000..7995e9d06 --- /dev/null +++ b/src/lib/library.ts @@ -0,0 +1,106 @@ +import { convertFileSrc, invoke } from '@tauri-apps/api/core'; + +import type { Playlist, Track } from '../generated/typings'; + +/** + * Library Bridge for the UI to communicate with the backend + */ +const library = { + // --------------------------------------------------------------------------- + // Playlists read/write actions + // --------------------------------------------------------------------------- + + async getAllTracks(): Promise> { + return invoke('plugin:database|get_all_tracks'); + }, + + async getTracks(trackIDs: Array): Promise> { + return invoke('plugin:database|get_tracks', { + ids: trackIDs, + }); + }, + + async updateTrack(track: Track) { + // TODO: + throw new Error('Not implemented'); + }, + + async removeTracks(trackIDs: Array): Promise> { + return invoke('plugin:database|remove_tracks', { + ids: trackIDs, + }); + }, + + async importTracks(importPaths: Array): Promise { + return invoke('plugin:database|import_tracks_to_library', { + importPaths, + }); + }, + + // --------------------------------------------------------------------------- + // Playlists read/write actions + // --------------------------------------------------------------------------- + + async getAllPlaylists(): Promise> { + return invoke('plugin:database|get_all_playlists'); + }, + + async getPlaylist(id: string): Promise { + return invoke('plugin:database|get_playlist', { + id, + }); + }, + + async createPlaylist(name: string, tracks: Array): Promise { + return invoke('plugin:database|create_playlist', { + name, + tracks, + }); + }, + + async renamePlaylist(id: string, name: string): Promise { + return invoke('plugin:database|rename_playlist', { + id, + name, + }); + }, + + async setPlaylistTracks( + id: string, + tracks: Array, + ): Promise { + return invoke('plugin:database|set_playlist_tracks', { + id, + tracks, + }); + }, + + async deletePlaylist(id: string): Promise { + return invoke('plugin:database|delete_playlist', { + id, + }); + }, + + // --------------------------------------------------------------------------- + // Misc. + // --------------------------------------------------------------------------- + async reset(): Promise { + return invoke('plugin:database|reset'); + }, + + async getCover(path: string): Promise { + const cover = await invoke('plugin:cover|get_cover', { + path, + }); + + if (cover === null) { + return null; + } + + return cover.startsWith('data:') ? cover : convertFileSrc(cover); + }, + + // removeTracks +}; + +export default library; diff --git a/src/shared/lib/logger.ts b/src/lib/logger.ts similarity index 100% rename from src/shared/lib/logger.ts rename to src/lib/logger.ts diff --git a/src/renderer/lib/player.ts b/src/lib/player.ts similarity index 65% rename from src/renderer/lib/player.ts rename to src/lib/player.ts index 3114973ed..971afdf56 100644 --- a/src/renderer/lib/player.ts +++ b/src/lib/player.ts @@ -1,4 +1,9 @@ -import { TrackModel } from '../../shared/types/museeks'; +import { convertFileSrc } from '@tauri-apps/api/core'; + +import { Track } from '../generated/typings'; + +import config from './config'; +import { logAndNotifyError } from './utils'; interface PlayerOptions { playbackRate?: number; @@ -17,9 +22,7 @@ interface PlayerOptions { */ class Player { private audio: HTMLAudioElement; - private durationThresholdReached: boolean; - private track: TrackModel | null; - public threshold: number; + private track: Track | null; constructor(options?: PlayerOptions) { const mergedOptions = { @@ -36,13 +39,11 @@ class Player { this.audio.defaultPlaybackRate = mergedOptions.playbackRate; // eslint-disable-next-line // @ts-ignore - this.audio.setSinkId(mergedOptions.audioOutputDevice); + // TODO: + // this.audio.setSinkId(mergedOptions.audioOutputDevice); this.audio.playbackRate = mergedOptions.playbackRate; this.audio.volume = mergedOptions.volume; this.audio.muted = mergedOptions.muted; - - this.threshold = 0.75; - this.durationThresholdReached = false; } async play() { @@ -90,21 +91,22 @@ class Player { } async setOutputDevice(deviceID: string) { - // eslint-disable-next-line - // @ts-ignore - await this.audio.setSinkId(deviceID); + try { + // eslint-disable-next-line + // @ts-ignore + await this.audio.setSinkId(deviceID); + } catch (err) { + logAndNotifyError(err); + } } getTrack() { return this.track; } - setTrack(track: TrackModel) { + setTrack(track: Track) { this.track = track; - this.audio.src = window.MuseeksAPI.library.parseUri(track.path); - - // When we change song, need to update the thresholdReached indicator. - this.durationThresholdReached = false; + this.audio.src = convertFileSrc(track.path); } setCurrentTime(currentTime: number) { @@ -118,28 +120,16 @@ class Player { isPaused() { return this.audio.paused; } - - isThresholdReached() { - if ( - !this.durationThresholdReached && - this.audio.currentTime >= this.audio.duration * this.threshold - ) { - this.durationThresholdReached = true; - } - - return this.durationThresholdReached; - } } /** * Export a singleton by default, for the sake of simplicity (and we only need * one anyway) */ -const { config } = window.MuseeksAPI; export default new Player({ - volume: config.__initialConfig['audioVolume'], - playbackRate: config.__initialConfig['audioPlaybackRate'], - audioOutputDevice: config.__initialConfig['audioOutputDevice'], - muted: config.__initialConfig['audioMuted'], + volume: config.getInitial('audio_volume'), + playbackRate: config.getInitial('audio_playback_rate'), + audioOutputDevice: config.getInitial('audio_output_device'), + muted: config.getInitial('audio_muted'), }); diff --git a/src/lib/query.ts b/src/lib/query.ts new file mode 100644 index 000000000..3382ebccb --- /dev/null +++ b/src/lib/query.ts @@ -0,0 +1,17 @@ +import { QueryClient } from '@tanstack/react-query'; + +import router from '../views/router'; + +export const queryClient = new QueryClient(); + +export function invalidate() { + // Need to call mutate with undefined to make sure stale-while-revalidate is + // reset (otherwise, we'd see a "no tracks in the library" instead of "loading") + queryClient.invalidateQueries({ + exact: true, + queryKey: ['tracks'], + }); + + // Reload the route data + router.revalidate(); +} diff --git a/src/lib/sort-orders.ts b/src/lib/sort-orders.ts new file mode 100644 index 000000000..43c4013ab --- /dev/null +++ b/src/lib/sort-orders.ts @@ -0,0 +1,68 @@ +import { SortOrder, SortBy, Track } from '../generated/typings'; +import { Path } from '../types/museeks'; + +import { stripAccents } from './utils-id3'; + +// For perforances reasons, otherwise _.orderBy will perform weird check +// the is far more resource/time impactful +const getArtist = (t: Track): string => + stripAccents(t.artists.toString().toLowerCase()); +const getGenre = (t: Track): string => + stripAccents(t.genres.toString().toLowerCase()); +const getAlbum = (t: Track): string => stripAccents(t.album.toLowerCase()); +const getTitle = (t: Track): string => stripAccents(t.title.toLowerCase()); + +type TrackKeys = Path; +type IterateeFunction = (track: Track) => string; +export type SortTuple = [ + Array, + Array<'asc' | 'desc'>, +]; + +// Declarations +const sortOrders: Record> = { + Artist: { + Asc: [ + // Default + [getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['asc'], + ], + Dsc: [[getArtist, 'year', getAlbum, 'disk.no', 'track.no'], ['desc']], + }, + Title: { + Asc: [ + [getTitle, getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['asc'], + ], + Dsc: [ + [getTitle, getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['desc'], + ], + }, + Duration: { + Asc: [ + ['duration', getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['asc'], + ], + Dsc: [ + ['duration', getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['desc'], + ], + }, + Album: { + Asc: [[getAlbum, getArtist, 'year', 'disk.no', 'track.no'], ['asc']], + Dsc: [[getAlbum, getArtist, 'year', 'disk.no', 'track.no'], ['desc']], + }, + Genre: { + Asc: [ + [getGenre, getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['asc'], + ], + Dsc: [ + [getGenre, getArtist, 'year', getAlbum, 'disk.no', 'track.no'], + ['desc'], + ], + }, +}; + +export default sortOrders; diff --git a/src/shared/lib/themes.ts b/src/lib/themes.ts similarity index 53% rename from src/shared/lib/themes.ts rename to src/lib/themes.ts index 239bec13a..c2b67e862 100644 --- a/src/shared/lib/themes.ts +++ b/src/lib/themes.ts @@ -1,6 +1,11 @@ -import { Theme } from '../types/museeks'; +import { Theme as ThemeID } from '@tauri-apps/api/window'; + // IMPROVE ME: scan the directory for all json files instead +import { Theme } from '../types/museeks'; import lightTheme from '../themes/light.json'; import darkTheme from '../themes/dark.json'; -export const themes = [lightTheme as Theme, darkTheme as Theme]; +export const themes: Record = { + light: lightTheme as Theme, + dark: darkTheme as Theme, +}; diff --git a/src/renderer/lib/utils-events.ts b/src/lib/utils-events.ts similarity index 77% rename from src/renderer/lib/utils-events.ts rename to src/lib/utils-events.ts index 6bb4a93d6..4619479a4 100644 --- a/src/renderer/lib/utils-events.ts +++ b/src/lib/utils-events.ts @@ -15,6 +15,13 @@ export function preventNativeDefault(e: Event) { e.preventDefault(); } +/** + * Check if we are running in a dev environment + */ +export function isDev() { + return window.location.host.startsWith('localhost:'); +} + /** * Returns true if * - the control key was pressed on a non-mac platform @@ -23,7 +30,7 @@ export function preventNativeDefault(e: Event) { export function isCtrlKey( e: React.KeyboardEvent | React.MouseEvent | KeyboardEvent, ): boolean { - const isMacOS = window.MuseeksAPI.platform === 'darwin'; + const isMacOS = window.__MUSEEKS_PLATFORM === 'macos'; return (isMacOS && e.metaKey) || (!isMacOS && e.ctrlKey); } @@ -31,7 +38,7 @@ export function isCtrlKey( export function isAltKey( e: React.KeyboardEvent | React.MouseEvent | KeyboardEvent, ): boolean { - const isMacOS = window.MuseeksAPI.platform === 'darwin'; + const isMacOS = window.__MUSEEKS_PLATFORM === 'macos'; return (isMacOS && e.ctrlKey) || (!isMacOS && e.metaKey); } diff --git a/src/lib/utils-id3.ts b/src/lib/utils-id3.ts new file mode 100644 index 000000000..9d6130835 --- /dev/null +++ b/src/lib/utils-id3.ts @@ -0,0 +1,31 @@ +import { Track } from '../generated/typings'; +import { TrackSearchableFields } from '../types/museeks'; + +const ACCENTS = + 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž'; +const ACCENT_REPLACEMENTS = + 'AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz'; + +/** + * Strip accent from String. From https://jsperf.com/strip-accents + */ +export const stripAccents = (str: string): string => { + const split = ACCENTS.split('').join('|'); + const reg = new RegExp(`(${split})`, 'g'); + + function replacement(a: string) { + return ACCENT_REPLACEMENTS[ACCENTS.indexOf(a)] || ''; + } + + return str.replace(reg, replacement).toLowerCase(); +}; + +/** + * Take a track a returns its lowered metadata (used for search) + */ +export const getLoweredMeta = (track: Track): TrackSearchableFields => ({ + artists: track.artists.map((v) => stripAccents(v.toLowerCase())), + album: stripAccents(track.album.toLowerCase()), + title: stripAccents(track.title.toLowerCase()), + genres: track.genres.map((v) => stripAccents(v.toLowerCase())), +}); diff --git a/src/lib/utils-library.ts b/src/lib/utils-library.ts new file mode 100644 index 000000000..b8df81c01 --- /dev/null +++ b/src/lib/utils-library.ts @@ -0,0 +1,42 @@ +import orderBy from 'lodash/orderBy'; + +import { Track } from '../generated/typings'; + +import { SortTuple } from './sort-orders'; +import * as utils from './utils'; +import { stripAccents } from './utils-id3'; + +/** + * Filter an array of tracks by string + */ +export const filterTracks = (tracks: Track[], search: string): Track[] => { + // Avoid performing useless searches + if (search.length === 0) return tracks; + + // Unoptimized, bad + return tracks.filter( + (track) => + stripAccents(track.artists.toString().toLowerCase()).includes(search) || + stripAccents(track.album.toLowerCase()).includes(search) || + stripAccents(track.genres.toString().toLowerCase()).includes(search) || + stripAccents(track.title.toLowerCase()).includes(search), + ); +}; + +/** + * Sort an array of tracks (alias to lodash.orderby) + */ +export const sortTracks = (tracks: Track[], sort: SortTuple): Track[] => { + const [columns, order] = sort; + return orderBy(tracks, columns, order); +}; + +/** + * Format a list of tracks to a nice status + */ +export const getStatus = (tracks: Track[]): string => { + const status = utils.parseDuration( + tracks.map((d) => d.duration).reduce((a, b) => a + b, 0), + ); + return `${tracks.length} tracks, ${status}`; +}; diff --git a/src/renderer/lib/utils-player.ts b/src/lib/utils-player.ts similarity index 79% rename from src/renderer/lib/utils-player.ts rename to src/lib/utils-player.ts index 239438da4..67cb85c4a 100644 --- a/src/renderer/lib/utils-player.ts +++ b/src/lib/utils-player.ts @@ -1,13 +1,10 @@ -import { TrackModel } from '../../shared/types/museeks'; +import { Track } from '../generated/typings'; /** * Shuffle an array with a Player behavior in mind: * the currently-playing track should remain the same, */ -export const shuffleTracks = ( - tracks: TrackModel[], - index: number, -): TrackModel[] => { +export const shuffleTracks = (tracks: Track[], index: number): Track[] => { const shuffledTracks = [...tracks]; const currentTrack = shuffledTracks.splice(index, 1)[0]; diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 000000000..5167f1824 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,42 @@ +import { error } from '@tauri-apps/plugin-log'; + +import useToastsStore from '../stores/useToastsStore'; + +/** + * Parse an int to a more readable string + */ +export const parseDuration = (duration: number | null): string => { + if (duration !== null) { + const hours = Math.trunc(duration / 3600); + const minutes = Math.trunc(duration / 60) % 60; + const seconds = Math.trunc(duration) % 60; + + const hoursStringified = hours < 10 ? `0${hours}` : hours; + const minutesStringified = minutes < 10 ? `0${minutes}` : minutes; + const secondsStringified = seconds < 10 ? `0${seconds}` : seconds; + + let result = hours > 0 ? `${hoursStringified}:` : ''; + result += `${minutesStringified}:${secondsStringified}`; + + return result; + } + + return '00:00'; +}; + +/** + * Friendly logging for caught errors + * https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript + */ +export const logAndNotifyError = (err: unknown, pre?: string): void => { + let message; + if (err instanceof Error) message = err.message; + else message = String(err); + + if (pre != null) { + message = `${pre}: ${message}`; + } + + error(message); + useToastsStore.getState().api.add('danger', message); +}; diff --git a/src/renderer/entrypoint.tsx b/src/main.tsx similarity index 74% rename from src/renderer/entrypoint.tsx rename to src/main.tsx index e524cbf87..756353c89 100644 --- a/src/renderer/entrypoint.tsx +++ b/src/main.tsx @@ -6,11 +6,13 @@ import React from 'react'; import * as ReactDOM from 'react-dom/client'; -import { DndProvider } from 'react-dnd'; -import { HTML5Backend } from 'react-dnd-html5-backend'; import { RouterProvider } from 'react-router-dom'; +import { QueryClientProvider } from '@tanstack/react-query'; +import { attachConsole } from '@tauri-apps/plugin-log'; import router from './views/router'; +import { queryClient } from './lib/query'; + /* |-------------------------------------------------------------------------- | Styles @@ -26,15 +28,19 @@ import './styles/main.module.css'; |-------------------------------------------------------------------------- */ +attachConsole(); + const wrap = document.getElementById('wrap'); if (wrap) { const root = ReactDOM.createRoot(wrap); root.render( - + - + , ); +} else { + document.body.innerHTML = '
x_x
'; } diff --git a/src/main/entrypoint.ts b/src/main/entrypoint.ts deleted file mode 100644 index 554d8c998..000000000 --- a/src/main/entrypoint.ts +++ /dev/null @@ -1,129 +0,0 @@ -import path from 'path'; - -import { app, BrowserWindow } from 'electron'; -import remote from '@electron/remote/main'; - -import logger from '../shared/lib/logger'; - -import AppModule from './modules/AppModule'; -import ApplicationMenuModule from './modules/ApplicationMenuModule'; -import ConfigModule from './modules/ConfigModule'; -import PowerModule from './modules/PowerMonitorModule'; -import ThumbarModule from './modules/ThumbarModule'; -import DockMenuModule from './modules/DockMenuDarwinModule'; -import SleepBlockerModule from './modules/SleepBlockerModule'; -import DialogsModule from './modules/DialogsModule'; -import NativeThemeModule from './modules/NativeThemeModule'; -import DevtoolsModule from './modules/DevtoolsModule'; -import WindowPositionModule from './modules/WindowPositionModule'; -import IPCCoverModule from './modules/IPCCoverModule'; -import IPCLibraryModule from './modules/IPCLibraryModule'; -import IPCNotificationsModule from './modules/IPCNotificationsModule'; -import IPCPlaylistsModule from './modules/IPCPlaylistsModule'; -import * as ModulesManager from './lib/modules-manager'; -import { checkBounds } from './lib/utils'; - -const appRoot = path.resolve(__dirname, '..'); // Careful, not future-proof -const rendererDistPath = path.join(appRoot, 'renderer'); -const preloadDistPath = path.join(appRoot, 'preload'); - -// @deprecated Remove all usage of remote in the app -remote.initialize(); - -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the javascript object is GCed. -let mainWindow: Electron.BrowserWindow | null = null; - -// Quit when all windows are closed -app.on('window-all-closed', () => { - app.quit(); -}); - -// This method will be called when Electron has finished its -// initialization and ready to create browser windows. -app.on('ready', async () => { - const configModule = new ConfigModule(); - await ModulesManager.init(configModule); - const config = configModule.getConfig(); - - const bounds = checkBounds(config.get('bounds')); - - // Create the browser window - mainWindow = new BrowserWindow({ - title: 'Museeks', - x: bounds.x, - y: bounds.y, - width: bounds.width, - height: bounds.height, - minWidth: 900, - minHeight: 550, - frame: true, - autoHideMenuBar: true, - titleBarStyle: 'hiddenInset', // MacOS polished window - show: false, - webPreferences: { - // sandbox cannot be removed before we remove all those usage from preload: - // https://www.electronjs.org/docs/latest/tutorial/sandbox#preload-scripts - sandbox: false, - allowRunningInsecureContent: false, - autoplayPolicy: 'no-user-gesture-required', - webSecurity: process.env.ELECTRON_RENDERER_URL == null, // Cannot load local resources without that - preload: path.join(preloadDistPath, 'entrypoint.js'), - }, - }); - - // Open dev tools if museeks runs in debug or development mode - if ( - process.argv.includes('--devtools') || - process.env.NODE_ENV === 'development' || - process.env.VITE_DEV_SERVER_URL - ) { - mainWindow.webContents.openDevTools({ mode: 'detach' }); - } - - mainWindow.on('closed', () => { - // Dereference the window object - mainWindow = null; - }); - - // Prevent webContents from opening new windows (e.g ctrl-click on link) - mainWindow.webContents.setWindowOpenHandler(() => { - return { action: 'deny' }; - }); - - // @deprecated Remove all usage of remote in the app - remote.enable(mainWindow.webContents); - - // ... and load the html page generated by Vite - const viewSuffix = `#/${config.get('defaultView')}`; - - let url: string; - - if (!app.isPackaged && process.env['ELECTRON_RENDERER_URL']) { - url = `${process.env['ELECTRON_RENDERER_URL']}${viewSuffix}`; - } else { - url = `file://${rendererDistPath}/index.html${viewSuffix}`; - } - - logger.info(`Loading main window with "${url}"`); - mainWindow.loadURL(url); - - // Let's list the list of modules we will use for Museeks - ModulesManager.init( - new AppModule(mainWindow, config), - new PowerModule(mainWindow), - new ApplicationMenuModule(mainWindow), - new ThumbarModule(mainWindow), - new DockMenuModule(mainWindow), - new SleepBlockerModule(mainWindow), - new DialogsModule(mainWindow), - new NativeThemeModule(mainWindow, config), - new DevtoolsModule(mainWindow), - new WindowPositionModule(mainWindow, config), - // Modules used to handle IPC APIs - new IPCCoverModule(mainWindow), - new IPCLibraryModule(mainWindow), - new IPCNotificationsModule(mainWindow, config), - new IPCPlaylistsModule(mainWindow), - ).catch(logger.error); -}); diff --git a/src/main/lib/modules-manager.ts b/src/main/lib/modules-manager.ts deleted file mode 100644 index 8d0499e47..000000000 --- a/src/main/lib/modules-manager.ts +++ /dev/null @@ -1,16 +0,0 @@ -import logger from '../../shared/lib/logger'; -import Module from '../modules/BaseModule'; - -export const init = async (...modules: Module[]): Promise => { - await Promise.allSettled( - modules.map((module) => - module.init().catch((err) => { - throw err; - }), - ), - ).catch((err) => { - logger.error( - `An error occured when loading ${module.constructor.name} could not be loaded:\n${err}`, - ); - }); -}; diff --git a/src/main/lib/utils-cover.ts b/src/main/lib/utils-cover.ts deleted file mode 100644 index 6c84a2489..000000000 --- a/src/main/lib/utils-cover.ts +++ /dev/null @@ -1,88 +0,0 @@ -import path from 'path'; -import fs from 'fs'; - -import * as mmd from 'music-metadata'; -import { globby } from 'globby'; - -import logger from '../../shared/lib/logger'; - -const SUPPORTED_COVER_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.bmp', '.gif']; -const SUPPORTED_COVER_NAMES = ['album', 'albumart', 'folder', 'cover', 'front']; - -/** - * Parse data to be used by img/background-image with base64 - */ -export const parseBase64 = (format: string, data: string): string => { - return `data:${format};base64,${data}`; -}; - -/** - * Determine if a file is a valid cover or not - */ -const isValidFilename = (pathname: path.ParsedPath): boolean => { - const isExtensionValid = SUPPORTED_COVER_EXTENSIONS.includes( - pathname.ext.toLowerCase(), - ); - const isNameValid = SUPPORTED_COVER_NAMES.some((name) => { - return pathname.name.toLowerCase().includes(name); - }); - - return isExtensionValid && isNameValid; -}; - -/** - * Smart fetch cover (from id3 or file directory) - */ -export const fetchCover = async ( - trackPath: string, - ignoreID3 = false, - base64 = false, -): Promise => { - if (!trackPath) { - return null; - } - - if (!ignoreID3) { - const data = await mmd.parseFile(trackPath); - const picture = data.common.picture && data.common.picture[0]; - - if (picture) { - // If cover in id3 - return parseBase64(picture.format, picture.data.toString('base64')); - } - } - - // scan folder for any cover image - const folder = path.dirname(trackPath); - const pattern = `${folder.replace(/\\/g, '/')}/*`; - - const matches = await globby(pattern, { followSymbolicLinks: false }); - - const match = matches.find((elem) => { - return isValidFilename(path.parse(elem)); - }); - - if (match) { - if (base64) return getFileAsBase64(match); - - return `file://${match}`; - } - - return null; -}; - -/** - * Returns the given file as a base64 string - */ -export const getFileAsBase64 = async ( - filePath: string, -): Promise => { - try { - const content = fs.readFileSync(filePath, { encoding: 'base64' }); - return parseBase64(path.extname(filePath).substr(1), content); - } catch (err) { - logger.warn('Could not get cover as base64:'); - logger.warn(err); - return null; - } -}; diff --git a/src/main/lib/utils-m3u.ts b/src/main/lib/utils-m3u.ts deleted file mode 100644 index 3681f2a6f..000000000 --- a/src/main/lib/utils-m3u.ts +++ /dev/null @@ -1,55 +0,0 @@ -import path from 'path'; -import fs from 'fs'; - -import chardet from 'chardet'; -import iconv from 'iconv-lite'; - -import logger from '../../shared/lib/logger'; - -const isFile = (path: string) => fs.lstatSync(path).isFile(); - -/** - * Analyze a .m3u file and returns the resolved path of each song from it - */ -export const parse = (filePath: string): string[] => { - try { - const baseDir = path.parse(filePath).dir; - const content = fs.readFileSync(filePath); - const encoding = chardet.detect(content); - - if (typeof encoding !== 'string') { - throw new Error(`could not guess the file encoding (${filePath})`); - } - - const decodedContent = iconv.decode(content, encoding); - - const files = decodedContent.split(/\r?\n/).reduce((acc, line) => { - if (line.length === 0) { - return acc; - } - - // If absolute path - if (fs.existsSync(path.resolve(line)) && isFile(path.resolve(line))) { - acc.push(path.resolve(line)); - return acc; - } - - // If relative Path - if ( - fs.existsSync(path.resolve(baseDir, line)) && - isFile(path.resolve(baseDir, line)) - ) { - acc.push(path.resolve(baseDir, line)); - return acc; - } - - return acc; - }, [] as string[]); - - return files; - } catch (err) { - logger.warn(err); - } - - return []; -}; diff --git a/src/main/lib/utils.ts b/src/main/lib/utils.ts deleted file mode 100644 index 1b1237d31..000000000 --- a/src/main/lib/utils.ts +++ /dev/null @@ -1,42 +0,0 @@ -import electron from 'electron'; - -import { ConfigBounds } from '../../shared/types/museeks'; - -const DEFAULT_WIDTH = 900; -const DEFAULT_HEIGHT = 550; - -export const checkBounds = function ( - bounds: ConfigBounds | undefined, -): ConfigBounds { - if (bounds === undefined) { - bounds = { - x: 0, - y: 0, - height: 0, - width: 0, - }; - } - - // check if the browser window is offscreen - const display = electron.screen.getDisplayNearestPoint({ - x: Math.round(bounds.x), - y: Math.round(bounds.y), - }).workArea; - - const onScreen = - bounds.x >= display.x && - bounds.x + bounds.width <= display.x + display.width && - bounds.y >= display.y && - bounds.y + bounds.height <= display.y + display.height; - - if (!onScreen) { - return { - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, - x: display.width / 2 - DEFAULT_WIDTH / 2, - y: display.height / 2 - DEFAULT_HEIGHT / 2, - }; - } - - return bounds; -}; diff --git a/src/main/modules/AppModule.ts b/src/main/modules/AppModule.ts deleted file mode 100644 index 2b93bfdc3..000000000 --- a/src/main/modules/AppModule.ts +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Module in charge of handling the different window behavior based on platforms - */ - -import os from 'os'; - -import type Store from 'electron-store'; -import { ipcMain, app } from 'electron'; - -import logger from '../../shared/lib/logger'; -import channels from '../../shared/lib/ipc-channels'; -import { Config } from '../../shared/types/museeks'; - -import ModuleWindow from './BaseWindowModule'; - -export default class AppModule extends ModuleWindow { - protected config: Store; - protected forceQuit: boolean; - - constructor(window: Electron.BrowserWindow, config: Store) { - super(window); - - this.config = config; - this.forceQuit = false; - } - - async load(): Promise { - // Make the app a single-instance app - this.ensureSingleInstance(); - - // Shows app only once it is loaded (avoid initial white flash) - ipcMain.once(channels.APP_READY, () => { - if (this.window) { - this.window.show(); - } - }); - - // Restart the app with the same arguments - ipcMain.on(channels.APP_RESTART, () => { - app.relaunch({ args: process.argv.slice(1).concat(['--relaunch']) }); - app.exit(0); - }); - - // Prevent the window to be closed, hide it instead (to continue audio playback) - this.window.on('close', (e) => { - this.close(e); - }); - - ipcMain.on(channels.APP_CLOSE, (e) => { - this.close(e); - }); - - // Click on the dock icon to show the app again on macOS - app.on('activate', () => { - if (this.window) { - this.window.show(); - this.window.focus(); - } - }); - - // Small hack to check on MacOS if the dock close action has been clicked - // https://stackoverflow.com/questions/35008347/electron-close-w-x-vs-right-click-dock-and-quit#35782702 - app.on('before-quit', () => { - this.forceQuit = true; - }); - } - - close(e: Electron.Event): void { - if (this.forceQuit || os.platform() !== 'darwin') { - app.quit(); - this.window.destroy(); - } else { - e.preventDefault(); - this.window.hide(); - } - } - - ensureSingleInstance(): void { - const gotTheLock = app.requestSingleInstanceLock(); - - app.on('second-instance', () => { - // Someone tried to run a second instance, we should focus our window. - if (this.window) { - if (this.window.isMinimized()) this.window.restore(); - this.window.focus(); - } - }); - - if (!gotTheLock) { - logger.info( - 'Another instance of Museeks is already running, quitting...', - ); - app.quit(); - } - } -} diff --git a/src/main/modules/ApplicationMenuModule.ts b/src/main/modules/ApplicationMenuModule.ts deleted file mode 100644 index 12a22eb94..000000000 --- a/src/main/modules/ApplicationMenuModule.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Module in charge of the app menu - * Litteraly stolen from: https://electronjs.org/docs/api/menu#examples - */ - -import { Menu, shell } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; - -import ModuleWindow from './BaseWindowModule'; - -export default class ApplicationMenuModule extends ModuleWindow { - async load(): Promise { - const template: Electron.MenuItemConstructorOptions[] = [ - { role: 'appMenu' }, - { role: 'fileMenu' }, - { role: 'editMenu' }, - { - label: 'View', - submenu: [ - { - label: 'Jump to playing track', - accelerator: 'CmdOrCtrl+T', - click: () => { - this.window.webContents.send(channels.MENU_JUMP_TO_PLAYING_TRACK); - }, - }, - { type: 'separator' }, - { - label: 'Go to library', - accelerator: 'CmdOrCtrl+L', - click: () => { - this.window.webContents.send(channels.MENU_GO_TO_LIBRARY); - }, - }, - { - label: 'Go to playlists', - accelerator: 'CmdOrCtrl+P', - click: () => { - this.window.webContents.send(channels.MENU_GO_TO_PLAYLISTS); - }, - }, - { type: 'separator' }, - { role: 'reload' }, - { role: 'forceReload' }, - { role: 'toggleDevTools' }, - { type: 'separator' }, - { role: 'resetZoom' }, - { role: 'zoomIn' }, - { role: 'zoomOut' }, - { type: 'separator' }, - { role: 'togglefullscreen' }, - ], - }, - { role: 'windowMenu' }, - { - role: 'help', - submenu: [ - { - label: 'Learn More', - click: async () => { - await shell.openExternal('https://museeks.io'); - }, - }, - ], - }, - ]; - - const menu = Menu.buildFromTemplate(template); - Menu.setApplicationMenu(menu); - } -} diff --git a/src/main/modules/BaseModule.ts b/src/main/modules/BaseModule.ts deleted file mode 100644 index 20b76a9e5..000000000 --- a/src/main/modules/BaseModule.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Example of Module, other modules should extent this class - */ - -import os from 'os'; - -import logger from '../../shared/lib/logger'; - -export default class Module { - protected loaded: boolean; - protected platforms: NodeJS.Platform[]; - - constructor() { - this.loaded = false; - this.platforms = ['win32', 'linux', 'darwin']; - } - - // To not be overriden - async init(): Promise { - if (this.loaded) - throw new TypeError(`Module ${this.constructor.name} is already loaded`); - - if (this.platforms.includes(os.platform())) { - await this.load().catch((err) => { - throw err; - }); - this.loaded = true; - logger.info(`Loaded ${this.constructor.name}`); - } else { - logger.info( - `Skipping load of ${ - this.constructor.name - } (supported platform: ${this.platforms.join(', ')})`, - ); - } - } - - // Can (now) be an asynchronous method - async load(): Promise { - throw new TypeError( - `Module ${this.constructor.name} should have a load() method`, - ); - // Do whatever you want here :) - } -} diff --git a/src/main/modules/BaseWindowModule.ts b/src/main/modules/BaseWindowModule.ts deleted file mode 100644 index f28c42694..000000000 --- a/src/main/modules/BaseWindowModule.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Example of Module, other modules should extent this class - */ - -import Module from './BaseModule'; - -export default class ModuleWindow extends Module { - protected window: Electron.BrowserWindow; - - constructor(window: Electron.BrowserWindow) { - super(); - this.window = window; - } - - getWindow(): Electron.BrowserWindow { - return this.window; - } -} diff --git a/src/main/modules/ConfigModule.ts b/src/main/modules/ConfigModule.ts deleted file mode 100644 index 7b639a214..000000000 --- a/src/main/modules/ConfigModule.ts +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Essential module for creating/loading the app config - */ - -import electron, { app, ipcMain } from 'electron'; -import Store from 'electron-store'; - -import { Config, Repeat, SortBy, SortOrder } from '../../shared/types/museeks'; -import channels from '../../shared/lib/ipc-channels'; -import logger from '../../shared/lib/logger'; - -import Module from './BaseModule'; - -export default class ConfigModule extends Module { - private workArea: Electron.Rectangle; - private config: Store; - - constructor() { - super(); - - logger.info(`Using "${app.getPath('userData')}" as config path`); - - this.workArea = electron.screen.getPrimaryDisplay().workArea; - this.config = new Store({ - name: 'config', - defaults: this.getDefaultConfig(), - }); - - // A few manual migrations, electron-store migratons don't seem to play well - // new setting - if (this.config.get('tracksDensity') == undefined) { - logger.info('Config: setting "tracksDensity" option'); - this.config.set('tracksDensity', 'normal'); - } - - logger.child; - - // dark-legacy is gone - if (this.config.get('theme') === 'dark-legacy') { - logger.info('Config: disabling dark-legacy theme'); - this.config.set('theme', 'dark'); - } - } - - async load(): Promise { - ipcMain.on(channels.CONFIG_GET_ALL, (event) => { - event.returnValue = this.config.store; - }); - - ipcMain.handle(channels.CONFIG_GET_ALL, (): Config => this.config.store); - - ipcMain.handle( - channels.CONFIG_GET, - (_e: Electron.Event, key: T): Config[T] => { - logger.debug('Config get', key); - return this.config.get(key); - }, - ); - - ipcMain.handle( - channels.CONFIG_SET, - ( - _e: Electron.Event, - key: T, - value: Config[T], - ): void => { - logger.debug('Config set', key, value); - this.config.set(key, value); - }, - ); - } - - getConfig(): Store { - const config = this.config; - - if (config === undefined) { - throw new Error('Config is not defined, has it been loaded?'); - } - - return config; - } - - getDefaultConfig(): Config { - const config: Config = { - theme: '__system', - audioVolume: 1, - audioPlaybackRate: 1, - audioOutputDevice: 'default', - audioMuted: false, - audioShuffle: false, - audioRepeat: Repeat.NONE, - tracksDensity: 'normal', - defaultView: 'library', - librarySort: { - by: SortBy.ARTIST, - order: SortOrder.ASC, - }, - // musicFolders: [], - sleepBlocker: false, - autoUpdateChecker: true, - displayNotifications: true, - bounds: { - width: 1000, - height: 600, - x: Math.round(this.workArea.width / 2), - y: Math.round(this.workArea.height / 2), - }, - }; - - return config; - } -} diff --git a/src/main/modules/DevtoolsModule.ts b/src/main/modules/DevtoolsModule.ts deleted file mode 100644 index 88da558a6..000000000 --- a/src/main/modules/DevtoolsModule.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Module in charge of loading devtools extensions to ensure a good developer - * experience - */ - -import installExtensions, { - REDUX_DEVTOOLS, - REACT_DEVELOPER_TOOLS, -} from 'electron-devtools-assembler'; - -import logger from '../../shared/lib/logger'; - -import ModuleWindow from './BaseWindowModule'; - -export default class DevtoolsModule extends ModuleWindow { - async load(): Promise { - const isProduction = process.env.NODE_ENV === 'production'; - - // Let's install some extensions so it's easier for us to debug things - if (!isProduction) { - try { - await installExtensions([REDUX_DEVTOOLS, REACT_DEVELOPER_TOOLS], { - loadExtensionOptions: { - allowFileAccess: true, - }, - }); - logger.info('Added devtools extensions'); - } catch (err) { - logger.warn('An error occurred while trying to add extensions:\n', err); - } - } - } -} diff --git a/src/main/modules/DialogsModule.ts b/src/main/modules/DialogsModule.ts deleted file mode 100644 index 0e654dd3d..000000000 --- a/src/main/modules/DialogsModule.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Module in charge of receiving dialogs requests from the renderer process - * and returning data if needed - */ - -import { dialog, ipcMain } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; - -import ModuleWindow from './BaseWindowModule'; - -export default class DialogsModule extends ModuleWindow { - async load(): Promise { - /** - * showMessageBox - */ - ipcMain.handle( - channels.DIALOG_MESSAGE_BOX, - async (_event, options: Electron.MessageBoxOptions) => { - const result = await dialog.showMessageBox(this.window, options); - - return result; - }, - ); - - /** - * showOpenDialog - */ - ipcMain.handle( - channels.DIALOG_OPEN, - async (_event, options: Electron.OpenDialogOptions) => { - const result = await dialog.showOpenDialog(options); - - return result; - }, - ); - } -} diff --git a/src/main/modules/DockMenuDarwinModule.ts b/src/main/modules/DockMenuDarwinModule.ts deleted file mode 100644 index 61277f5f3..000000000 --- a/src/main/modules/DockMenuDarwinModule.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Module in charge of the dock menu on macOS - */ - -import { IpcMainEvent, Menu, app, ipcMain } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; -import { PlayerStatus, TrackModel } from '../../shared/types/museeks'; - -import ModuleWindow from './BaseWindowModule'; - -export default class DockMenuDarwinModule extends ModuleWindow { - protected menu: Electron.MenuItemConstructorOptions[]; - protected songDetails: Electron.MenuItemConstructorOptions[]; - protected playToggle: Electron.MenuItemConstructorOptions[]; - protected pauseToggle: Electron.MenuItemConstructorOptions[]; - - constructor(window: Electron.BrowserWindow) { - super(window); - this.platforms = ['darwin']; - - this.menu = []; - this.songDetails = []; - this.playToggle = []; - this.pauseToggle = []; - } - - async load(): Promise { - this.songDetails = [ - { - label: 'Not playing', - enabled: false, - }, - { - type: 'separator', - }, - ]; - - this.playToggle = [ - { - label: 'Play', - click: () => { - this.window.webContents.send(channels.PLAYBACK_PLAY); - }, - }, - ]; - - this.pauseToggle = [ - { - label: 'Pause', - click: () => { - this.window.webContents.send(channels.PLAYBACK_PAUSE); - }, - }, - ]; - - this.menu = [ - { - label: 'Previous', - click: () => { - this.window.webContents.send(channels.PLAYBACK_PREVIOUS); - }, - }, - { - label: 'Next', - click: () => { - this.window.webContents.send(channels.PLAYBACK_NEXT); - }, - }, - ]; - - // Load events listener for player actions - ipcMain.on(channels.PLAYBACK_PLAY, () => { - this.setDockMenu(PlayerStatus.PLAY); - }); - - ipcMain.on(channels.PLAYBACK_PAUSE, () => { - this.setDockMenu(PlayerStatus.PAUSE); - }); - - ipcMain.on( - channels.PLAYBACK_TRACK_CHANGE, - (_e: IpcMainEvent, track: TrackModel) => { - this.updateDockMenu(track); - this.setDockMenu(PlayerStatus.PLAY); - }, - ); - - this.setDockMenu(PlayerStatus.PAUSE); - } - - setDockMenu(state: PlayerStatus): void { - const playPauseItem = state === 'play' ? this.pauseToggle : this.playToggle; - const menuTemplate = [...this.songDetails, ...playPauseItem, ...this.menu]; - app.dock.setMenu(Menu.buildFromTemplate(menuTemplate)); - } - - updateDockMenu(metadata: TrackModel): void { - this.songDetails = [ - { - label: `${metadata.title}`, - enabled: false, - }, - { - label: `by ${metadata.artist}`, - enabled: false, - }, - { - label: `on ${metadata.album}`, - enabled: false, - }, - { - type: 'separator', - }, - ]; - } -} diff --git a/src/main/modules/IPCCoverModule.ts b/src/main/modules/IPCCoverModule.ts deleted file mode 100644 index f49bc8507..000000000 --- a/src/main/modules/IPCCoverModule.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ipcMain } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; -import { fetchCover } from '../lib/utils-cover'; - -import ModuleWindow from './BaseWindowModule'; - -/** - * Module in charge of returning the cover data for a given track - */ -export default class IPCCoverModule extends ModuleWindow { - async load(): Promise { - ipcMain.handle( - channels.COVER_GET, - (_e, path: string): Promise => { - return fetchCover(path, false, true); - }, - ); - } -} diff --git a/src/main/modules/IPCLibraryModule.ts b/src/main/modules/IPCLibraryModule.ts deleted file mode 100644 index 301be4329..000000000 --- a/src/main/modules/IPCLibraryModule.ts +++ /dev/null @@ -1,331 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -import { BrowserWindow, ipcMain, IpcMainInvokeEvent } from 'electron'; -import { globby } from 'globby'; -import * as mmd from 'music-metadata'; -import queue from 'queue'; -import pickBy from 'lodash/pickBy'; - -import * as m3u from '../lib/utils-m3u'; -import channels from '../../shared/lib/ipc-channels'; -import { Track } from '../../shared/types/museeks'; -import logger, { loggerExtras } from '../../shared/lib/logger'; -import { getLoweredMeta } from '../../shared/lib/utils-id3'; - -import ModuleWindow from './BaseWindowModule'; - -interface ScanFile { - path: string; - stat: fs.Stats; -} - -/* -|-------------------------------------------------------------------------- -| supported Formats -|-------------------------------------------------------------------------- -*/ - -const SUPPORTED_TRACKS_EXTENSIONS = [ - // MP3 / MP4 - '.mp3', - '.mp4', - '.aac', - '.m4a', - '.3gp', - '.wav', - // Opus - '.ogg', - '.ogv', - '.ogm', - '.opus', - // Flac - '.flac', - // web media - '.webm', -]; - -const SUPPORTED_PLAYLISTS_EXTENSIONS = ['.m3u']; - -/** - * Module in charge of renderer <> main processes communication regarding - * library management, covers, playlists etc. - */ -class IPCLibraryModule extends ModuleWindow { - public import: { - processed: number; - total: number; - }; - - constructor(window: BrowserWindow) { - super(window); - - this.import = { - processed: 0, - total: 0, - }; - } - - async load(): Promise { - ipcMain.handle( - channels.LIBRARY_IMPORT_TRACKS, - this.importTracks.bind(this), - ); - ipcMain.handle(channels.LIBRARY_LOOKUP, this.libraryLookup.bind(this)); - ipcMain.handle(channels.PLAYLISTS_RESOLVE_M3U, this.resolveM3u.bind(this)); - } - - // --------------------------------------------------------------------------- - // IPC Events - // --------------------------------------------------------------------------- - - /** - * Scan the file system and return all music files and playlists that may be - * safely imported to Museeks. - */ - private async libraryLookup( - _e: IpcMainInvokeEvent, - pathsToScan: string[], - ): Promise<[string[], string[]]> { - logger.info('Starting tracks lookup', pathsToScan); - loggerExtras.time('Library lookup'); - - // 1. Get the stats for all the files/paths - const paths = await Promise.all(pathsToScan.map(this.getStats)); - - // 2. Split directories and files - const files: string[] = []; - const folders: string[] = []; - - paths.forEach((elem) => { - if (elem.stat.isFile()) files.push(elem.path); - if (elem.stat.isDirectory() || elem.stat.isSymbolicLink()) - folders.push(elem.path); - }); - - // 3. Scan all the directories with globby - const globbies = folders.map((folder) => { - // Normalize slashes and escape regex special characters - const pattern = `${folder - .replace(/\\/g, '/') - // I'm not sure about this eslint-ignore - // eslint-disable-next-line no-useless-escape - .replace(/([$^*+?()\[\]])/g, '\\$1')}/**/*.*`; - - return globby(pattern, { followSymbolicLinks: true }); - }); - - const subDirectoriesFiles = await Promise.all(globbies); - // Scan folders and add files to library - - // 4. Merge all path arrays together and filter them with the extensions we support - const allFiles = subDirectoriesFiles - .reduce((acc, array) => acc.concat(array), [] as string[]) - .concat(files); // Add the initial files - - const supportedTrackFiles = allFiles.filter((filePath) => { - const extension = path.extname(filePath).toLowerCase(); - return SUPPORTED_TRACKS_EXTENSIONS.includes(extension); - }); - - const supportedPlaylistsFiles = allFiles.filter((filePath) => { - const extension = path.extname(filePath).toLowerCase(); - return SUPPORTED_PLAYLISTS_EXTENSIONS.includes(extension); - }); - - loggerExtras.timeEnd('Library lookup'); - - return [supportedTrackFiles, supportedPlaylistsFiles]; - } - - private async resolveM3u( - _e: IpcMainInvokeEvent, - path: string, - ): Promise { - return m3u.parse(path); - } - - /** - * Now: returns the id3 tags of all the given tracks path - * Tomorrow: do DB insertion here - */ - async importTracks( - _e: IpcMainInvokeEvent, - tracksPath: string[], - ): Promise { - logger.info(`Starting import of ${tracksPath.length} tracks`); - loggerExtras.time('Tracks scan'); - - return new Promise((resolve, reject) => { - if (tracksPath.length === 0) return; - - try { - // Instantiate queue - const scannedFiles: Track[] = []; - - const scanQueue = new queue(); - scanQueue.concurrency = 32; - scanQueue.autostart = false; - - scanQueue.addEventListener('end', () => { - this.import.processed = 0; - this.import.total = 0; - - loggerExtras.timeEnd('Tracks scan'); - resolve(scannedFiles); - }); - // End queue instantiation - - this.import.total += tracksPath.length; - - // Add all the items to the queue - tracksPath.forEach((filePath, index) => { - scanQueue.push(async (callback) => { - try { - // Normalize (back)slashes on Windows - filePath = path.resolve(filePath); - - // Check if there is an existing record in the DB - // const existingDoc = await db.tracks.findOnlyByPath(filePath); - - // If there is existing document - // if (!existingDoc) { - // Get metadata - const track = await this.getMetadata(filePath); - // const insertedDoc = await db.tracks.insert(track); - scannedFiles.push(track); - // } - - this.import.processed++; - } catch (err) { - logger.warn(err); - } finally { - if (index % 50 == 0) { - logger.debug(`Finished scanning ${index} tracks`); - } - } - - if (callback) callback(); - }); - }); - - scanQueue.start(); - } catch (err) { - reject(err); - } - }); - } - - // --------------------------------------------------------------------------- - // Helpers - // --------------------------------------------------------------------------- - - private getDefaultMetadata(): Track { - return { - album: 'Unknown', - artist: ['Unknown artist'], - disk: { - no: 0, - of: 0, - }, - duration: 0, - genre: [], - loweredMetas: { - artist: ['unknown artist'], - album: 'unknown', - title: '', - genre: [], - }, - path: '', - playCount: 0, - title: '', - track: { - no: 0, - of: 0, - }, - year: null, - }; - } - - private parseMusicMetadata( - data: mmd.IAudioMetadata, - trackPath: string, - ): Partial { - const { common, format } = data; - - const metadata = { - album: common.album, - artist: - common.artists || - (common.artist && [common.artist]) || - (common.albumartist && [common.albumartist]), - disk: common.disk, - duration: format.duration, - genre: common.genre, - title: common.title || path.parse(trackPath).base, - track: common.track, - year: common.year, - }; - - return pickBy(metadata); - } - - /** - * Get a file ID3 metadata - */ - private async getMetadata(trackPath: string): Promise { - const defaultMetadata = this.getDefaultMetadata(); - - const basicMetadata: Track = { - ...defaultMetadata, - path: trackPath, - }; - - try { - const data = await mmd.parseFile(trackPath, { - skipCovers: true, - duration: true, - }); - - // Let's try to define something with what we got so far... - const parsedData = this.parseMusicMetadata(data, trackPath); - - const metadata: Track = { - ...defaultMetadata, - ...parsedData, - path: trackPath, - }; - - metadata.loweredMetas = getLoweredMeta(metadata); - - // Let's try another wat to retrieve a track duration - // if (metadata.duration < 0.5) { - // try { - // metadata.duration = await getAudioDuration(trackPath); - // } catch (err) { - // logger.warn(`An error occured while getting ${trackPath} duration: ${err}`); - // } - // } - - return metadata; - } catch (err) { - logger.warn( - `An error occured while reading ${trackPath} id3 tags: ${err}`, - ); - } - - return basicMetadata; - } - - /** - * Get stats of a file while keeping the path itself - */ - private async getStats(folderPath: string): Promise { - return { - path: folderPath, - stat: await fs.promises.stat(folderPath), - }; - } -} - -export default IPCLibraryModule; diff --git a/src/main/modules/IPCNotificationsModule.ts b/src/main/modules/IPCNotificationsModule.ts deleted file mode 100644 index 9e9933bb1..000000000 --- a/src/main/modules/IPCNotificationsModule.ts +++ /dev/null @@ -1,66 +0,0 @@ -import type Store from 'electron-store'; -import { - ipcMain, - IpcMainEvent, - NativeImage, - nativeImage, - Notification, -} from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; -import { Config, TrackModel } from '../../shared/types/museeks'; -import * as utilsCover from '../lib/utils-cover'; - -import ModuleWindow from './BaseWindowModule'; - -/** - * Module in charge of displaying native notifications on certain user actions - */ -export default class IPCNotificationsModule extends ModuleWindow { - protected config: Store; - - constructor(window: Electron.BrowserWindow, config: Store) { - super(window); - this.config = config; - } - - async load(): Promise { - ipcMain.on( - channels.PLAYBACK_PLAY, - (_e: IpcMainEvent, track: TrackModel) => { - this.sendPlaybackNotification(track); - }, - ); - } - - private async sendPlaybackNotification(track: TrackModel): Promise { - if ( - this.window.isFocused() || - this.config.get('displayNotifications') === false - ) { - return; - } - - const cover = await utilsCover.fetchCover(track.path); - - let icon: NativeImage | undefined = undefined; - - if (cover !== null) { - icon = nativeImage.createFromDataURL(cover); - } - - const notification = new Notification({ - title: track.title, - body: `${track.artist}\n${track.album}`, - icon, - silent: true, - }); - - notification.on('click', () => { - this.window.show(); - this.window.focus(); - }); - - notification.show(); - } -} diff --git a/src/main/modules/IPCPlaylistsModule.ts b/src/main/modules/IPCPlaylistsModule.ts deleted file mode 100644 index e40335631..000000000 --- a/src/main/modules/IPCPlaylistsModule.ts +++ /dev/null @@ -1,70 +0,0 @@ -import path from 'path'; - -import { app, dialog, ipcMain } from 'electron'; -import * as m3u from 'm3ujs'; - -import channels from '../../shared/lib/ipc-channels'; -import logger from '../../shared/lib/logger'; - -import ModuleWindow from './BaseWindowModule'; - -/** - * Module in charge of returning the cover data for a given track - */ -class IPCPlaylistsModule extends ModuleWindow { - async load(): Promise { - ipcMain.on( - channels.PLAYLIST_EXPORT, - async (_e, name: string, tracksPath: string[]) => { - const { filePath } = await dialog.showSaveDialog(this.window, { - title: 'Export playlist', - defaultPath: path.resolve(app.getPath('music'), name), - filters: [ - { - extensions: ['m3u'], - name: 'random', - }, - ], - }); - - if (filePath) { - try { - const playlistExport = new m3u.Playlist( - new m3u.TypeEXTM3U((entry) => { - if (entry instanceof m3u.Mp3Entry) { - return `${entry.artist} - ${entry.album} - ${entry.track} - ${entry.title}`; - } - return entry.displayName; - }), - ); - - tracksPath.forEach((trackPath) => { - try { - playlistExport.add(new m3u.Mp3Entry(trackPath)); - } catch (err) { - logger.warn(err); - } - }); - - playlistExport.write(filePath); - } catch (err: unknown) { - logger.warn(err); - if (err instanceof Error) { - dialog.showErrorBox( - `An error occured when exporting the playlist "${name}"`, - err.message, - ); - } else { - dialog.showErrorBox( - `An error occured when exporting the playlist "${name}"`, - 'Unknown error', - ); - } - } - } - }, - ); - } -} - -export default IPCPlaylistsModule; diff --git a/src/main/modules/NativeThemeModule.ts b/src/main/modules/NativeThemeModule.ts deleted file mode 100644 index 98953be42..000000000 --- a/src/main/modules/NativeThemeModule.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Module in charge of telling the renderer process which native theme is used - */ - -import type Store from 'electron-store'; -import { ipcMain, nativeTheme } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; -import { themes } from '../../shared/lib/themes'; -import { Config, Theme } from '../../shared/types/museeks'; - -import ModuleWindow from './BaseWindowModule'; - -export default class NativeThemeModule extends ModuleWindow { - protected config: Store; - - constructor(window: Electron.BrowserWindow, config: Store) { - super(window); - this.config = config; - - const theme = this.getTheme(); - nativeTheme.themeSource = theme.themeSource; - } - - async load(): Promise { - /** - * Update the UI when someone changes the global theme settings - */ - nativeTheme.on('updated', () => { - if (this.getThemeID() === '__system') { - this.applyTheme(this.getSystemThemeID()); - } - - // Otherwise, we don't care - }); - - ipcMain.handle(channels.THEME_GET_ID, () => this.getThemeID()); - - /** - * Handle themeSource update and returns the theme variables for a given - * themeID - */ - ipcMain.handle( - channels.THEME_SET_ID, - (_event, themeID: Config['theme']) => { - this.setThemeID(themeID); - }, - ); - - ipcMain.handle(channels.THEME_GET, () => { - let themeID = this.getThemeID(); - - if (themeID === '__system') themeID = this.getSystemThemeID(); - - const theme = themes.find((theme) => theme._id === themeID); - - if (!theme) throw new RangeError(`No theme found with ID ${themeID}`); - - return theme; - }); - } - - getThemeID(): Config['theme'] { - return this.config.get('theme') ?? '__system'; - } - - getTheme(): Theme { - let themeID = this.getThemeID(); - - if (themeID === '__system') { - themeID = this.getSystemThemeID(); - } - - const theme = themes.find((theme) => theme._id === themeID); - - if (!theme) throw new RangeError(`No theme found with ID ${themeID}`); - - return theme; - } - - setThemeID(themeID: Config['theme']): void { - this.config.set('theme', themeID); - - if (themeID === '__system') { - nativeTheme.themeSource = 'system'; - this.applyTheme(this.getSystemThemeID()); - } else { - const theme = themes.find((theme) => theme._id === themeID); - - if (!theme) throw new RangeError(`No theme found with ID ${themeID}`); - - nativeTheme.themeSource = theme.themeSource; - this.applyTheme(theme._id); - } - } - - applyTheme(themeID: Theme['_id']): void { - const theme = themes.find((theme) => theme._id === themeID); - - if (!theme) throw new RangeError(`No theme found with ID ${themeID}`); - - this.window.webContents.send(channels.THEME_APPLY, theme); - } - - getSystemThemeID(): Theme['_id'] { - return nativeTheme.shouldUseDarkColors ? 'dark' : 'light'; - } -} diff --git a/src/main/modules/PowerMonitorModule.ts b/src/main/modules/PowerMonitorModule.ts deleted file mode 100644 index ad9fc5a0f..000000000 --- a/src/main/modules/PowerMonitorModule.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Module in charge of pausing the player when going into sleep - */ - -import electron from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; - -import ModuleWindow from './BaseWindowModule'; - -export default class PowerMonitorModule extends ModuleWindow { - async load(): Promise { - const { powerMonitor } = electron; - const { window } = this; - - powerMonitor.on('suspend', () => { - window.webContents.send(channels.PLAYBACK_PAUSE); - }); - } -} diff --git a/src/main/modules/SleepBlockerModule.ts b/src/main/modules/SleepBlockerModule.ts deleted file mode 100644 index 788820195..000000000 --- a/src/main/modules/SleepBlockerModule.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Module in charge of preventing the computer to go to sleep - */ - -import { powerSaveBlocker, ipcMain, IpcMainEvent } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; - -import ModuleWindow from './BaseWindowModule'; - -export default class SleepBlocker extends ModuleWindow { - protected sleepBlockerID: number; - protected enabled: boolean; - - constructor(window: Electron.BrowserWindow) { - super(window); - - this.enabled = false; - this.sleepBlockerID = 0; - this.platforms = ['win32', 'darwin', 'linux']; - } - - onStartPlayback = (): void => { - if (this.enabled && !powerSaveBlocker.isStarted(this.sleepBlockerID)) { - // or 'prevent-display-sleep' - this.sleepBlockerID = powerSaveBlocker.start('prevent-app-suspension'); - } - }; - - onStopPlayback = (): void => { - if (powerSaveBlocker.isStarted(this.sleepBlockerID)) { - powerSaveBlocker.stop(this.sleepBlockerID); - } - }; - - toggleSleepBlocker = (_event: IpcMainEvent, value: boolean): void => { - this.enabled = value; - }; - - async load(): Promise { - ipcMain.on(channels.SETTINGS_TOGGLE_SLEEP_BLOCKER, this.toggleSleepBlocker); - ipcMain.on(channels.PLAYBACK_PLAY, this.onStartPlayback); - ipcMain.on(channels.PLAYBACK_PAUSE, this.onStopPlayback); - ipcMain.on(channels.PLAYBACK_STOP, this.onStopPlayback); - } -} diff --git a/src/main/modules/ThumbarModule.ts b/src/main/modules/ThumbarModule.ts deleted file mode 100644 index 6ee6182cb..000000000 --- a/src/main/modules/ThumbarModule.ts +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Module in charge of the Windows Thumbar - * (buttons appearing on Museeks preview when hovering the icon) - * - * Windows only - */ - -import path from 'path'; - -import { nativeImage, ipcMain } from 'electron'; - -import channels from '../../shared/lib/ipc-channels'; - -import ModuleWindow from './BaseWindowModule'; - -const { createFromPath } = nativeImage; - -const iconsDirectory = path.resolve( - path.join(__dirname, '../../src/shared/assets/icons/windows'), -); - -export default class ThumbarModule extends ModuleWindow { - constructor(window: Electron.BrowserWindow) { - super(window); - this.platforms = ['win32']; - } - - async load(): Promise { - const { window } = this; - - const icons = { - play: createFromPath(path.join(iconsDirectory, 'play.ico')), - // playDisabled: createFromPath(path.join(iconsDirectory, 'play-disabled.ico')), - pause: createFromPath(path.join(iconsDirectory, 'pause.ico')), - pauseDisabled: createFromPath( - path.join(iconsDirectory, 'pause-disabled.ico'), - ), - prev: createFromPath(path.join(iconsDirectory, 'backward.ico')), - prevDisabled: createFromPath( - path.join(iconsDirectory, 'backward-disabled.ico'), - ), - next: createFromPath(path.join(iconsDirectory, 'forward.ico')), - nextDisabled: createFromPath( - path.join(iconsDirectory, 'forward-disabled.ico'), - ), - }; - - const thumbarButtons = { - play: { - tooltip: 'Play', - icon: icons.play, - click: () => { - window.webContents.send(channels.PLAYBACK_PLAY); - }, - }, - /* playDisabled: { - tooltip: 'Play', - flags: ['disabled'], - icon: icons.playDisabled, - click: () => { return null; } // Electron's TypeScript definition issue - }, */ - pause: { - tooltip: 'Pause', - icon: icons.pause, - click: () => { - window.webContents.send(channels.PLAYBACK_PAUSE); - }, - }, - pauseDisabled: { - tooltip: 'Pause', - flags: ['disabled'], - icon: icons.pauseDisabled, - click: () => { - return null; - }, // Electron's TypeScript definition issue - }, - prev: { - tooltip: 'Prev', - icon: icons.prev, - click: () => { - window.webContents.send(channels.PLAYBACK_PREVIOUS); - }, - }, - prevDisabled: { - tooltip: 'Prev', - flags: ['disabled'], - icon: icons.prevDisabled, - click: () => { - return null; - }, // Electron's TypeScript definition issue - }, - next: { - tooltip: 'Next', - icon: icons.next, - click: () => { - window.webContents.send(channels.PLAYBACK_NEXT); - }, - }, - nextDisabled: { - tooltip: 'Next', - flags: ['disabled'], - icon: icons.nextDisabled, - click: () => { - return null; - }, // Electron's TypeScript definition issue - }, - }; - - ipcMain.once(channels.APP_READY, () => { - window.setThumbarButtons([ - thumbarButtons.prevDisabled, - thumbarButtons.play, - thumbarButtons.nextDisabled, - ]); - }); - - ipcMain.on(channels.PLAYBACK_PLAY, () => { - window.setThumbarButtons([ - thumbarButtons.prev, - thumbarButtons.pause, - thumbarButtons.next, - ]); - }); - - ipcMain.on(channels.PLAYBACK_PAUSE, () => { - window.setThumbarButtons([ - thumbarButtons.prev, - thumbarButtons.play, - thumbarButtons.next, - ]); - }); - - ipcMain.on(channels.PLAYBACK_STOP, () => { - window.setThumbarButtons([ - thumbarButtons.prevDisabled, - thumbarButtons.play, - thumbarButtons.nextDisabled, - ]); - }); - } -} diff --git a/src/main/modules/WindowPositionModule.ts b/src/main/modules/WindowPositionModule.ts deleted file mode 100644 index a7db693cc..000000000 --- a/src/main/modules/WindowPositionModule.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Module in charge of remembering the window position, width and height - */ - -import type Store from 'electron-store'; -import debounce from 'lodash/debounce'; - -import { Config } from '../../shared/types/museeks'; - -import ModuleWindow from './BaseWindowModule'; - -export default class WindowPositionModule extends ModuleWindow { - protected config: Store; - - constructor(window: Electron.BrowserWindow, config: Store) { - super(window); - this.config = config; - } - - async load(): Promise { - this.window.on('resize', debounce(this.saveBounds, 250).bind(this)); - this.window.on('move', debounce(this.saveBounds, 250).bind(this)); - } - - saveBounds() { - const bounds = this.window.getBounds(); - this.config.set('bounds', bounds); - } -} diff --git a/src/main/tsconfig.json b/src/main/tsconfig.json deleted file mode 100644 index 61fe9549c..000000000 --- a/src/main/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "lib": ["ESNext"] - }, - "include": ["../main", "../shared"], - // This imports preloads, which will fail as it requires DOM lib - "exclude": ["../shared/types/declarations/preload.d.ts"] -} diff --git a/src/preload/db.ts b/src/preload/db.ts deleted file mode 100644 index 1bba894a4..000000000 --- a/src/preload/db.ts +++ /dev/null @@ -1,217 +0,0 @@ -import path from 'path'; - -import { app } from '@electron/remote'; -import PouchDB from 'pouchdb'; -import PouchDBFind from 'pouchdb-find'; - -import { - Playlist, - PlaylistModel, - Track, - TrackModel, -} from '../shared/types/museeks'; - -/** - * This will ultimately move to the main process. Here for legacy purpose until - * we find a more suitable database as linvodb is not supported anymore. - */ -const pathUserData = app.getPath('userData'); - -PouchDB.plugin(PouchDBFind); - -const Tracks = new PouchDB(path.join(pathUserData, 'TracksDB'), { - adapter: 'leveldb', - auto_compaction: true, -}); - -Tracks.createIndex({ - index: { - fields: ['path'], - }, -}); - -const Playlists = new PouchDB( - path.join(pathUserData, 'PlaylistsDB'), - { - adapter: 'leveldb', - auto_compaction: true, - }, -); - -Playlists.createIndex({ - index: { - fields: ['importPath'], - }, -}); - -/** ---------------------------------------------------------------------------- - * Shared helpers - * -------------------------------------------------------------------------- */ - -async function reset(): Promise { - // We cannot use destroy() as it literally destroys it, when we just want to - // empty it - const [allTracks, allPlaylists] = await Promise.all([ - tracks.getAll(), - playlists.getAll(), - ]); - - const deletedTracks = allTracks.map((track) => ({ - ...track, - _deleted: true, - })); - - const deletedPlaylists = allPlaylists.map((playlist) => ({ - ...playlist, - _deleted: true, - })); - - await Promise.all([ - Tracks.bulkDocs(deletedTracks), - Playlists.bulkDocs(deletedPlaylists), - ]); -} - -/** ---------------------------------------------------------------------------- - * Tracks - * -------------------------------------------------------------------------- */ - -const tracks = { - async getAll(): Promise { - // Use custom IDs instead? - const [firstResponse, secondResponse] = await Promise.all([ - Tracks.allDocs({ include_docs: true, endkey: '_design' }), - Tracks.allDocs({ include_docs: true, startkey: '_design\uffff' }), - ]); - - const tracks = [...firstResponse.rows, ...secondResponse.rows] - .map((record) => record.doc) - .filter(Boolean); - - return tracks; - }, - - async insertMultiple(tracks: Track[]) { - return Tracks.bulkDocs(tracks); - }, - - async update(track: TrackModel) { - return Tracks.put(track); - }, - - async incrementPlayCount(track: TrackModel) { - const doc = await Tracks.get(track._id); - await Tracks.put({ - ...doc, - playCount: doc.playCount + 1, - }); - }, - - async remove(trackIDs: string[]): Promise { - const response = await Tracks.find({ - selector: { _id: { $in: trackIDs } }, - }); - const tracks = response.docs; - const deletedTracks = tracks.map((track) => ({ - ...track, - _deleted: true, - })); - - await Tracks.bulkDocs(deletedTracks); - }, - - async findByID(trackIDs: string[]): Promise { - const response = await Tracks.find({ - selector: { _id: { $in: trackIDs } }, - }); - return response.docs; - }, - - async findOnlyByID(trackID: string): Promise { - return Tracks.get(trackID); - }, - - async findByPath(paths: string[]): Promise { - const response = await Tracks.find({ selector: { path: { $in: paths } } }); - return response.docs; - }, - - async findOnlyByPath(path: string): Promise { - const response = await Tracks.find({ selector: { path } }); - const [track] = response.docs; - return track; - }, -}; - -/** ---------------------------------------------------------------------------- - * Playlists helpers - * -------------------------------------------------------------------------- */ - -const playlists = { - async getAll(): Promise { - // Use custom IDs instead? - const [firstResponse, secondResponse] = await Promise.all([ - Playlists.allDocs({ include_docs: true, endkey: '_design' }), - Playlists.allDocs({ include_docs: true, startkey: '_design\uffff' }), - ]); - - const playlists = [...firstResponse.rows, ...secondResponse.rows] - .map((record) => record.doc) - .filter(Boolean); - - return playlists; - }, - - async insert(playlist: Playlist) { - return Playlists.post(playlist); - }, - - async rename(playlistID: string, name: string) { - const playlist = await Playlists.get(playlistID); - Playlists.put({ - ...playlist, - name, - }); - }, - - async remove(playlistID: string) { - const playlist = await Playlists.get(playlistID); - - await Playlists.put({ - ...playlist, - _deleted: true, - }); - }, - - async findByID(playlistIDs: string[]): Promise { - const response = await Playlists.find({ - selector: { _id: { $in: playlistIDs } }, - }); - return response.docs; - }, - - async findOnlyByID(playlistID: string): Promise { - return Playlists.get(playlistID); - }, - - async setTracks(playlistID: string, tracksIDs: string[]) { - const playlist = await Playlists.get(playlistID); - - await Playlists.put({ - ...playlist, - tracks: tracksIDs, - }); - }, -}; - -/** ---------------------------------------------------------------------------- - * Export all the way! - * -------------------------------------------------------------------------- */ - -const db = { - reset, - tracks, - playlists, -}; - -export default db; diff --git a/src/preload/entrypoint.ts b/src/preload/entrypoint.ts deleted file mode 100644 index 2cb765b05..000000000 --- a/src/preload/entrypoint.ts +++ /dev/null @@ -1,150 +0,0 @@ -import os from 'os'; -import path from 'path'; - -import '@total-typescript/ts-reset'; -import { Menu, app } from '@electron/remote'; -import { IpcRendererEvent, contextBridge, ipcRenderer, shell } from 'electron'; - -import { Config, Track } from '../shared/types/museeks'; -import channels from '../shared/lib/ipc-channels'; -import { parseUri } from '../shared/lib/utils-uri'; - -import db from './db'; - -/** - * Ok, so what is there exactly? - * - * Preload is still very new to Museeks as I'm trying to upgrade Museeks to - * Electron's best practices, but basically: - * - * - We were using XActions in the past as an "API" - * - I am moving parts of those APIs here - * - Those APIs should at some point get rid of Node.js to enable contextbridge - * - Some of those APIs implementations may need to go to the main process instead - * - There's many things to refactor, some things will look weird as they are - * in an in-between state. - */ - -/* -|-------------------------------------------------------------------------- -| File association - make it work one day -|-------------------------------------------------------------------------- -*/ - -// TODO: only working on macOS, issue to follow: -// https://github.com/electron/electron/issues/27116 -// app.on('open-file', (event, path) => { -// event.preventDefault(); -// logger.info(path); // absolute path to file -// }); - -/* -|-------------------------------------------------------------------------- -| Config API: the config lives in the main process and we communicate with -| it via IPC -|-------------------------------------------------------------------------- -*/ - -const config = { - __initialConfig: ipcRenderer.sendSync(channels.CONFIG_GET_ALL), - getAll(): Promise { - return ipcRenderer.invoke(channels.CONFIG_GET_ALL); - }, - get(key: T): Promise { - return ipcRenderer.invoke(channels.CONFIG_GET, key); - }, - set(key: T, value: Config[T]): Promise { - return ipcRenderer.invoke(channels.CONFIG_SET, key, value); - }, -}; - -/* -|-------------------------------------------------------------------------- -| Window object extension -| TODO: some of these should go to the main process and be converted to use -| contextBridge.exposeToMainWorld + sandboxed renderer -|-------------------------------------------------------------------------- -*/ - -const ElectronAPI = { - ipcRenderer: { - // FIXME unsafe - // All these usage should probably go to the main process, or we should - // expose explicit APIs for what those usages are trying to solve - on: ( - channel: string, - listener: (event: IpcRendererEvent, value: unknown) => void, - ) => { - const listenerCount = ipcRenderer.listenerCount(channel); - if (listenerCount === 0) { - ipcRenderer.on(channel, listener); - } else { - // eslint-disable-next-line no-console - console.warn( - `Event "${channel}" already has ${listenerCount} listeners, aborting.`, - ); - } - }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - off: ( - channel: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _listener: (event: IpcRendererEvent, value: unknown) => void, - ) => { - // Because we function cannot be passed between preload / renderer, - // ipcRenderer.off does not work. Until we fix the FIXME unsafe above - ipcRenderer.removeAllListeners(channel); - // ipcRenderer.off(channel, listener); - }, - send: ipcRenderer.send, - sendSync: ipcRenderer.sendSync, - invoke: ipcRenderer.invoke, - }, - menu: { - showContextMenu: (template: Electron.MenuItemConstructorOptions[]) => { - const context = Menu.buildFromTemplate(template); - context.popup({}); - }, - }, -}; - -// When editing something here, please update museeks.d.ts to extend the -// window.MuseeksAPI global object. -const MuseeksAPI = { - platform: os.platform(), - version: app.getVersion(), - config, - app: { - ready: () => ipcRenderer.send(channels.APP_READY), - restart: () => ipcRenderer.send(channels.APP_RESTART), - clone: () => ipcRenderer.send(channels.APP_CLOSE), - }, - db, - library: { - showTrackInFolder: (track: Track) => shell.showItemInFolder(track.path), - parseUri, - }, - playlists: { - resolveM3u: async (path: string): Promise => - await ipcRenderer.invoke(channels.PLAYLISTS_RESOLVE_M3U, path), - }, - covers: { - getCoverAsBase64: (track: Track) => - ipcRenderer.invoke(channels.COVER_GET, track.path), - }, - // TODO: all of the things below should be removed - path: { - parse: path.parse, - resolve: path.resolve, - }, - shell: { - openExternal: shell.openExternal, - openUserDataDirectory: () => shell.openPath(app.getPath('userData')), - }, -}; - -contextBridge.exposeInMainWorld('ElectronAPI', ElectronAPI); -contextBridge.exposeInMainWorld('MuseeksAPI', MuseeksAPI); - -export type ElectronAPI = typeof ElectronAPI; -export type MuseeksAPI = typeof MuseeksAPI; diff --git a/src/preload/tsconfig.json b/src/preload/tsconfig.json deleted file mode 100644 index 32d3e25d0..000000000 --- a/src/preload/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "lib": ["ESNext", "DOM"] - }, - "include": ["../preload", "../shared"] -} diff --git a/src/renderer/components/Cover/Cover.tsx b/src/renderer/components/Cover/Cover.tsx deleted file mode 100644 index ce2d1f324..000000000 --- a/src/renderer/components/Cover/Cover.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { useEffect, useState } from 'react'; -import * as AspectRatio from '@radix-ui/react-aspect-ratio'; - -import { Track } from '../../../shared/types/museeks'; - -import styles from './Cover.module.css'; - -type Props = { - track: Track; -}; - -export default function Cover(props: Props) { - const [coverPath, setCoverPath] = useState(null); - - useEffect(() => { - const refreshCover = async () => { - const coverPath = await window.MuseeksAPI.covers.getCoverAsBase64( - props.track, - ); - setCoverPath(coverPath); - }; - - refreshCover(); - }, [props.track]); - - if (coverPath) { - const encodedCoverPath = encodeURI(coverPath) - .replace(/'/g, "\\'") - .replace(/"/g, '\\"'); - - return ( - - Album cover - - ); - } - - return ( - -
- {/** billion dollar problem: convert emoji to text, good luck 🎵 */} -
-
-
- ); -} diff --git a/src/renderer/components/DropzoneImport/DropzoneImport.tsx b/src/renderer/components/DropzoneImport/DropzoneImport.tsx deleted file mode 100644 index 9e5ba2292..000000000 --- a/src/renderer/components/DropzoneImport/DropzoneImport.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import styles from './DropzoneImport.module.css'; - -type Props = { - title: string; - subtitle: string; - shown: boolean; -}; - -export default function DropzoneImport(props: Props) { - return ( -
-
{props.title}
-
{props.subtitle}
-
- ); -} diff --git a/src/renderer/components/Header/Header.tsx b/src/renderer/components/Header/Header.tsx deleted file mode 100644 index 98613f661..000000000 --- a/src/renderer/components/Header/Header.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import Icon from 'react-fontawesome'; -import * as Popover from '@radix-ui/react-popover'; - -import Queue from '../Queue/Queue'; -import PlayingBar from '../PlayingBar/PlayingBar'; -import PlayerControls from '../PlayerControls/PlayerControls'; -import Search from '../Search/Search'; -import usePlayerStore from '../../stores/usePlayerStore'; - -import styles from './Header.module.css'; - -export default function Header() { - const queue = usePlayerStore((state) => state.queue); - const queueCursor = usePlayerStore((state) => state.queueCursor); - - return ( -
-
- -
-
- -
-
- - - - - - - - - - -
-
- -
-
- ); -} diff --git a/src/renderer/components/ProgressBar/ProgressBar.module.css b/src/renderer/components/ProgressBar/ProgressBar.module.css deleted file mode 100644 index 91d288a0f..000000000 --- a/src/renderer/components/ProgressBar/ProgressBar.module.css +++ /dev/null @@ -1,40 +0,0 @@ -.progress { - --progress-height: 6px; - - flex: 1; /* REMOVE */ - display: block; - height: var(--progress-height); - background-color: var(--progress-bg); - - &.animated { - .progressBar { - background-image: linear-gradient( - 45deg, - rgba(255 255 255 0.25) 25%, - transparent 25%, - transparent 50%, - rgba(255 255 255 0.25) 50%, - rgba(255 255 255 0.25) 75%, - transparent 75%, - transparent - ); - background-size: 10px 10px; - animation: progress-bar-animation 1s linear infinite; - } - } -} - -.progressBar { - height: var(--progress-height); - background-color: var(--main-color); -} - -@keyframes progress-bar-animation { - from { - background-position: 10px 0; - } - - to { - background-position: 0 0; - } -} diff --git a/src/renderer/constants/sort-orders.ts b/src/renderer/constants/sort-orders.ts deleted file mode 100644 index dab1ee881..000000000 --- a/src/renderer/constants/sort-orders.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { Track, SortOrder, SortBy, Path } from '../../shared/types/museeks'; - -// For perforances reasons, otherwise _.orderBy will perform weird check -// the is far more resource/time impactful -const parseArtist = (t: Track): string => t.loweredMetas.artist[0].toString(); -const parseGenre = (t: Track): string => t.loweredMetas.genre.toString(); - -type TrackKeys = Path; -type IterateeFunction = (track: Track) => string; -export type SortTuple = [ - Array, - Array<'asc' | 'desc'>, -]; - -// Declarations -const sortOrders: Record> = { - [SortBy.ARTIST]: { - [SortOrder.ASC]: [ - // Default - [parseArtist, 'year', 'loweredMetas.album', 'disk.no', 'track.no'], - ['asc'], - ], - [SortOrder.DSC]: [ - [parseArtist, 'year', 'loweredMetas.album', 'disk.no', 'track.no'], - ['desc'], - ], - }, - [SortBy.TITLE]: { - [SortOrder.ASC]: [ - [ - 'loweredMetas.title', - parseArtist, - 'year', - 'loweredMetas.album', - 'disk.no', - 'track.no', - ], - ['asc'], - ], - [SortOrder.DSC]: [ - [ - 'loweredMetas.title', - parseArtist, - 'year', - 'loweredMetas.album', - 'disk.no', - 'track.no', - ], - ['desc'], - ], - }, - [SortBy.DURATION]: { - [SortOrder.ASC]: [ - [ - 'duration', - parseArtist, - 'year', - 'loweredMetas.album', - 'disk.no', - 'track.no', - ], - ['asc'], - ], - [SortOrder.DSC]: [ - [ - 'duration', - parseArtist, - 'year', - 'loweredMetas.album', - 'disk.no', - 'track.no', - ], - ['desc'], - ], - }, - [SortBy.ALBUM]: { - [SortOrder.ASC]: [ - ['loweredMetas.album', parseArtist, 'year', 'disk.no', 'track.no'], - ['asc'], - ], - [SortOrder.DSC]: [ - ['loweredMetas.album', parseArtist, 'year', 'disk.no', 'track.no'], - ['desc'], - ], - }, - [SortBy.GENRE]: { - [SortOrder.ASC]: [ - [ - parseGenre, - parseArtist, - 'year', - 'loweredMetas.album', - 'disk.no', - 'track.no', - ], - ['asc'], - ], - [SortOrder.DSC]: [ - [ - parseGenre, - parseArtist, - 'year', - 'loweredMetas.album', - 'disk.no', - 'track.no', - ], - ['desc'], - ], - }, -}; - -export default sortOrders; diff --git a/src/renderer/hooks/useCurrentViewTracks.ts b/src/renderer/hooks/useCurrentViewTracks.ts deleted file mode 100644 index 7828390de..000000000 --- a/src/renderer/hooks/useCurrentViewTracks.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { useRouteLoaderData } from 'react-router-dom'; -import { useMemo } from 'react'; - -import { TrackModel } from '../../shared/types/museeks'; -import { RootLoaderData } from '../views/Root'; -import { PlaylistLoaderData } from '../views/ViewPlaylistDetails'; - -import useFilteredTracks from './useFilteredTracks'; - -type Maybe = T | undefined; - -/** - * Hook that returns the current view tracks (library or playlist) - */ -export default function useCurrentViewTracks(): TrackModel[] { - // TODO: how to support Settings page? Should we? - const rootData = useRouteLoaderData('root') as Maybe; - const filteredLibraryTracks = useFilteredTracks( - (rootData && rootData.tracks) ?? [], - ); - const playlistData = useRouteLoaderData( - 'playlist-details', - ) as Maybe; - - const tracks = useMemo(() => { - if (playlistData) { - return playlistData.playlistTracks; - } - - if (rootData) { - return filteredLibraryTracks; - } - - return []; - }, [filteredLibraryTracks, rootData, playlistData]); - - return tracks; -} diff --git a/src/renderer/hooks/useFilteredTracks.ts b/src/renderer/hooks/useFilteredTracks.ts deleted file mode 100644 index 2d62360c5..000000000 --- a/src/renderer/hooks/useFilteredTracks.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { useMemo } from 'react'; - -import { TrackModel } from '../../shared/types/museeks'; -import { filterTracks, sortTracks } from '../lib/utils-library'; -import SORT_ORDERS from '../constants/sort-orders'; -import useLibraryStore from '../stores/useLibraryStore'; - -export default function useFilteredTracks(tracks: TrackModel[]): TrackModel[] { - const search = useLibraryStore((state) => state.search); - const sort = useLibraryStore((state) => state.sort); - - // Filter and sort TracksList - // sorting being a costly operation, do it after filtering - const filteredTracks = useMemo( - () => - sortTracks( - filterTracks(tracks, search), - SORT_ORDERS[sort.by][sort.order], - ), - [tracks, search, sort], - ); - - return filteredTracks; -} diff --git a/src/renderer/index.html b/src/renderer/index.html deleted file mode 100644 index 988682f2b..000000000 --- a/src/renderer/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Museeks - - - - -
- -
- - diff --git a/src/renderer/lib/dnd-types.ts b/src/renderer/lib/dnd-types.ts deleted file mode 100644 index 825129303..000000000 --- a/src/renderer/lib/dnd-types.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| The different kind of drag-and-drops, used to prevent conflicts between -| different drag-and-drops -|-------------------------------------------------------------------------- -*/ - -export const DND_TYPES = { - QUEUE_REORDER: 'QUEUE_REORDER', - PLAYLIST_REORDER: 'PLAYLIST_REORDER', -}; diff --git a/src/renderer/lib/icons.ts b/src/renderer/lib/icons.ts deleted file mode 100644 index 718b1c3c5..000000000 --- a/src/renderer/lib/icons.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable import/no-unresolved */ - -import NEXT from '../../shared/assets/icons/player-next.svg?raw'; -import PAUSE from '../../shared/assets/icons/player-pause.svg?raw'; -import PLAY from '../../shared/assets/icons/player-play.svg?raw'; -import PREVIOUS from '../../shared/assets/icons/player-previous.svg?raw'; -import QUEUE from '../../shared/assets/icons/player-queue.svg?raw'; -import REPEAT_ONE from '../../shared/assets/icons/player-repeat-one.svg?raw'; -import REPEAT from '../../shared/assets/icons/player-repeat.svg?raw'; -import SHUFFLE from '../../shared/assets/icons/player-shuffle.svg?raw'; - -const icons = { - NEXT, - PAUSE, - PLAY, - PREVIOUS, - QUEUE, - REPEAT_ONE, - REPEAT, - SHUFFLE, -}; - -export default icons; diff --git a/src/renderer/lib/utils-library.ts b/src/renderer/lib/utils-library.ts deleted file mode 100644 index 01922587a..000000000 --- a/src/renderer/lib/utils-library.ts +++ /dev/null @@ -1,46 +0,0 @@ -import orderBy from 'lodash/orderBy'; - -import { TrackModel } from '../../shared/types/museeks'; -import { SortTuple } from '../constants/sort-orders'; - -import * as utils from './utils'; - -/** - * Filter an array of tracks by string - */ -export const filterTracks = ( - tracks: TrackModel[], - search: string, -): TrackModel[] => { - // Avoid performing useless searches - if (search.length === 0) return tracks; - - return tracks.filter( - (track) => - track.loweredMetas.artist.toString().includes(search) || - track.loweredMetas.album.includes(search) || - track.loweredMetas.genre.toString().includes(search) || - track.loweredMetas.title.includes(search), - ); -}; - -/** - * Sort an array of tracks (alias to lodash.orderby) - */ -export const sortTracks = ( - tracks: TrackModel[], - sort: SortTuple, -): TrackModel[] => { - const [columns, order] = sort; - return orderBy(tracks, columns, order); -}; - -/** - * Format a list of tracks to a nice status - */ -export const getStatus = (tracks: TrackModel[]): string => { - const status = utils.parseDuration( - tracks.map((d) => d.duration).reduce((a, b) => a + b, 0), - ); - return `${tracks.length} tracks, ${status}`; -}; diff --git a/src/renderer/lib/utils.ts b/src/renderer/lib/utils.ts deleted file mode 100644 index 9d506caef..000000000 --- a/src/renderer/lib/utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Parse an int to a more readable string - */ -export const parseDuration = (duration: number | null): string => { - if (duration !== null) { - const hours = Math.trunc(duration / 3600); - const minutes = Math.trunc(duration / 60) % 60; - const seconds = Math.trunc(duration) % 60; - - const hoursStringified = hours < 10 ? `0${hours}` : hours; - const minutesStringified = minutes < 10 ? `0${minutes}` : minutes; - const secondsStringified = seconds < 10 ? `0${seconds}` : seconds; - - let result = hours > 0 ? `${hoursStringified}:` : ''; - result += `${minutesStringified}:${secondsStringified}`; - - return result; - } - - return '00:00'; -}; - -/** - * Remove duplicates (realpath) and useless children folders - */ -export const removeUselessFolders = (folders: string[]): string[] => { - // Remove duplicates - let filteredFolders = folders.filter( - (elem, index) => folders.indexOf(elem) === index, - ); - - const foldersToBeRemoved: string[] = []; - - filteredFolders.forEach((folder, i) => { - filteredFolders.forEach((subfolder, j) => { - if ( - subfolder.includes(folder) && - i !== j && - !foldersToBeRemoved.includes(folder) - ) { - foldersToBeRemoved.push(subfolder); - } - }); - }); - - filteredFolders = filteredFolders.filter( - (elem) => !foldersToBeRemoved.includes(elem), - ); - - return filteredFolders; -}; - -// export const getAudioDuration = (trackPath: string): Promise => { -// const audio = new Audio(); - -// return new Promise((resolve, reject) => { -// audio.addEventListener('loadedmetadata', () => { -// resolve(audio.duration); -// }); - -// audio.addEventListener('error', (e) => { -// // eslint-disable-next-line -// // @ts-ignore error event typing is wrong -// const message = `Error getting audio duration: (${e.currentTarget.error.code}) ${trackPath}`; -// reject(new Error(message)); -// }); - -// audio.preload = 'metadata'; -// // HACK no idea what other caracters could fuck things up -// audio.src = encodeURI(trackPath).replace('#', '%23'); -// }); -// }; diff --git a/src/renderer/stores/AppAPI.ts b/src/renderer/stores/AppAPI.ts deleted file mode 100644 index f18f89858..000000000 --- a/src/renderer/stores/AppAPI.ts +++ /dev/null @@ -1,15 +0,0 @@ -import SettingsAPI from './SettingsAPI'; - -const init = async (): Promise => { - await SettingsAPI.check(); - - // Tell the main process to show the window - window.MuseeksAPI.app.ready(); -}; - -// Should we use something else to harmonize between zustand and non-store APIs? -const AppAPI = { - init, -}; - -export default AppAPI; diff --git a/src/renderer/stores/useLibraryStore.ts b/src/renderer/stores/useLibraryStore.ts deleted file mode 100644 index 76675f0bd..000000000 --- a/src/renderer/stores/useLibraryStore.ts +++ /dev/null @@ -1,345 +0,0 @@ -import chunk from 'lodash/chunk'; -import type { MessageBoxReturnValue } from 'electron'; - -import { - LibrarySort, - SortBy, - SortOrder, - Track, - TrackEditableFields, - TrackModel, -} from '../../shared/types/museeks'; -import logger from '../../shared/lib/logger'; -import router from '../views/router'; -import channels from '../../shared/lib/ipc-channels'; -import { getLoweredMeta, stripAccents } from '../../shared/lib/utils-id3'; - -import PlaylistsAPI from './PlaylistsAPI'; -import { createStore } from './store-helpers'; -import useToastsStore from './useToastsStore'; -import usePlayerStore from './usePlayerStore'; - -const { path, db, config } = window.MuseeksAPI; -const { ipcRenderer } = window.ElectronAPI; - -type LibraryState = { - search: string; - sort: LibrarySort; - refreshing: boolean; - refresh: { - processed: number; - total: number; - }; - highlightPlayingTrack: boolean; - api: { - search: (value: string) => void; - sort: (sortBy: SortBy) => void; - scanPlaylists: (paths: string[]) => Promise; - add: (pathsToScan: string[]) => Promise; - remove: (tracksIDs: string[]) => Promise; - reset: () => Promise; - incrementPlayCount: (track: TrackModel) => Promise; - updateTrackMetadata: ( - trackID: string, - newFields: TrackEditableFields, - ) => Promise; - highlightPlayingTrack: (highlight: boolean) => void; - }; -}; - -const useLibraryStore = createStore((set, get) => ({ - search: '', - sort: config.__initialConfig['librarySort'], - refreshing: false, - refresh: { - processed: 0, - total: 0, - }, - highlightPlayingTrack: false, // hacky, fixme - - api: { - /** - * Filter tracks by search - */ - search: (search): void => { - set({ search: stripAccents(search) }); - }, - - /** - * Filter tracks by sort query - */ - sort: async (sortBy): Promise => { - const prevSort = get().sort; - - let sort: LibrarySort | null = null; - - // If same sort by, just reverse the order - if (sortBy === prevSort.by) { - sort = { - ...prevSort, - order: - prevSort.order === SortOrder.ASC ? SortOrder.DSC : SortOrder.ASC, - }; - } - // If it's different, then we assume the user needs ASC order by default - else { - sort = { - by: sortBy, - order: SortOrder.ASC, - }; - } - - await config.set('librarySort', sort); - - set({ sort }); - }, - - /** - * Scan a directory for playlists and import them - * TODO: probaly move to "main"? - */ - scanPlaylists: async (paths) => { - await Promise.all( - paths.map(async (filePath) => { - try { - const playlistFiles = - await window.MuseeksAPI.playlists.resolveM3u(filePath); - const playlistName = path.parse(filePath).name; - - const existingTracks: TrackModel[] = - await db.tracks.findByPath(playlistFiles); - - await PlaylistsAPI.create( - playlistName, - existingTracks.map((track) => track._id), - filePath, - ); - } catch (err) { - logger.warn(err); - } - }), - ); - }, - - /** - * Add tracks to Library - */ - add: async (pathsToScan): Promise => { - set({ refreshing: true }); - - try { - // Get all valid track paths - // TODO move this whole function to main process - const [supportedTrackFiles, supportedPlaylistsFiles] = - await ipcRenderer.invoke(channels.LIBRARY_LOOKUP, pathsToScan); - - if ( - supportedTrackFiles.length === 0 && - supportedPlaylistsFiles.length === 0 - ) { - set({ - refreshing: false, - refresh: { processed: 0, total: 0 }, - }); - return; - } - - // 5. Import the music tracks found the directories - const tracks: Track[] = await ipcRenderer.invoke( - channels.LIBRARY_IMPORT_TRACKS, - supportedTrackFiles, - ); - - const batchSize = 100; - const chunkedTracks = chunk(tracks, batchSize); - let processed = 0; - - await Promise.allSettled( - chunkedTracks.map(async (chunk) => { - // First, let's see if some of those files are already inserted - const insertedChunk = await db.tracks.insertMultiple(chunk); - - processed += batchSize; - - // Progress bar update - set({ - refresh: { - processed, - total: tracks.length, - }, - }); - - return insertedChunk; - }), - ); - - // TODO: do not re-import existing tracks - - // Import playlists found in the directories - await get().api.scanPlaylists(supportedPlaylistsFiles); - - router.revalidate(); - return; - } catch (err) { - useToastsStore - .getState() - .api.add('danger', 'An error occured when scanning the library'); - logger.warn(err); - return; - } finally { - set({ - refreshing: false, - refresh: { processed: 0, total: 0 }, - }); - } - }, - - /** - * remove tracks from library - */ - remove: async (tracksIDs) => { - // not calling await on it as it calls the synchonous message box - const options: Electron.MessageBoxOptions = { - buttons: ['Cancel', 'Remove'], - title: 'Remove tracks from library?', - message: `Are you sure you want to remove ${tracksIDs.length} element(s) from your library?`, - type: 'warning', - }; - - const result: MessageBoxReturnValue = await ipcRenderer.invoke( - channels.DIALOG_MESSAGE_BOX, - options, - ); - - if (result.response === 1) { - // button possition, here 'remove' - // Remove tracks from the Track collection - await db.tracks.remove(tracksIDs); - - router.revalidate(); - // That would be great to remove those ids from all the playlists, but it's not easy - // and should not cause strange behaviors, all PR for that would be really appreciated - // TODO: see if it's possible to remove the IDs from the selected state of TracksList as it "could" lead to strange behaviors - } - }, - - /** - * Reset the library - */ - reset: async (): Promise => { - usePlayerStore.getState().api.stop(); - try { - const options: Electron.MessageBoxOptions = { - buttons: ['Cancel', 'Reset'], - title: 'Reset library?', - message: - 'Are you sure you want to reset your library? All your tracks and playlists will be cleared.', - type: 'warning', - }; - - const result = await ipcRenderer.invoke( - channels.DIALOG_MESSAGE_BOX, - options, - ); - - if (result.response === 1) { - set({ refreshing: true }); - await db.reset(); - set({ refreshing: false }); - - router.revalidate(); - } - } catch (err) { - logger.error(err); - } - }, - - /** - * Update the play count attribute. - */ - incrementPlayCount: async (track: TrackModel): Promise => { - try { - await db.tracks.incrementPlayCount(track); - } catch (err) { - logger.warn(err); - } - }, - - /** - * Update the id3 attributes. - * IMPROVE ME: add support for writing metadata (hint: node-id3 does not work - * well). - * - * @param trackID The ID of the track to update - * @param newFields The fields to be updated and their new value - */ - updateTrackMetadata: async ( - trackID: string, - newFields: TrackEditableFields, - ): Promise => { - let track = await db.tracks.findOnlyByID(trackID); - - track = { - ...track, - ...newFields, - loweredMetas: getLoweredMeta(newFields), - }; - - if (!track) { - throw new Error('No track found while trying to update track metadata'); - } - - await db.tracks.update(track); - - router.revalidate(); - }, - - /** - * Set highlight trigger for a track - * FIXME: very hacky, and not great, should be done another way - */ - highlightPlayingTrack: (highlight: boolean): void => { - set({ highlightPlayingTrack: highlight }); - }, - }, - - // Old code used to manage folders to be scanned, to be re-enabled one day - // case (types.LIBRARY_ADD_FOLDERS): { // TODO Redux -> move to a thunk - // const { folders } = action.payload; - // let musicFolders = window.MuseeksAPI.config.get('musicFolders'); - - // // Check if we received folders - // if (folders !== undefined) { - // musicFolders = musicFolders.concat(folders); - - // // Remove duplicates, useless children, ect... - // musicFolders = utils.removeUselessFolders(musicFolders); - - // musicFolders.sort(); - - // config.set('musicFolders', musicFolders); - // } - - // return { ...state }; - // } - - // case (types.LIBRARY_REMOVE_FOLDER): { // TODO Redux -> move to a thunk - // if (!state.library.refreshing) { - // const musicFolders = window.MuseeksAPI.config.get('musicFolders'); - - // musicFolders.splice(action.index, 1); - - // config.set('musicFolders', musicFolders); - - // return { ...state }; - // } - - // return state; - // } -})); - -export default useLibraryStore; - -export function useLibraryAPI() { - return useLibraryStore((state) => state.api); -} diff --git a/src/renderer/tsconfig.json b/src/renderer/tsconfig.json deleted file mode 100644 index b81ef858e..000000000 --- a/src/renderer/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "jsx": "react-jsx", - "plugins": [{ "name": "typescript-plugin-css-modules" }] - }, - "include": ["../renderer", "../shared"] -} diff --git a/src/renderer/views/Root.tsx b/src/renderer/views/Root.tsx deleted file mode 100644 index 61332171d..000000000 --- a/src/renderer/views/Root.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { useEffect } from 'react'; -import { Outlet } from 'react-router-dom'; -import { useDrop } from 'react-dnd'; -import { NativeTypes } from 'react-dnd-html5-backend'; - -import logger from '../../shared/lib/logger'; -import Header from '../components/Header/Header'; -import Footer from '../components/Footer/Footer'; -import Toasts from '../components/Toasts/Toasts'; -import AppActions from '../stores/AppAPI'; -import DropzoneImport from '../components/DropzoneImport/DropzoneImport'; -import MediaSessionEvents from '../components/Events/MediaSessionEvents'; -import AppEvents from '../components/Events/AppEvents'; -import PlayerEvents from '../components/Events/PlayerEvents'; -import IPCPlayerEvents from '../components/Events/IPCPlayerEvents'; -import IPCNavigationEvents from '../components/Events/IPCNavigationEvents'; -import GlobalKeyBindings from '../components/Events/GlobalKeyBindings'; -import { useLibraryAPI } from '../stores/useLibraryStore'; - -import styles from './Root.module.css'; -import { LoaderData } from './router'; - -const { db } = window.MuseeksAPI; - -export default function ViewRoot() { - useEffect(() => { - AppActions.init(); - }, []); - - const libraryAPI = useLibraryAPI(); - - // Drop behavior to add tracks to the library from any string - const [{ isOver }, drop] = useDrop(() => { - return { - accept: [NativeTypes.FILE], - drop(item: { files: Array }) { - const files = item.files.map((file) => file.path); - - libraryAPI - .add(files) - .then((/* _importedTracks */) => { - // TODO: Import to playlist here - }) - .catch((err) => { - logger.warn(err); - }); - }, - collect: (monitor) => ({ - isOver: monitor.isOver(), - }), - }; - }); - - return ( -
- {/** Bunch of global event handlers */} - - - - - - - {/** The actual app */} -
-
- -
-
- - -
- ); -} - -export type RootLoaderData = LoaderData; - -ViewRoot.loader = async () => { - // this can be slow, think about caching it or something, especially when - // we revalidate routing - const tracks = await db.tracks.getAll(); - return { tracks }; -}; diff --git a/src/shared/lib/utils-id3.ts b/src/shared/lib/utils-id3.ts deleted file mode 100644 index b5dd869ca..000000000 --- a/src/shared/lib/utils-id3.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Track, TrackEditableFields } from '../types/museeks'; - -/** - * Strip accent from String. From https://jsperf.com/strip-accents - */ -export const stripAccents = (str: string): string => { - const accents = - 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž'; - const fixes = - 'AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz'; - const split = accents.split('').join('|'); - const reg = new RegExp(`(${split})`, 'g'); - - function replacement(a: string) { - return fixes[accents.indexOf(a)] || ''; - } - - return str.replace(reg, replacement).toLowerCase(); -}; - -/** - * Take a track a returns its lowered metadata (used for search) - */ -export const getLoweredMeta = ( - metadata: TrackEditableFields, -): Track['loweredMetas'] => ({ - artist: metadata.artist.map((meta) => stripAccents(meta.toLowerCase())), - album: stripAccents(metadata.album.toLowerCase()), - title: stripAccents(metadata.title.toLowerCase()), - genre: metadata.genre.map((meta) => stripAccents(meta.toLowerCase())), -}); diff --git a/src/shared/lib/utils-uri.ts b/src/shared/lib/utils-uri.ts deleted file mode 100644 index d9c226768..000000000 --- a/src/shared/lib/utils-uri.ts +++ /dev/null @@ -1,18 +0,0 @@ -import os from 'os'; -import path from 'path'; - -/** - * Parse an URI, encoding some characters - */ -export const parseUri = (uri: string): string => { - // path and os should not be used - const root = os.platform() === 'win32' ? '' : path.parse(uri).root; - - const location = path - .resolve(uri) - .split(path.sep) - .map((d, i) => (i === 0 ? d : encodeURIComponent(d))) - .reduce((a, b) => path.join(a, b)); - - return `file://${root}${location}`; -}; diff --git a/src/shared/types/declarations/preload.d.ts b/src/shared/types/declarations/preload.d.ts deleted file mode 100644 index 6ccf3b62a..000000000 --- a/src/shared/types/declarations/preload.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -// eslint-disable-next-line spaced-comment -/// - -import type { ElectronAPI, MuseeksAPI } from '../../../preload/entrypoint'; - -declare global { - interface Window { - MuseeksAPI: MuseeksAPI; - ElectronAPI: ElectronAPI; - } - - // Once context bridge is enabled: - // const MuseeksAPI: MuseeksAPI; -} - -export {}; diff --git a/src/shared/types/museeks.ts b/src/shared/types/museeks.ts deleted file mode 100644 index d790c842a..000000000 --- a/src/shared/types/museeks.ts +++ /dev/null @@ -1,161 +0,0 @@ -/** - * Player related stuff - */ -export enum PlayerStatus { - PLAY = 'play', - PAUSE = 'pause', - STOP = 'stop', -} - -export enum Repeat { - ALL = 'all', - ONE = 'one', - NONE = 'none', -} - -export enum SortBy { - ARTIST = 'artist', - ALBUM = 'album', - TITLE = 'title', - DURATION = 'duration', - GENRE = 'genre', -} - -export enum SortOrder { - ASC = 'asc', - DSC = 'dsc', -} - -/** - * App models - */ -export interface Track { - album: string; - artist: string[]; - disk: { - no: number; - of: number; - }; - duration: number; - genre: string[]; - loweredMetas: { - artist: string[]; - album: string; - title: string; - genre: string[]; - }; - path: string; - playCount: number; - title: string; - track: { - no: number; - of: number; - }; - year: number | null; -} - -export interface Playlist { - name: string; - tracks: string[]; - importPath?: string; // associated m3u file -} - -/** - * Database schemes - */ -export type TrackModel = PouchDB.Core.ExistingDocument< - Track & PouchDB.Core.AllDocsMeta ->; - -export type PlaylistModel = PouchDB.Core.ExistingDocument< - Playlist & PouchDB.Core.AllDocsMeta ->; - -/** - * Editable track fields (via right-click -> edit track) - */ -export type TrackEditableFields = Pick< - TrackModel, - 'title' | 'artist' | 'album' | 'genre' ->; - -/** - * Various - */ -export interface Toast { - id: string; - content: string; - type: ToastType; -} - -export type ToastType = 'success' | 'danger' | 'warning'; - -export interface LibrarySort { - by: SortBy; - order: SortOrder; -} - -/** - * Config - */ - -export interface ConfigBounds { - width: number; - height: number; - x: number; - y: number; -} - -// https://github.com/microsoft/TypeScript/issues/29729#issuecomment-460346421 -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type AnyThemeID = string & { whatever?: any }; -// TODO: how to automate this? Maybe losen types to "string" -type ThemeIDs = 'dark' | 'light' | AnyThemeID; - -export interface Config { - theme: ThemeIDs | '__system'; - audioVolume: number; - audioPlaybackRate: number; - audioOutputDevice: string; - audioMuted: boolean; - audioShuffle: boolean; - audioRepeat: Repeat; - tracksDensity: 'normal' | 'compact'; - defaultView: string; - librarySort: { - by: SortBy; - order: SortOrder; - }; - // musicFolders: string[], - sleepBlocker: boolean; - autoUpdateChecker: boolean; - displayNotifications: boolean; - bounds: ConfigBounds; -} - -/** - * Themes - */ - -export interface Theme { - _id: ThemeIDs; - name: string; - themeSource: Electron.NativeTheme['themeSource']; - variables: Record; -} - -/** - * Helpers - */ - -type StringableKey = T extends readonly unknown[] - ? number extends T['length'] - ? number - : `${number}` - : string | number; - -export type Path = T extends object - ? { - [P in keyof T & StringableKey]: `${P}` | `${P}.${Path}`; - }[keyof T & StringableKey] - : never; diff --git a/src/renderer/stores/PlaylistsAPI.ts b/src/stores/PlaylistsAPI.ts similarity index 57% rename from src/renderer/stores/PlaylistsAPI.ts rename to src/stores/PlaylistsAPI.ts index 74c7fbb5f..af1dd3353 100644 --- a/src/renderer/stores/PlaylistsAPI.ts +++ b/src/stores/PlaylistsAPI.ts @@ -1,28 +1,24 @@ -import { - Playlist, - TrackModel, - PlaylistModel, -} from '../../shared/types/museeks'; -import logger from '../../shared/lib/logger'; -import channels from '../../shared/lib/ipc-channels'; +import { Playlist, Track } from '../generated/typings'; +import logger from '../lib/logger'; +import channels from '../lib/ipc-channels'; import router from '../views/router'; +import library from '../lib/library'; +import { logAndNotifyError } from '../lib/utils'; +import { invalidate } from '../lib/query'; import useToastsStore from './useToastsStore'; import usePlayerStore from './usePlayerStore'; -const { db } = window.MuseeksAPI; -const { ipcRenderer } = window.ElectronAPI; - /** * Start playing playlist (on double click) */ const play = async (playlistID: string): Promise => { try { - const playlist: PlaylistModel = await db.playlists.findOnlyByID(playlistID); - const tracks: TrackModel[] = await db.tracks.findByID(playlist.tracks); + const playlist = await library.getPlaylist(playlistID); + const tracks = await library.getTracks(playlist.tracks); usePlayerStore.getState().api.start(tracks).catch(logger.warn); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } }; @@ -31,35 +27,20 @@ const play = async (playlistID: string): Promise => { */ const create = async ( name: string, - tracks: string[] = [], - importPath: string | false = false, + trackIDs: string[] = [], redirect = false, -): Promise => { +) => { try { - const playlist: Playlist = { - name, - tracks, - }; - - if (importPath) playlist.importPath = importPath; - - const doc = await db.playlists.insert(playlist); - router.revalidate(); + const playlist = await library.createPlaylist(name, trackIDs); + invalidate(); - if (redirect) router.navigate(`/playlists/${doc.id}`); + if (redirect) router.navigate(`/playlists/${playlist._id}`); else useToastsStore .getState() .api.add('success', `The playlist "${name}" was created`); - - return doc.id; } catch (err) { - logger.error(err); - useToastsStore - .getState() - .api.add('danger', `The playlist coult not be created.`); - - return null; + logAndNotifyError(err); } }; @@ -68,10 +49,10 @@ const create = async ( */ const rename = async (playlistID: string, name: string): Promise => { try { - await db.playlists.rename(playlistID, name); - router.revalidate(); + await library.renamePlaylist(playlistID, name); + invalidate(); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } }; @@ -80,11 +61,11 @@ const rename = async (playlistID: string, name: string): Promise => { */ const remove = async (playlistID: string): Promise => { try { - await db.playlists.remove(playlistID); + await library.deletePlaylist(playlistID); // FIX these when there is no more playlists - router.revalidate(); + invalidate(); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } }; @@ -102,24 +83,16 @@ const addTracks = async ( const toastsAPI = useToastsStore.getState().api; try { - const playlist = await db.playlists.findOnlyByID(playlistID); + const playlist = await library.getPlaylist(playlistID); const playlistTracks = playlist.tracks.concat(tracksIDs); - await db.playlists.setTracks(playlistID, playlistTracks); - router.revalidate(); + await library.setPlaylistTracks(playlistID, playlistTracks); + invalidate(); toastsAPI.add( 'success', `${tracksIDs.length} tracks were successfully added to "${playlist.name}"`, ); } catch (err) { - logger.warn(err); - if (err instanceof Error) { - toastsAPI.add('danger', err.message); - } else { - toastsAPI.add( - 'danger', - 'An unknown error happened while trying to add tracks.', - ); - } + logAndNotifyError(err); } }; @@ -131,14 +104,14 @@ const removeTracks = async ( tracksIDs: string[], ): Promise => { try { - const playlist = await db.playlists.findOnlyByID(playlistID); + const playlist = await library.getPlaylist(playlistID); const playlistTracks = playlist.tracks.filter( (elem: string) => !tracksIDs.includes(elem), ); - await db.playlists.setTracks(playlistID, playlistTracks); - router.revalidate(); + await library.setPlaylistTracks(playlistID, playlistTracks); + invalidate(); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } }; @@ -147,18 +120,11 @@ const removeTracks = async ( */ const duplicate = async (playlistID: string): Promise => { try { - const playlist = await db.playlists.findOnlyByID(playlistID); - const { tracks } = playlist; - - const newPlaylist: Playlist = { - name: `Copy of ${playlist.name}`, - tracks: tracks, - }; - - await db.playlists.insert(newPlaylist); - router.revalidate(); + const playlist = await library.getPlaylist(playlistID); + await library.createPlaylist(`Copy of ${playlist.name}`, playlist.tracks); + invalidate(); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } }; @@ -176,7 +142,7 @@ const reorderTracks = async ( if (tracksIDs.includes(targetTrackID)) return; try { - const playlist: Playlist = await db.playlists.findOnlyByID(playlistID); + const playlist: Playlist = await library.getPlaylist(playlistID); const newTracks = playlist.tracks.filter((id) => !tracksIDs.includes(id)); let targetIndex = newTracks.indexOf(targetTrackID); @@ -193,10 +159,10 @@ const reorderTracks = async ( newTracks.splice(targetIndex + 1, 0, ...tracksIDs); - await db.playlists.setTracks(playlistID, newTracks); - router.revalidate(); + await library.setPlaylistTracks(playlistID, newTracks); + invalidate(); } catch (err) { - logger.warn(err); + logAndNotifyError(err); } }; @@ -205,8 +171,8 @@ const reorderTracks = async ( * TODO: investigate why the playlist path are relative, and not absolute */ const exportToM3u = async (playlistID: string): Promise => { - const playlist: PlaylistModel = await db.playlists.findOnlyByID(playlistID); - const tracks: TrackModel[] = await db.tracks.findByID(playlist.tracks); + const playlist: Playlist = await library.getPlaylist(playlistID); + const tracks: Track[] = await library.getTracks(playlist.tracks); ipcRenderer.send( channels.PLAYLIST_EXPORT, diff --git a/src/renderer/stores/SettingsAPI.ts b/src/stores/SettingsAPI.ts similarity index 62% rename from src/renderer/stores/SettingsAPI.ts rename to src/stores/SettingsAPI.ts index 6614fd2ae..02b2a8616 100644 --- a/src/renderer/stores/SettingsAPI.ts +++ b/src/stores/SettingsAPI.ts @@ -1,26 +1,21 @@ import * as semver from 'semver'; +import { getVersion } from '@tauri-apps/api/app'; +import { getCurrent } from '@tauri-apps/api/window'; +import { invoke } from '@tauri-apps/api/core'; -import channels from '../../shared/lib/ipc-channels'; -import { Config, Theme } from '../../shared/types/museeks'; -import logger from '../../shared/lib/logger'; +import { Config, DefaultView } from '../generated/typings'; +import { Theme } from '../types/museeks'; +import { themes } from '../lib/themes'; +import config from '../lib/config'; import useToastsStore from './useToastsStore'; -const { ipcRenderer } = window.ElectronAPI; -const { config } = window.MuseeksAPI; - interface UpdateCheckOptions { silentFail?: boolean; } -const getTheme = async (): Promise => { - const themeID = await ipcRenderer.invoke(channels.THEME_GET_ID); - - return themeID; -}; - const setTheme = async (themeID: string): Promise => { - await ipcRenderer.invoke(channels.THEME_SET_ID, themeID); + await config.set('theme', themeID); // TODO: own plugin? await checkTheme(); }; @@ -29,30 +24,41 @@ const setTheme = async (themeID: string): Promise => { */ const applyThemeToUI = async (theme: Theme): Promise => { // TODO think about variables validity? - const root = document.documentElement; + // TODO: update the window theme dynamically + const root = document.documentElement; Object.entries(theme.variables).forEach(([property, value]) => { root.style.setProperty(property, value); }); }; const checkTheme = async (): Promise => { - const theme: Theme = await ipcRenderer.invoke(channels.THEME_GET); + // TODO: Tauri offers no API to query the system system preference,getCurrent().theme() + // that is used when a window is created with no assigned theme. + // So we are bypassing the user choice for now. + // const themeID: string = await config.get("theme"); + const themeID = (await getCurrent().theme()) ?? 'light'; + const theme = themes[themeID]; + + if (theme == null) { + throw new Error(`Theme ${themeID} not found`); + } + applyThemeToUI(theme); }; const setTracksDensity = async ( - density: Config['tracksDensity'], + density: Config['track_view_density'], ): Promise => { - await window.MuseeksAPI.config.set('tracksDensity', density); + await config.set('track_view_density', density); }; /** * Check and enable sleep blocker if needed */ const checkSleepBlocker = async (): Promise => { - if (await config.get('sleepBlocker')) { - ipcRenderer.send('settings:toggleSleepBlocker', true); + if (await config.get('sleepblocker')) { + invoke('plugin:sleepblocker|enable'); } }; @@ -62,7 +68,13 @@ const checkSleepBlocker = async (): Promise => { const checkForUpdate = async ( options: UpdateCheckOptions = {}, ): Promise => { - const currentVersion = window.MuseeksAPI.version; + const shouldCheck = await config.get('auto_update_checker'); + + if (!shouldCheck) { + return; + } + + const currentVersion = await getVersion(); try { const response = await fetch( @@ -101,48 +113,49 @@ const checkForUpdate = async ( * Init all settings */ const check = async (): Promise => { - await checkTheme(); - checkSleepBlocker(); - if (await config.get('autoUpdateChecker')) { - checkForUpdate({ silentFail: true }).catch((err) => { - logger.error(err); - }); - } + await Promise.allSettled([ + checkTheme(), + checkSleepBlocker(), + checkForUpdate({ silentFail: true }), + ]); }; /** * Toggle sleep blocker */ const toggleSleepBlocker = async (value: boolean): Promise => { - await config.set('sleepBlocker', value); - - ipcRenderer.send('settings:toggleSleepBlocker', value); + if (value == true) { + invoke('plugin:sleepblocker|enable'); + } else { + invoke('plugin:sleepblocker|disable'); + } }; /** * Set the default view of the app */ -const setDefaultView = async (value: string): Promise => { - await config.set('defaultView', value); +const setDefaultView = async (defaultView: DefaultView): Promise => { + await invoke('plugin:default-view|set', { + defaultView, + }); }; /** * Toggle update check on startup */ const toggleAutoUpdateChecker = async (value: boolean): Promise => { - await config.set('autoUpdateChecker', value); + await config.set('auto_update_checker', value); }; /** * Toggle native notifications display */ const toggleDisplayNotifications = async (value: boolean): Promise => { - await config.set('displayNotifications', value); + await config.set('notifications', value); }; // Should we use something else to harmonize between zustand and non-store APIs? const SettingsAPI = { - getTheme, setTheme, applyThemeToUI, setTracksDensity, diff --git a/src/renderer/stores/store-helpers.ts b/src/stores/store-helpers.ts similarity index 100% rename from src/renderer/stores/store-helpers.ts rename to src/stores/store-helpers.ts diff --git a/src/stores/useLibraryStore.ts b/src/stores/useLibraryStore.ts new file mode 100644 index 000000000..6a65bcdc5 --- /dev/null +++ b/src/stores/useLibraryStore.ts @@ -0,0 +1,257 @@ +import { ask, open } from '@tauri-apps/plugin-dialog'; + +import { SortBy, SortOrder, Track } from '../generated/typings'; +import config from '../lib/config'; +import library from '../lib/library'; +import { logAndNotifyError } from '../lib/utils'; +import { invalidate } from '../lib/query'; + +import { createStore } from './store-helpers'; +import usePlayerStore from './usePlayerStore'; +import useToastsStore from './useToastsStore'; + +type LibraryState = { + search: string; + sortBy: SortBy; + sortOrder: SortOrder; + refreshing: boolean; + refresh: { + current: number; + total: number; + }; + highlightPlayingTrack: boolean; + api: { + search: (value: string) => void; + sort: (sortBy: SortBy) => void; + add: () => Promise; + remove: (tracksIDs: string[]) => Promise; + reset: () => Promise; + setRefresh: (processed: number, total: number) => void; + updateTrackMetadata: ( + trackID: string, + fields: Pick, + ) => Promise; + highlightPlayingTrack: (highlight: boolean) => void; + }; +}; + +const useLibraryStore = createStore((set, get) => ({ + search: '', + sortBy: config.getInitial('library_sort_by'), + sortOrder: config.getInitial('library_sort_order'), + refreshing: false, + refresh: { + current: 0, + total: 0, + }, + highlightPlayingTrack: false, // hacky, fixme + + api: { + /** + * Filter tracks by search + */ + search: (search): void => { + set({ search }); + }, + + /** + * Filter tracks by sort query + */ + sort: async (sortBy): Promise => { + const prevSortBy = get().sortBy; + const prevSortOrder = get().sortOrder; + + let sortOrder: SortOrder; + + // If same sort by, just reverse the order + if (sortBy === prevSortBy) { + sortOrder = prevSortOrder === 'Asc' ? 'Dsc' : 'Asc'; + } + + // If it's different, then we assume the user needs ASC order by default + else { + sortOrder = 'Asc'; + } + + await config.set('library_sort_by', sortBy); + await config.set('library_sort_order', sortOrder); + + set({ sortBy, sortOrder }); + }, + + /** + * Add tracks to Library + */ + add: async (): Promise => { + try { + const result = await open({ + multiple: true, + directory: true, + }); + + if (result == null) { + return; + } + + set({ refreshing: true }); + await library.importTracks(result); + // TODO: re-implement progress + invalidate(); + return; + } catch (err) { + logAndNotifyError(err); + } finally { + set({ + refreshing: false, + refresh: { current: 0, total: 0 }, + }); + } + }, + + setRefresh: (current: number, total: number) => { + set({ + refresh: { + current, + total, + }, + }); + }, + + /** + * remove tracks from library + */ + remove: async (tracksIDs) => { + const confirmed = await ask( + `Are you sure you want to remove ${tracksIDs.length} element(s) from your library?`, + { + title: 'Remove tracks from library?', + kind: 'warning', + cancelLabel: 'Cancel', + okLabel: 'Remove', + }, + ); + + if (confirmed) { + // button possition, here 'remove' + // Remove tracks from the Track collection + await library.removeTracks(tracksIDs); + + invalidate(); + // That would be great to remove those ids from all the playlists, but it's not easy + // and should not cause strange behaviors, all PR for that would be really appreciated + // TODO: see if it's possible to remove the IDs from the selected state of TracksList as it "could" lead to strange behaviors + } + }, + + /** + * Reset the library + */ + reset: async (): Promise => { + usePlayerStore.getState().api.stop(); + try { + const confirmed = await ask( + 'All your tracks and playlists will be deleted from Museeks.', + { + title: 'Reset library?', + kind: 'warning', + cancelLabel: 'Cancel', + okLabel: 'Reset', + }, + ); + + if (confirmed) { + await library.reset(); + useToastsStore.getState().api.add('success', 'Library was reset'); + invalidate(); + } + } catch (err) { + logAndNotifyError(err); + } + }, + + /** + * Update the id3 attributes. + * IMPROVE ME: add support for writing metadata to disk (and not only update + * the DB). + * + * @param trackID The ID of the track to update + * @param newFields The fields to be updated and their new value + */ + updateTrackMetadata: async ( + trackID: string, + newFields: Pick, + ): Promise => { + try { + let [track] = await library.getTracks([trackID]); + + if (!track) { + throw new Error( + 'No track found while trying to update track metadata', + ); + } + + track = { + ...track, + ...newFields, + }; + + await library.updateTrack(track); + + invalidate(); + } catch (err) { + logAndNotifyError( + err, + 'Something wrong happened when updating the track', + ); + } + }, + + /** + * Set highlight trigger for a track + * FIXME: very hacky, and not great, should be done another way + */ + highlightPlayingTrack: (highlight: boolean): void => { + set({ highlightPlayingTrack: highlight }); + }, + }, + + // Old code used to manage folders to be scanned, to be re-enabled one day + // case (types.LIBRARY_ADD_FOLDERS): { // TODO Redux -> move to a thunk + // const { folders } = action.payload; + // let musicFolders = window.MuseeksAPI.config.get('musicFolders'); + + // // Check if we received folders + // if (folders !== undefined) { + // musicFolders = musicFolders.concat(folders); + + // // Remove duplicates, useless children, ect... + // musicFolders = utils.removeUselessFolders(musicFolders); + + // musicFolders.sort(); + + // config.set('musicFolders', musicFolders); + // } + + // return { ...state }; + // } + + // case (types.LIBRARY_REMOVE_FOLDER): { // TODO Redux -> move to a thunk + // if (!state.library.refreshing) { + // const musicFolders = window.MuseeksAPI.config.get('musicFolders'); + + // musicFolders.splice(action.index, 1); + + // config.set('musicFolders', musicFolders); + + // return { ...state }; + // } + + // return state; + // } +})); + +export default useLibraryStore; + +export function useLibraryAPI() { + return useLibraryStore((state) => state.api); +} diff --git a/src/renderer/stores/usePlayerStore.ts b/src/stores/usePlayerStore.ts similarity index 84% rename from src/renderer/stores/usePlayerStore.ts rename to src/stores/usePlayerStore.ts index b965515b8..0762efd71 100644 --- a/src/renderer/stores/usePlayerStore.ts +++ b/src/stores/usePlayerStore.ts @@ -2,26 +2,29 @@ import debounce from 'lodash/debounce'; import { StateCreator } from 'zustand'; import { persist } from 'zustand/middleware'; -import { PlayerStatus, Repeat, TrackModel } from '../../shared/types/museeks'; +import { PlayerStatus } from '../types/museeks'; import { shuffleTracks } from '../lib/utils-player'; -import logger from '../../shared/lib/logger'; +import logger from '../lib/logger'; import router from '../views/router'; import player from '../lib/player'; +import { Track, Repeat } from '../generated/typings'; +import config from '../lib/config'; +import library from '../lib/library'; +import { logAndNotifyError } from '../lib/utils'; import { createStore } from './store-helpers'; -import useToastsStore from './useToastsStore'; import useLibraryStore from './useLibraryStore'; type PlayerState = { - queue: TrackModel[]; - oldQueue: TrackModel[]; + queue: Track[]; + oldQueue: Track[]; queueCursor: number | null; queueOrigin: null | string; repeat: Repeat; shuffle: boolean; playerStatus: PlayerStatus; api: { - start: (queue: TrackModel[], _id?: string) => Promise; + start: (queue: Track[], id?: string) => Promise; play: () => Promise; pause: () => void; playPause: () => Promise; @@ -41,19 +44,17 @@ type PlayerState = { removeFromQueue: (index: number) => void; addInQueue: (tracksIDs: string[]) => Promise; addNextInQueue: (tracksIDs: string[]) => Promise; - setQueue: (tracks: TrackModel[]) => void; + setQueue: (tracks: Track[]) => void; }; }; -const { config } = window.MuseeksAPI; - const usePlayerStore = createPlayerStore((set, get) => ({ queue: [], // Tracks to be played oldQueue: [], // Queue backup (in case of shuffle) queueCursor: null, // The cursor of the queue queueOrigin: null, // URL of the queue when it was started - repeat: config.__initialConfig['audioRepeat'], // the current repeat state (one, all, none) - shuffle: config.__initialConfig['audioShuffle'], // If shuffle mode is enabled + repeat: config.getInitial('audio_repeat'), // the current repeat state (one, all, none) + shuffle: config.getInitial('audio_shuffle'), // If shuffle mode is enabled playerStatus: PlayerStatus.STOP, // Player status api: { @@ -62,6 +63,27 @@ const usePlayerStore = createPlayerStore((set, get) => ({ * TODO: this function ~could probably~ needs to be refactored ~a bit~ */ start: async (queue, _id): Promise => { + // TODO: implement start with no queue + // // If no queue is provided, we create it based on the screen the user is on + // if (!queue) { + // if (location.hash.startsWith('#/playlists')) { + // queue = library.tracks.playlist; + // queue = []; + // } else { + // // we are either on the library or the settings view + // // so let's play the whole library + // // Because the tracks in the store are not ordered, let's filter + // // and sort everything + // const { sort, search } = library; + // queue = library.tracks; + + // queue = sortTracks( + // filterTracks(newQueue, search), + // SORT_ORDERS[sort.by][sort.order], + // ); + // } + // } + if (queue.length === 0) return; const state = get(); @@ -90,7 +112,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ const track = newQueue[queuePosition]; player.setTrack(track); - await player.play(); + await player.play().catch(logAndNotifyError); let queueCursor = queuePosition; // Clean that variable mess later @@ -121,6 +143,8 @@ const usePlayerStore = createPlayerStore((set, get) => ({ * Play/resume audio */ play: async () => { + // TODO: if there is no queue / no audio set, get the data of the current view + // and start a queue with it await player.play(); set({ playerStatus: PlayerStatus.PLAY }); @@ -175,9 +199,9 @@ const usePlayerStore = createPlayerStore((set, get) => ({ let newQueueCursor; if (queueCursor !== null) { - if (repeat === Repeat.ONE) { + if (repeat === 'One') { newQueueCursor = queueCursor; - } else if (repeat === Repeat.ALL && queueCursor === queue.length - 1) { + } else if (repeat === 'All' && queueCursor === queue.length - 1) { // is last track newQueueCursor = 0; // start with new track } else { @@ -239,7 +263,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ toggleShuffle: async (shuffle) => { shuffle = shuffle ?? !get().shuffle; - await config.set('audioShuffle', shuffle); + await config.set('audio_shuffle', shuffle); const { queue, queueCursor, oldQueue } = get(); @@ -280,19 +304,19 @@ const usePlayerStore = createPlayerStore((set, get) => ({ // Get to the next repeat type if none is specified if (repeat == undefined) { switch (get().repeat) { - case Repeat.NONE: - repeat = Repeat.ALL; + case 'None': + repeat = 'All'; break; - case Repeat.ALL: - repeat = Repeat.ONE; + case 'All': + repeat = 'One'; break; - case Repeat.ONE: - repeat = Repeat.NONE; + case 'One': + repeat = 'None'; break; } } - await config.set('audioRepeat', repeat); + await config.set('audio_repeat', repeat); set({ repeat }); }, @@ -311,7 +335,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ if (muted) player.mute(); else player.unmute(); - await config.set('audioMuted', muted); + await config.set('audio_muted', muted); }, /** @@ -322,7 +346,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ // if in allowed range player.setPlaybackRate(value); - await config.set('audioPlaybackRate', value); + await config.set('audio_playback_rate', value); } }, @@ -333,15 +357,9 @@ const usePlayerStore = createPlayerStore((set, get) => ({ if (deviceID) { try { await player.setOutputDevice(deviceID); - await config.set('audioOutputDevice', deviceID); + await config.set('audio_output_device', deviceID); } catch (err) { - logger.warn(err); - useToastsStore - .getState() - .api.add( - 'danger', - 'An error occured when trying to switch to the new output device', - ); + logAndNotifyError(err); } } }, @@ -419,7 +437,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ */ addInQueue: async (tracksIDs) => { const { queue, queueCursor } = get(); - const tracks = await window.MuseeksAPI.db.tracks.findByID(tracksIDs); + const tracks = await library.getTracks(tracksIDs); const newQueue = [...queue, ...tracks]; set({ @@ -433,7 +451,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ * Add tracks at the beginning of the queue */ addNextInQueue: async (tracksIDs) => { - const tracks = await window.MuseeksAPI.db.tracks.findByID(tracksIDs); + const tracks = await library.getTracks(tracksIDs); const { queueCursor } = get(); const queue = [...get().queue]; @@ -454,7 +472,7 @@ const usePlayerStore = createPlayerStore((set, get) => ({ /** * Set the queue */ - setQueue: (tracks: TrackModel[]) => { + setQueue: (tracks: Track[]) => { set({ queue: tracks, }); @@ -508,8 +526,6 @@ function createPlayerStore(store: StateCreator) { ...(persistedState as Partial), // API should never be persisted api: currentState.api, - // Instantiated should never be true - instantiated: false, // If player status was playing, set it to pause, as it makes no sense // to auto-start playing a song when Museeks starts playerStatus: @@ -526,5 +542,5 @@ function createPlayerStore(store: StateCreator) { * Make sure we don't save audio volume to the file system too often */ const saveVolume = debounce(async (volume: number) => { - await config.set('audioVolume', volume); + await config.set('audio_volume', volume); }, 500); diff --git a/src/renderer/stores/useToastsStore.ts b/src/stores/useToastsStore.ts similarity index 81% rename from src/renderer/stores/useToastsStore.ts rename to src/stores/useToastsStore.ts index 42ff9d4a3..8ef326347 100644 --- a/src/renderer/stores/useToastsStore.ts +++ b/src/stores/useToastsStore.ts @@ -1,6 +1,6 @@ import { nanoid } from 'nanoid'; -import { Toast, ToastType } from '../../shared/types/museeks'; +import { Toast, ToastType } from '../types/museeks'; import { createStore } from './store-helpers'; @@ -18,7 +18,7 @@ const useToastsStore = createStore((set, get) => ({ api: { add: (type, content, duration = 3000) => { const id = nanoid(); - const toast: Toast = { id, type, content }; + const toast: Toast = { _id: id, type, content }; set((state) => ({ toasts: [...state.toasts, toast] })); @@ -29,7 +29,7 @@ const useToastsStore = createStore((set, get) => ({ remove: (id) => { set((state) => ({ - toasts: [...state.toasts].filter((t) => t.id !== id), + toasts: [...state.toasts].filter((t) => t._id !== id), })); }, }, diff --git a/src/renderer/styles/general.module.css b/src/styles/general.module.css similarity index 68% rename from src/renderer/styles/general.module.css rename to src/styles/general.module.css index 5745f882e..309357658 100644 --- a/src/renderer/styles/general.module.css +++ b/src/styles/general.module.css @@ -1,6 +1,8 @@ /* Colors (default theme) */ :root { --main-color: #459ce7; + --main-color-darker: #3a73a4; + --main-color-lighter: #63aff0; --link-color: #459ce7; --link-color-hover: #52afff; --bold: 600; @@ -41,8 +43,7 @@ a { &:hover, &:focus, - &:active, - &:visited { + &:active { color: var(--link-color-hover); } } @@ -63,3 +64,19 @@ strong { :global #wrap { height: 100vh; } + +/** + * Generic class that can be used on call-to-actions to show the interactibility + * of an element + */ +:global [data-museeks-action] { + transition: transform 0.1s ease-in-out; +} + +:global [data-museeks-action]:hover { + transform: scale(1.2); +} + +:global [data-museeks-action]:active { + transform: scale(1); +} diff --git a/src/renderer/styles/main.module.css b/src/styles/main.module.css similarity index 100% rename from src/renderer/styles/main.module.css rename to src/styles/main.module.css diff --git a/src/renderer/styles/utils.module.css b/src/styles/utils.module.css similarity index 100% rename from src/renderer/styles/utils.module.css rename to src/styles/utils.module.css diff --git a/src/shared/themes/dark.json b/src/themes/dark.json similarity index 100% rename from src/shared/themes/dark.json rename to src/themes/dark.json diff --git a/src/shared/themes/light.json b/src/themes/light.json similarity index 100% rename from src/shared/themes/light.json rename to src/themes/light.json diff --git a/src/shared/types/declarations/images.d.ts b/src/types/declarations/images.d.ts similarity index 100% rename from src/shared/types/declarations/images.d.ts rename to src/types/declarations/images.d.ts diff --git a/src/shared/types/declarations/level-js.d.ts b/src/types/declarations/level-js.d.ts similarity index 100% rename from src/shared/types/declarations/level-js.d.ts rename to src/types/declarations/level-js.d.ts diff --git a/src/shared/types/declarations/linvodb3.d.ts b/src/types/declarations/linvodb3.d.ts similarity index 100% rename from src/shared/types/declarations/linvodb3.d.ts rename to src/types/declarations/linvodb3.d.ts diff --git a/src/shared/types/declarations/react-fontawesome.d.ts b/src/types/declarations/react-fontawesome.d.ts similarity index 100% rename from src/shared/types/declarations/react-fontawesome.d.ts rename to src/types/declarations/react-fontawesome.d.ts diff --git a/src/shared/types/declarations/react-onclickout.d.ts b/src/types/declarations/react-onclickout.d.ts similarity index 100% rename from src/shared/types/declarations/react-onclickout.d.ts rename to src/types/declarations/react-onclickout.d.ts diff --git a/src/shared/types/declarations/react-simple-input.d.ts b/src/types/declarations/react-simple-input.d.ts similarity index 100% rename from src/shared/types/declarations/react-simple-input.d.ts rename to src/types/declarations/react-simple-input.d.ts diff --git a/src/shared/types/declarations/svg-inline-react.d.ts b/src/types/declarations/svg-inline-react.d.ts similarity index 100% rename from src/shared/types/declarations/svg-inline-react.d.ts rename to src/types/declarations/svg-inline-react.d.ts diff --git a/src/types/declarations/window.d.ts b/src/types/declarations/window.d.ts new file mode 100644 index 000000000..70166aa2d --- /dev/null +++ b/src/types/declarations/window.d.ts @@ -0,0 +1,20 @@ +// eslint-disable-next-line spaced-comment +/// + +import { OsType } from '@tauri-apps/plugin-os'; + +import { Config } from '../../generated/typings'; + +declare global { + /** + * Tauri's APIs to inspect platform-specific information is asynchronous, + * which is very inconvenient for small-synchronous utils, so we hack our way + * around by polluting the global namespace + */ + interface Window { + __MUSEEKS_PLATFORM: OsType; + __MUSEEKS_INITIAL_CONFIG: Config; + } +} + +export {}; diff --git a/src/types/museeks.ts b/src/types/museeks.ts new file mode 100644 index 000000000..ca274864b --- /dev/null +++ b/src/types/museeks.ts @@ -0,0 +1,61 @@ +import { Track } from '../generated/typings'; + +/** + * Player related stuff + */ +export enum PlayerStatus { + PLAY = 'play', + PAUSE = 'pause', + STOP = 'stop', +} + +/** + * Editable track fields (via right-click -> edit track) + */ +export type TrackEditableFields = Pick< + Track, + 'title' | 'artists' | 'album' | 'genres' +>; + +export type TrackSearchableFields = Pick< + Track, + 'title' | 'artists' | 'album' | 'genres' +>; + +/** + * Various + */ +export interface Toast { + _id: string; + content: string; + type: ToastType; +} + +export type ToastType = 'success' | 'danger' | 'warning'; + +/** + * Themes + */ + +export interface Theme { + _id: string; + name: string; + themeSource: 'light' | 'dark'; + variables: Record; +} + +/** + * Helpers + */ + +type StringableKey = T extends readonly unknown[] + ? number extends T['length'] + ? number + : `${number}` + : string | number; + +export type Path = T extends object + ? { + [P in keyof T & StringableKey]: `${P}` | `${P}.${Path}`; + }[keyof T & StringableKey] + : never; diff --git a/src/renderer/views/Root.module.css b/src/views/Root.module.css similarity index 100% rename from src/renderer/views/Root.module.css rename to src/views/Root.module.css diff --git a/src/views/Root.tsx b/src/views/Root.tsx new file mode 100644 index 000000000..2a90ab3b5 --- /dev/null +++ b/src/views/Root.tsx @@ -0,0 +1,61 @@ +// import { useEffect } from "react"; +import { Outlet } from 'react-router-dom'; +import { getCurrent } from '@tauri-apps/api/window'; +import { Suspense, useEffect } from 'react'; + +import Header from '../components/Header/Header'; +import Footer from '../components/Footer/Footer'; +import Toasts from '../components/Toasts/Toasts'; +import DropzoneImport from '../components/DropzoneImport/DropzoneImport'; +import MediaSessionEvents from '../components/Events/MediaSessionEvents'; +import AppEvents from '../components/Events/AppEvents'; +import PlayerEvents from '../components/Events/PlayerEvents'; +// import IPCPlayerEvents from "../components/Events/IPCPlayerEvents"; +// import IPCNavigationEvents from "../components/Events/IPCNavigationEvents"; +import GlobalKeyBindings from '../components/Events/GlobalKeyBindings'; +// import { useLibraryAPI } from "../stores/useLibraryStore"; +import SettingsAPI from '../stores/SettingsAPI'; +import IPCNavigationEvents from '../components/Events/IPCNavigationEvents'; +import LibraryEvents from '../components/Events/LibraryEvents'; + +import styles from './Root.module.css'; +import { LoaderData } from './router'; + +export default function ViewRoot() { + useEffect(() => { + SettingsAPI.check() + // Show the app once everything is loaded + .then(() => getCurrent()) + .then((window) => { + window.show(); + }); + }, []); + + return ( +
+ {/** Bunch of global event handlers */} + {/** TODO: */} + + {/* */} + + + + + + {/** The actual app */} +
+
+ +
+
+ + + + +
+ ); +} + +export type RootLoaderData = LoaderData; + +ViewRoot.loader = async () => null; diff --git a/src/renderer/views/ViewLibrary.module.css b/src/views/ViewLibrary.module.css similarity index 100% rename from src/renderer/views/ViewLibrary.module.css rename to src/views/ViewLibrary.module.css diff --git a/src/renderer/views/ViewLibrary.tsx b/src/views/ViewLibrary.tsx similarity index 60% rename from src/renderer/views/ViewLibrary.tsx rename to src/views/ViewLibrary.tsx index c117a90f7..e36945ebd 100644 --- a/src/renderer/views/ViewLibrary.tsx +++ b/src/views/ViewLibrary.tsx @@ -1,43 +1,63 @@ import { useMemo } from 'react'; -import { Link, useLoaderData, useRouteLoaderData } from 'react-router-dom'; +import { Link, useLoaderData } from 'react-router-dom'; +import { useQuery } from '@tanstack/react-query'; import * as ViewMessage from '../elements/ViewMessage/ViewMessage'; import TracksList from '../components/TracksList/TracksList'; import useLibraryStore from '../stores/useLibraryStore'; import usePlayingTrackID from '../hooks/usePlayingTrackID'; import useFilteredTracks from '../hooks/useFilteredTracks'; +import config from '../lib/config'; +import library from '../lib/library'; -import { RootLoaderData } from './Root'; import { LoaderData } from './router'; import appStyles from './Root.module.css'; import styles from './ViewLibrary.module.css'; -const { db, config } = window.MuseeksAPI; - export default function ViewLibrary() { const trackPlayingID = usePlayingTrackID(); const refreshing = useLibraryStore((state) => state.refreshing); const search = useLibraryStore((state) => state.search); const { playlists, tracksDensity } = useLoaderData() as LibraryLoaderData; - const { tracks } = useRouteLoaderData('root') as RootLoaderData; - const filteredTracks = useFilteredTracks(tracks); + + // Some queries when switching routes can be expensive-ish (like getting all tracks), + // while at the same time, the data will most of the time never change. + // Using stale-while-revalidate libraries help us (fake-)loading this page faster + const { data: tracks, isLoading } = useQuery({ + queryKey: ['tracks'], + queryFn: library.getAllTracks, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + }); + + const filteredTracks = useFilteredTracks(tracks ?? []); const getLibraryComponent = useMemo(() => { + // Refreshing library + if (isLoading) { + return ( + +

Loading library...

+
+ ); + } + + // Refreshing library + if (refreshing) { + return ( + +

Your library is being scanned =)

+ hold on... +
+ ); + } + // Empty library if (filteredTracks.length === 0 && search === '') { - if (refreshing) { - return ( - -

Your library is being scanned =)

- hold on... -
- ); - } - return ( -

Too bad, there is no music in your library =(

+

There is no music in your library :(

you can always just drop files and folders anywhere or{' '} @@ -74,6 +94,7 @@ export default function ViewLibrary() { playlists, trackPlayingID, tracksDensity, + isLoading, ]); return ( @@ -87,7 +108,9 @@ export type LibraryLoaderData = LoaderData; ViewLibrary.loader = async () => { return { - playlists: await db.playlists.getAll(), - tracksDensity: await config.get('tracksDensity'), + playlists: await library.getAllPlaylists(), + tracksDensity: (await config.get('track_view_density')) as + | 'compact' + | 'normal', }; }; diff --git a/src/renderer/views/ViewPlaylistDetails.tsx b/src/views/ViewPlaylistDetails.tsx similarity index 83% rename from src/renderer/views/ViewPlaylistDetails.tsx rename to src/views/ViewPlaylistDetails.tsx index e12b15252..01d14f4a3 100644 --- a/src/renderer/views/ViewPlaylistDetails.tsx +++ b/src/views/ViewPlaylistDetails.tsx @@ -2,6 +2,7 @@ import { useCallback, useMemo } from 'react'; import { Link, LoaderFunctionArgs, + redirect, useLoaderData, useParams, } from 'react-router-dom'; @@ -12,11 +13,11 @@ import PlaylistsAPI from '../stores/PlaylistsAPI'; import { filterTracks } from '../lib/utils-library'; import useLibraryStore from '../stores/useLibraryStore'; import usePlayingTrackID from '../hooks/usePlayingTrackID'; +import config from '../lib/config'; +import library from '../lib/library'; import { LoaderData } from './router'; -const { db, config } = window.MuseeksAPI; - export default function ViewPlaylistDetails() { const { playlists, playlistTracks, tracksDensity } = useLoaderData() as PlaylistLoaderData; @@ -104,12 +105,19 @@ ViewPlaylistDetails.loader = async ({ params }: LoaderFunctionArgs) => { throw new Error('Playlist ID is not defined'); } - const playlist = await db.playlists.findOnlyByID(params.playlistID); + try { + const playlist = await library.getPlaylist(params.playlistID); + return { + playlists: await library.getAllPlaylists(), + playlistTracks: await library.getTracks(playlist.tracks), + tracksDensity: await config.get('track_view_density'), + }; + } catch (err) { + // https://github.com/tauri-apps/tauri/issues/691 + if (err === '"Playlist not found"') { + return redirect('/playlists'); + } - return { - // TODO: can we re-use parent's data? - playlists: await db.playlists.getAll(), - playlistTracks: await db.tracks.findByID(playlist.tracks), - tracksDensity: await config.get('tracksDensity'), - }; + throw err; + } }; diff --git a/src/renderer/views/ViewPlaylists.module.css b/src/views/ViewPlaylists.module.css similarity index 100% rename from src/renderer/views/ViewPlaylists.module.css rename to src/views/ViewPlaylists.module.css diff --git a/src/renderer/views/ViewPlaylists.tsx b/src/views/ViewPlaylists.tsx similarity index 92% rename from src/renderer/views/ViewPlaylists.tsx rename to src/views/ViewPlaylists.tsx index c728f04d5..4074fd0a4 100644 --- a/src/renderer/views/ViewPlaylists.tsx +++ b/src/views/ViewPlaylists.tsx @@ -9,18 +9,17 @@ import { import PlaylistsNav from '../components/PlaylistsNav/PlaylistsNav'; import * as ViewMessage from '../elements/ViewMessage/ViewMessage'; import PlaylistsAPI from '../stores/PlaylistsAPI'; +import library from '../lib/library'; import { LoaderData } from './router'; import appStyles from './Root.module.css'; import styles from './ViewPlaylists.module.css'; -const { db } = window.MuseeksAPI; - export default function ViewPlaylists() { const { playlists } = useLoaderData() as PlaylistsLoaderData; const createPlaylist = useCallback(async () => { - await PlaylistsAPI.create('New playlist', [], false, true); + await PlaylistsAPI.create('New playlist', [], false); }, []); let playlistContent; @@ -51,7 +50,7 @@ export default function ViewPlaylists() { export type PlaylistsLoaderData = LoaderData; ViewPlaylists.loader = async ({ params }: LoaderFunctionArgs) => { - const playlists = await db.playlists.getAll(); + const playlists = await library.getAllPlaylists(); const [firstPlaylist] = playlists; const { playlistID } = params; diff --git a/src/renderer/views/ViewSettings.module.css b/src/views/ViewSettings.module.css similarity index 90% rename from src/renderer/views/ViewSettings.module.css rename to src/views/ViewSettings.module.css index 40889b59d..d42a6c714 100644 --- a/src/renderer/views/ViewSettings.module.css +++ b/src/views/ViewSettings.module.css @@ -2,6 +2,7 @@ display: flex; justify-content: center; padding-top: 50px; + scrollbar-gutter: stable; } .settings__nav { diff --git a/src/renderer/views/ViewSettings.tsx b/src/views/ViewSettings.tsx similarity index 82% rename from src/renderer/views/ViewSettings.tsx rename to src/views/ViewSettings.tsx index 06e6a326c..d444b9c30 100644 --- a/src/renderer/views/ViewSettings.tsx +++ b/src/views/ViewSettings.tsx @@ -1,6 +1,8 @@ import { Outlet, useMatch, Navigate } from 'react-router-dom'; +import { getTauriVersion, getVersion } from '@tauri-apps/api/app'; import * as Nav from '../elements/Nav/Nav'; +import config from '../lib/config'; import { LoaderData } from './router'; import appStyles from './Root.module.css'; @@ -32,9 +34,9 @@ export default function ViewSettingsView() { export type SettingsLoaderData = LoaderData; ViewSettingsView.loader = async () => { - const config = await window.MuseeksAPI.config.getAll(); - return { - config, + config: await config.getAll(), + version: await getVersion(), + tauriVersion: await getTauriVersion(), }; }; diff --git a/src/renderer/views/ViewSettingsAbout.tsx b/src/views/ViewSettingsAbout.tsx similarity index 69% rename from src/renderer/views/ViewSettingsAbout.tsx rename to src/views/ViewSettingsAbout.tsx index 6a6771baa..c66feab59 100644 --- a/src/renderer/views/ViewSettingsAbout.tsx +++ b/src/views/ViewSettingsAbout.tsx @@ -1,11 +1,15 @@ +import { useLoaderData } from 'react-router-dom'; + import ExternalLink from '../elements/ExternalLink/ExternalLink'; import Heart from '../elements/Heart/Heart'; import * as Setting from '../components/Setting/Setting'; import SettingsAPI from '../stores/SettingsAPI'; import Button from '../elements/Button/Button'; +import { SettingsLoaderData } from './ViewSettings'; + export default function ViewSettingsAbout() { - const version = window.MuseeksAPI.version; + const { version, tauriVersion } = useLoaderData() as SettingsLoaderData; return (
@@ -20,7 +24,7 @@ export default function ViewSettingsAbout() { href={`https://github.com/martpie/museeks/releases/tag/${version}`} > release notes - + {' '}

+

Tauri {tauriVersion}

Contributors

@@ -54,26 +59,6 @@ export default function ViewSettingsAbout() { .

- -

Support me

-

- Maintaining Museeks includes some costs. All the work is done on - contributors' free time, but I still have recurring costs like - domain names and developer certificates. -

-

- If you appreciate my work, and if you can afford it, you can for - example show support by{' '} - - sponsoring me - {' '} - (or just{' '} - - buying me a beer - - ) on GitHub (🙌). -

-
); } diff --git a/src/renderer/views/ViewSettingsAudio.tsx b/src/views/ViewSettingsAudio.tsx similarity index 93% rename from src/renderer/views/ViewSettingsAudio.tsx rename to src/views/ViewSettingsAudio.tsx index e9da1c536..2ee877c2f 100644 --- a/src/renderer/views/ViewSettingsAudio.tsx +++ b/src/views/ViewSettingsAudio.tsx @@ -26,7 +26,7 @@ export default function ViewSettingsAudio() { diff --git a/src/renderer/views/ViewSettingsLibrary.tsx b/src/views/ViewSettingsLibrary.tsx similarity index 60% rename from src/renderer/views/ViewSettingsLibrary.tsx rename to src/views/ViewSettingsLibrary.tsx index 6bf247e18..7ed423aae 100644 --- a/src/renderer/views/ViewSettingsLibrary.tsx +++ b/src/views/ViewSettingsLibrary.tsx @@ -1,31 +1,11 @@ -import { useCallback } from 'react'; - import * as Setting from '../components/Setting/Setting'; import Button from '../elements/Button/Button'; -import channels from '../../shared/lib/ipc-channels'; -import logger from '../../shared/lib/logger'; import useLibraryStore, { useLibraryAPI } from '../stores/useLibraryStore'; -const { ipcRenderer } = window.ElectronAPI; - export default function ViewSettingsLibrary() { const libraryAPI = useLibraryAPI(); const isLibraryRefreshing = useLibraryStore((state) => state.refreshing); - const openFolderSelector = useCallback(async () => { - const options: Electron.OpenDialogOptions = { - properties: ['multiSelections', 'openDirectory', 'openFile'], - }; - - const result = await ipcRenderer.invoke(channels.DIALOG_OPEN, options); - - if (result.filePaths) { - libraryAPI.add(result.filePaths).catch((err) => { - logger.warn(err); - }); - } - }, [libraryAPI]); - return (
@@ -34,7 +14,7 @@ export default function ViewSettingsLibrary() { This will also scan for .m3u files and create corresponding playlists. - diff --git a/src/renderer/views/ViewSettingsUI.tsx b/src/views/ViewSettingsUI.tsx similarity index 80% rename from src/renderer/views/ViewSettingsUI.tsx rename to src/views/ViewSettingsUI.tsx index f9b3ec923..3d669b7cd 100644 --- a/src/renderer/views/ViewSettingsUI.tsx +++ b/src/views/ViewSettingsUI.tsx @@ -4,8 +4,8 @@ import { useLoaderData } from 'react-router-dom'; import SettingsAPI from '../stores/SettingsAPI'; import * as Setting from '../components/Setting/Setting'; import CheckboxSetting from '../components/SettingCheckbox/SettingCheckbox'; -import { themes } from '../../shared/lib/themes'; -import { Config } from '../../shared/types/museeks'; +import { themes } from '../lib/themes'; +import { Config, DefaultView } from '../generated/typings'; import { SettingsLoaderData } from './ViewSettings'; @@ -23,14 +23,14 @@ export default function ViewSettingsUI() { ChangeEventHandler >((e) => { SettingsAPI.setTracksDensity( - e.currentTarget.value as Config['tracksDensity'], + e.currentTarget.value as Config['track_view_density'], ); }, []); const onDefaultViewChange = useCallback< ChangeEventHandler >((e) => { - SettingsAPI.setDefaultView(e.currentTarget.value); + SettingsAPI.setDefaultView(e.currentTarget.value as DefaultView); }, []); return ( @@ -41,9 +41,10 @@ export default function ViewSettingsUI() { defaultValue={config.theme} onChange={onThemeChange} id="setting-theme" + disabled // Issue in Tauri where we cannot easily detect system-wide preferences > - {themes.map((theme) => { + {Object.values(themes).map((theme) => { return (

SEn@R?OXrXF~*QJE@Ocm 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