From 99c64c12ed8c324640592d44a6c342c605687114 Mon Sep 17 00:00:00 2001 From: Kcchouette Date: Mon, 10 Mar 2025 21:04:12 +0000 Subject: [PATCH 01/82] Update french translation --- frontend/src/i18n/fr.json | 79 +++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 32 deletions(-) diff --git a/frontend/src/i18n/fr.json b/frontend/src/i18n/fr.json index 30725641..17d98907 100644 --- a/frontend/src/i18n/fr.json +++ b/frontend/src/i18n/fr.json @@ -14,7 +14,7 @@ "file": "Fichier", "folder": "Dossier", "fullScreen": "Plein écran", - "hideDotfiles": "Masquer les dotfiles", + "hideDotfiles": "Masquer les fichiers cachés", "info": "Info", "more": "Plus", "move": "Déplacer", @@ -22,15 +22,16 @@ "new": "Nouveau", "next": "Suivant", "ok": "OK", - "permalink": "Obtenir un lien permanent", + "permalink": "Obtenir le lien permanent", "previous": "Précédent", + "preview": "Prévisualiser", "publish": "Publier", "rename": "Renommer", "replace": "Remplacer", - "reportIssue": "Rapport d'erreur", + "reportIssue": "Signaler un problème", "save": "Enregistrer", - "schedule": "Fixer la date", - "search": "Chercher", + "schedule": "Planifier", + "search": "Rechercher", "select": "Sélectionner", "selectMultiple": "Sélection multiple", "share": "Partager", @@ -40,18 +41,22 @@ "toggleSidebar": "Afficher/Masquer la barre latérale", "update": "Mettre à jour", "upload": "Importer", - "openFile": "Ouvrir le fichier" + "openFile": "Ouvrir le fichier", + "discardChanges": "Annuler" }, "download": { "downloadFile": "Télécharger le fichier", "downloadFolder": "Télécharger le dossier", - "downloadSelected": "Télécharger la selection" + "downloadSelected": "Télécharger la sélection" + }, + "upload": { + "abortUpload": "Êtes-vous sûr de vouloir annuler ?" }, "errors": { "forbidden": "Vous n'avez pas la permission d'accéder à cela.", "internal": "Aïe ! Quelque chose s'est mal passé.", "notFound": "Impossible d'accéder à cet emplacement.", - "connection": "Le serveur n'est pas accessible." + "connection": "Le serveur est injoignable." }, "files": { "body": "Corps", @@ -61,15 +66,15 @@ "home": "Accueil", "lastModified": "Dernière modification", "loading": "Chargement...", - "lonely": "Il semble qu'il n'y ait rien par ici...", - "metadata": "Metadonnées", + "lonely": "C'est un peu désert ici...", + "metadata": "Métadonnées", "multipleSelectionEnabled": "Sélection multiple activée", "name": "Nom", "size": "Taille", - "sortByLastModified": "Trier par date de dernière modification", + "sortByLastModified": "Trier par date de modification", "sortByName": "Trier par nom", "sortBySize": "Trier par taille", - "noPreview": "Il n'y a pas de prévisualisation pour ce fichier." + "noPreview": "L'aperçu n'est pas disponible pour ce fichier." }, "help": { "click": "Sélectionner un élément", @@ -105,6 +110,7 @@ "deleteMessageMultiple": "Êtes-vous sûr de vouloir supprimer ces {count} élément(s) ?", "deleteMessageSingle": "Êtes-vous sûr de vouloir supprimer cet élément ?", "deleteMessageShare": "Êtes-vous sûr de vouloir supprimer ce partage ({path}) ?", + "deleteUser": "Êtes-vous sûr de vouloir supprimer cet utilisateur ?", "deleteTitle": "Supprimer", "displayName": "Nom :", "download": "Télécharger", @@ -125,31 +131,33 @@ "rename": "Renommer", "renameMessage": "Nouveau nom pour", "replace": "Remplacer", - "replaceMessage": "Un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n", - "schedule": "Fixer la date", + "replaceMessage": "L'un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n", + "schedule": "Planifier", "scheduleMessage": "Choisissez une date pour planifier la publication de ce post", "show": "Montrer", "size": "Taille", "upload": "Importer", "uploadFiles": "Importation de {files} fichiers...", - "uploadMessage": "Séléctionnez une option d'import.", - "optionalPassword": "Mot de passe optionnel" + "uploadMessage": "Sélectionnez une option d'import.", + "optionalPassword": "Mot de passe optionnel", + "resolution": "Résolution", + "discardEditorChanges": "Êtes-vous sûr de vouloir annuler les modifications apportées ?" }, "search": { "images": "Images", "music": "Musique", "pdf": "PDF", - "pressToSearch": "Appuyez du entrée pour chercher...", + "pressToSearch": "Appuyez sur Entrée pour rechercher...", "search": "Recherche en cours...", - "typeToSearch": "Écrivez pour chercher...", + "typeToSearch": "Écrivez pour rechercher...", "types": "Types", - "video": "Video" + "video": "Vidéo" }, "settings": { "admin": "Admin", "administrator": "Administrateur", "allowCommands": "Exécuter des commandes", - "allowEdit": "Editer, renommer et supprimer des fichiers ou des dossiers", + "allowEdit": "Éditer, renommer et supprimer des fichiers ou des dossiers", "allowNew": "Créer de nouveaux fichiers et dossiers", "allowPublish": "Publier de nouveaux posts et pages", "allowSignup": "Autoriser les utilisateurs à s'inscrire", @@ -158,32 +166,39 @@ "brandingDirectoryPath": "Chemin du dossier d'image de marque", "brandingHelp": "Vous pouvez personnaliser l'apparence de votre instance de File Browser en changeant son nom, en remplaçant le logo, en ajoutant des styles personnalisés et même en désactivant les liens externes vers GitHub.\nPour plus d'informations sur la personnalisation de l'image de marque, veuillez consulter la {0}.", "changePassword": "Modifier le mot de passe", - "commandRunner": "Command runner", - "commandRunnerHelp": "Ici, vous pouvez définir les commandes qui sont exécutées pour les événements nommés précédemments. Vous devez en écrire une par ligne. Les variables d'environnement {0} et {1} seront disponibles, {0} étant relatif à {1}. Pour plus d'informations sur cette fonctionnalité et les variables d'environnement disponibles, veuillez lire la {2}.", + "commandRunner": "Exécuteur de commandes", + "commandRunnerHelp": "Ici, vous pouvez définir les commandes qui seront exécutées lors des événements nommés précédemments. Vous devez en écrire une par ligne. Les variables d'environnement {0} et {1} seront disponibles, {0} étant relatif à {1}. Pour plus d'informations sur cette fonctionnalité et les variables d'environnement disponibles, veuillez lire la {2}.", "commandsUpdated": "Commandes mises à jour !", "createUserDir": "Créer automatiquement un dossier pour l'utilisateur", + "tusUploads": "Uploads segmentés", + "tusUploadsHelp": "File Browser prend en charge les uploads segmentés afin de permettre une gestion efficace, fiable et reprenable sur des réseaux instables.", + "tusUploadsChunkSize": "Taille maximale autorisée par segment (les uploads directs seront utilisés pour les fichiers plus petits). Vous pouvez entrer un entier en octets ou une chaîne telle que 10MB, 1GB, etc.", + "tusUploadsRetryCount": "Nombre de tentatives en cas d'échec d'un segment.", + "userHomeBasePath": "Chemin de base pour les répertoires personnels des utilisateurs", + "userScopeGenerationPlaceholder": "Le périmètre sera généré automatiquement", + "createUserHomeDirectory": "Créer le répertoire personnel de l'utilisateur", "customStylesheet": "Feuille de style personnalisée", "defaultUserDescription": "Paramètres par défaut pour les nouveaux utilisateurs.", "disableExternalLinks": "Désactiver les liens externes (sauf la documentation)", - "disableUsedDiskPercentage": "Disable used disk percentage graph", + "disableUsedDiskPercentage": "Désactiver le graphique de pourcentage d'utilisation du disque", "documentation": "documentation", "examples": "Exemples", "executeOnShell": "Exécuter dans le shell", "executeOnShellDescription": "Par défaut, File Browser exécute les commandes en appelant directement leurs binaires. Si vous voulez les exécuter sur un shell à la place (comme Bash ou PowerShell), vous pouvez le définir ici avec les arguments et les drapeaux requis. S'il est défini, la commande que vous exécutez sera ajoutée en tant qu'argument. Cela s'applique à la fois aux commandes utilisateur et aux crochets d'événements.", "globalRules": "Il s'agit d'un ensemble global de règles d'autorisation et d'interdiction. Elles s'appliquent à tous les utilisateurs. Vous pouvez définir des règles spécifiques sur les paramètres de chaque utilisateur pour remplacer celles-ci.", - "globalSettings": "Paramètres généraux", + "globalSettings": "Paramètres globaux", "hideDotfiles": "Cacher les fichiers de configuration utilisateur (dotfiles)", - "insertPath": "Insérez le chemin", - "insertRegex": "Insérez l'expression régulière", + "insertPath": "Insérer le chemin", + "insertRegex": "Insérer une expression régulière", "instanceName": "Nom de l'instance", "language": "Langue", "lockPassword": "Empêcher l'utilisateur de changer son mot de passe", "newPassword": "Votre nouveau mot de passe", "newPasswordConfirm": "Confirmation du nouveau mot de passe", - "newUser": "Nouvel Utilisateur", + "newUser": "Nouvel utilisateur", "password": "Mot de passe", "passwordUpdated": "Mot de passe mis à jour !", - "path": "", + "path": "Chemin", "perm": { "create": "Créer des fichiers et des dossiers", "delete": "Supprimer des fichiers et des dossiers", @@ -209,14 +224,14 @@ "singleClick": "Utiliser un simple clic pour ouvrir les fichiers et les dossiers", "themes": { "dark": "Sombre", - "light": "Lumineux", + "light": "Clair", "title": "Thème" }, "user": "Utilisateur", "userCommands": "Commandes", - "userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :", + "userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :\n", "userCreated": "Utilisateur créé !", - "userDefaults": "User default settings", + "userDefaults": "Paramètres par défaut de l'utilisateur", "userDeleted": "Utilisateur supprimé !", "userManagement": "Gestion des utilisateurs", "userUpdated": "Utilisateur mis à jour !", @@ -237,7 +252,7 @@ "siteSettings": "Paramètres du site" }, "success": { - "linkCopied": "Lien copié!" + "linkCopied": "Lien copié !" }, "time": { "days": "Jours", From 495e731ee7e21a6d73f887c43d8b29c6e675d93b Mon Sep 17 00:00:00 2001 From: Matthaiks <3577122+Matthaiks@users.noreply.github.com> Date: Mon, 3 Mar 2025 20:54:49 +0100 Subject: [PATCH 02/82] Update Polish translation --- frontend/src/i18n/pl.json | 222 +++++++++++++++++++++----------------- 1 file changed, 126 insertions(+), 96 deletions(-) diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json index 9fcd4afa..0ddfbf56 100644 --- a/frontend/src/i18n/pl.json +++ b/frontend/src/i18n/pl.json @@ -3,133 +3,153 @@ "cancel": "Anuluj", "clear": "Wyczyść", "close": "Zamknij", + "continue": "Kontynuuj", "copy": "Kopiuj", "copyFile": "Kopiuj plik", - "copyToClipboard": "kopiuj do schowka", + "copyToClipboard": "Kopiuj do schowka", + "copyDownloadLinkToClipboard": "Kopiuj link pobierania do schowka", "create": "Utwórz", "delete": "Usuń", "download": "Pobierz", - "hideDotfiles": "", - "info": "Informacja", - "more": "Więce", + "file": "Plik", + "folder": "Folder", + "fullScreen": "Przełącz tryb pełnoekranowy", + "hideDotfiles": "Ukryj pliki poprzedzone kropką", + "info": "Informacje", + "more": "Więcej", "move": "Przenieś", "moveFile": "Przenieś plik", "new": "Nowy", "next": "Następny", "ok": "OK", - "permalink": "Uzyskaj link bezpośredni (permalink)", + "permalink": "Uzyskaj stały link", "previous": "Poprzedni", + "preview": "Podgląd", "publish": "Opublikuj", "rename": "Zmień nazwę", "replace": "Zamień", "reportIssue": "Zgłoś problem", "save": "Zapisz", - "schedule": "Grafik", + "schedule": "Harmonogram", "search": "Szukaj", "select": "Wybierz", - "selectMultiple": "Zaznacz wiele", + "selectMultiple": "Wybierz wiele", "share": "Udostępnij", - "shell": "Pokaż/ukryj powłokę", + "shell": "Przełącz powłokę", + "submit": "Prześlij", "switchView": "Zmień widok", - "toggleSidebar": "Pokaż/ukryj panel boczny", + "toggleSidebar": "Przełącz pasek boczny", "update": "Aktualizuj", - "upload": "Wgraj" + "upload": "Wyślij", + "openFile": "Otwórz plik", + "discardChanges": "Odrzuć" }, "download": { "downloadFile": "Pobierz plik", "downloadFolder": "Pobierz folder", - "downloadSelected": "Pobierz zaznaczone" + "downloadSelected": "Pobierz wybrane" + }, + "upload": { + "abortUpload": "Czy na pewno chcesz przerwać?" }, "errors": { - "forbidden": "Nie posiadasz uprawnień potrzebnych, by uzyskać do tego dostęp.", + "forbidden": "Nie masz zezwolenia na dostęp do tego.", "internal": "Pojawił się poważny problem.", - "notFound": "Ten adres nie jest poprawny." + "notFound": "Ta lokalizacja jest nieosiągalna.", + "connection": "Serwer jest nieosiągalny." }, "files": { - "body": "Body", - "closePreview": "Zamknij poprzednie", + "body": "Ciało", + "closePreview": "Zamknij podgląd", "files": "Pliki", "folders": "Foldery", - "home": "Katalog domowy", - "lastModified": "Ostatnio modyfikowane", + "home": "Główny", + "lastModified": "Ostatnio zmodyfikowano", "loading": "Ładowanie...", - "lonely": "Smutno gdy tak pusto...", + "lonely": "Smutno, gdy tak pusto...", "metadata": "Metadane", - "multipleSelectionEnabled": "Zaznaczenie wielu włączone", + "multipleSelectionEnabled": "Włączono wybór wielokrotny", "name": "Nazwa", "size": "Rozmiar", - "sortByLastModified": "Sortuj wg. daty modyfikacji", - "sortByName": "Sortuj wg. nazwy", - "sortBySize": "Sortuj wg. rozmiaru" + "sortByLastModified": "Sortuj wg ostatniej modyfikacji", + "sortByName": "Sortuj wg nazwy", + "sortBySize": "Sortuj wg rozmiaru", + "noPreview": "Podgląd tego pliku jest niedostępny." }, "help": { - "click": "wybierz plik lub foler", + "click": "wybierz plik lub folder", "ctrl": { "click": "wybierz wiele plików lub folderów", "f": "otwórz wyszukiwarkę", "s": "pobierz aktywny plik lub folder" }, - "del": "usuń zaznaczone", + "del": "usuń wybrane elementy", "doubleClick": "otwórz plik lub folder", - "esc": "wyczyść zaznaczenie i/lub zamknij okno z powiadomieniem", - "f1": "ta informacja", + "esc": "wyczyść wybór i/lub zamknij monit", + "f1": "te informacje", "f2": "zmień nazwę pliku", "help": "Pomoc" }, "login": { "createAnAccount": "Utwórz konto", - "loginInstead": "Takie konto już istnieje", + "loginInstead": "Mam już konto", "password": "Hasło", "passwordConfirm": "Potwierdzenie hasła", - "passwordsDontMatch": "Hasła różnią się", + "passwordsDontMatch": "Hasła nie pasują do siebie", "signup": "Rejestracja", - "submit": "Logowanie", + "submit": "Zaloguj", "username": "Nazwa użytkownika", - "usernameTaken": "Nazwa użytkownika już zajęta", + "usernameTaken": "Ta nazwa jest zajęta", "wrongCredentials": "Błędne dane logowania" }, "permanent": "Permanentny", "prompts": { "copy": "Kopiuj", - "copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki", - "currentlyNavigating": "Obecnie przeglądasz:", - "deleteMessageMultiple": "Czy jesteś pewien że chcesz usunąć {count} plik(ów)?", - "deleteMessageSingle": "Czy jesteś pewien, że chcesz usunąć ten plik/folder?", + "copyMessage": "Wybierz lokalizację docelową:", + "currentlyNavigating": "Aktualnie poruszasz się po:", + "deleteMessageMultiple": "Czy na pewno chcesz usunąć pliki: {count}?", + "deleteMessageSingle": "Czy na pewno chcesz usunąć ten plik/folder?", + "deleteMessageShare": "Czy na pewno chcesz usunąć ten udział ({path})?", + "deleteUser": "Czy na pewno chcesz usunąć tego użytkownika?", "deleteTitle": "Usuń pliki", - "displayName": "Wyświetlana Nazwa:", + "displayName": "Wyświetlana nazwa:", "download": "Pobierz pliki", - "downloadMessage": "Wybierz format, jaki chesz pobrać.", - "error": "Pojawił się nieznany błąd", - "fileInfo": "Informacje o pliku", - "filesSelected": "{count} plików zostało zaznaczonych.", - "lastModified": "Osatnio Zmodyfikowane", + "downloadMessage": "Wybierz format, w którym chcesz pobrać.", + "error": "Pojawił się jakiś błąd", + "fileInfo": "Informacje o​ pliku", + "filesSelected": "Wybrane pliki: {count}", + "lastModified": "Ostatnio zmodyfikowano", "move": "Przenieś", - "moveMessage": "Wybierz nową lokalizację dla swoich plik(ów)/folder(ów):", - "newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.", + "moveMessage": "Wybierz nową lokalizację dla swoich plików/folderów:", + "newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.", "newDir": "Nowy folder", - "newDirMessage": "Podaj nazwę tworzonego folderu.", + "newDirMessage": "Nazwij nowy folder.", "newFile": "Nowy plik", - "newFileMessage": "Podaj nazwętworzonego pliku.", - "numberDirs": "Ilość katalogów", - "numberFiles": "Ilość plików", + "newFileMessage": "Nazwij nowy plik.", + "numberDirs": "Liczba folderów", + "numberFiles": "Liczba plików", "rename": "Zmień nazwę", "renameMessage": "Podaj nową nazwę dla", "replace": "Zamień", - "replaceMessage": "Jednen z plików który próbujesz wrzucić próbje nadpisać plik o tej samej nazwie. Czy chcesz nadpisać poprzedni plik?\n", - "schedule": "Grafi", - "scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.", + "replaceMessage": "Jeden z przesyłanych plików chce nadpisać istniejący plik o tej samej nazwie. Chcesz pominąć ten plik i kontynuować przesyłanie reszty plików, czy nadpisać istniejący plik?\n", + "schedule": "Grafik", + "scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.", "show": "Pokaż", "size": "Rozmiar", - "upload": "Prześlij", - "uploadMessage": "Proszę wybrać metodę przesyłania" + "upload": "Wyślij", + "uploadFiles": "Wysyłam pliki: {files}...", + "uploadMessage": "Wybierz opcję przesyłania.", + "optionalPassword": "Opcjonalne hasło", + "resolution": "Rozdzielczość", + "discardEditorChanges": "Czy na pewno chcesz odrzucić wprowadzone zmiany?" }, "search": { - "images": "Zdjęcia", + "images": "Obrazy", "music": "Muzyka", "pdf": "PDF", - "pressToSearch": "Wciśnij enter, aby wyszukać...", + "pressToSearch": "Naciśnij Enter, aby wyszukać...", "search": "Szukaj...", - "typeToSearch": "Zacznij pisać, aby wyszukać...", + "typeToSearch": "Typ plików do wyszukania...", "types": "Typy", "video": "Wideo" }, @@ -137,70 +157,80 @@ "admin": "Admin", "administrator": "Administrator", "allowCommands": "Wykonaj polecenie", - "allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów", + "allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów", "allowNew": "Tworzenie nowych plików lub folderów", - "allowPublish": "Tworzenie nowych wpisów i stron", - "allowSignup": "Zezwól na rejestrację użytkowników", - "avoidChanges": "(pozostaw puste aby nie zosatało zmienione)", - "branding": "Branding", - "brandingDirectoryPath": "Folder brandingowy", - "brandingHelp": "Możesz dostosować wygląd i doznania użytkownika swojej instancji File Browser poprzez zmianę jej nazwy, zmianę logo, dodanie własnych stylów, a nawet wyłączyć linki zewnętrzne do GitHuba.\nW celu pozyskania większej ilości informacji nt. osobistego brandingu, zapoznaj się z {0}.", - "changePassword": "Zmień Hasło", + "allowPublish": "Tworzenie nowych wpisów i stron", + "allowSignup": "Pozwól użytkownikom na rejestrację", + "avoidChanges": "(pozostaw puste, aby uniknąć zmian)", + "branding": "Personalizacja", + "brandingDirectoryPath": "Ścieżka do folderu personalizacji", + "brandingHelp": "Możesz zmodyfikować wygląd instancji File Browser poprzez zmianę nazwy, logo, dodanie własnych stylów graficznych, a nawet usunięcia linków do serwisu GitHub. Więcej informacji o modyfikacji wyglądu znajdziesz w {0}.", + "changePassword": "Zmień hasło", "commandRunner": "Narzędzie do wykonywania poleceń", - "commandRunnerHelp": "Tu możesz ustawić komendy, które będą wykonywane przy danych zdarzeniach. Musisz wpisywać po jednej na linjkę. Zmienne środowiskowe {0} i {1} będą dostępne, gdzie {0} jest względne wobec {1}. Więcej informacji o tej funkcji i dostępnych zmiennych środowiskowych znajdziesz tutaj: {2}.", + "commandRunnerHelp": "Tu możesz ustawić polecenia, które będą wykonywane przy danych zdarzeniach. Musisz wpisywać po jednym na wiersz. Zmienne środowiskowe {0} i {1} będą dostępne, gdzie {0} jest względne wobec {1}. Więcej informacji o tej funkcji i dostępnych zmiennych środowiskowych znajdziesz w {2}.", "commandsUpdated": "Polecenie zaktualizowane!", - "createUserDir": "Automatycznie utwórz katalog domowy użytkownika podczas dodania nowego użytkownika", - "customStylesheet": "Własny arkusz stylów", - "defaultUserDescription": "Oto domyślne ustawienia dla nowych użytkowników.", - "disableExternalLinks": "Wyłącz linki zewnętrzne (z wyjątkiem dokumentacji)", - "disableUsedDiskPercentage": "Disable used disk percentage graph", - "documentation": "dokumentacja", + "createUserDir": "Automatycznie twórz katalog domowy podczas dodawania użytkownika", + "tusUploads": "Przesyłanie we fragmentach", + "tusUploadsHelp": "File Browser wspiera przesyłanie plików we fragmentach, co pozwala na proces przesyłania, który jest wydajny, pewny i możliwy do wznowienia nawet w sieciach o wątpliwej stabilności przesyłu danych.", + "tusUploadsChunkSize": "Oznacza maksymalny rozmiar przesyłanych plików (dla mniejszych plików użyte zostanie przesyłanie bezpośrednie). Możesz ustawić tę wartość zarówno zapisaną samymi cyframi w bajtach, jak i podać ją w formie skróconej, np. poprzez 10MB, 1GB itp.", + "tusUploadsRetryCount": "Liczba prób ponowienia transferu w przypadku wystapienia problemu z przesyłem.", + "userHomeBasePath": "Ścieżka podstawowa dla katalogów domowych użytkowników", + "userScopeGenerationPlaceholder": "Zakres zostanie wygenerowany automatycznie", + "createUserHomeDirectory": "Utwórz katalog domowy użytkownika", + "customStylesheet": "Własny arkusz stylu", + "defaultUserDescription": "To są domyślne ustawienia dla nowych użytkowników.", + "disableExternalLinks": "Wyłącz linki zewnętrzne (z wyjątkiem dokumentacji)", + "disableUsedDiskPercentage": "Wyłącz wykres procentowy używanego dysku", + "documentation": "dokumentacji", "examples": "Przykłady", - "executeOnShell": "Wykonaj w powłoce", - "executeOnShellDescription": "Domyślnie File Browser wykonuje polecenia wywołując ich pliki binarne bezpośrednio. Jesli preferujesz wykonywanie ich w powłoce (jak np. Bash czy PowerShell), możesz zdefiniować to tutaj wraz z wymaganymi flagami i argumentami. Jeśli to ustawienie jest aktywne, polecenie które wykonarz zostanie dodane jako argument. Stosuje się to zarówno do poleceń użytkownika jak i zaczepów zdarzeń.", - "globalRules": "To jest globalne zestawienie reguł zezwalających i zabraniających. Stosują się one do każdego użytkownika. Możesz zdefiniować indywidualne zasady w ustawieniach każdego użytkownika, by zignorować te reguły.", - "globalSettings": "Ustawienia Globalne", - "hideDotfiles": "Ukryj ukryte pliki", + "executeOnShell": "Wykonaj w powłoce", + "executeOnShellDescription": "Domyślnie File Browser wykonuje polecenia poprzez bezpośrednie uruchomienie odpowiednich plików binarnych. Jeśli chcesz uruchamiać polecenia z poziomu powłoki (np. Bash lub PowerShell), możesz zdefiniować je tutaj, z wykorzystaniem odpowiednich argumentów i flag. Gdy się na to zdecydujesz, wykonywane polecenie będzie załączone jako argument. Tyczy się to tak poleceń użytkownika, jak i zaczepów zdarzeń.", + "globalRules": "Globalny zestaw reguł zezwalających i zakazujących. Dotyczą każdego użytkownika. Aby zastąpić ustawienia globalne, możesz zdefiniować określone reguły indywidualnie dla każdego użytkownika.", + "globalSettings": "Ustawienia globalne", + "hideDotfiles": "Ukryj pliki poprzedzone kropką", "insertPath": "Wstaw ścieżkę", "insertRegex": "Wstaw wyrażenie regularne", "instanceName": "Nazwa instancji", "language": "Język", "lockPassword": "Zablokuj użytkownikowi możliwość zmiany hasła", - "newPassword": "Twoje nowe hasło", - "newPasswordConfirm": "Potwierdź swoje hasło", - "newUser": "Nowy Użytkownik", + "newPassword": "Nowe hasło", + "newPasswordConfirm": "Potwierdź nowe hasło", + "newUser": "Nowy użytkownik", "password": "Hasło", - "passwordUpdated": "Hasło zostało zapisane!", + "passwordUpdated": "Hasło zostało zaktualizowane!", "path": "Ścieżka", "perm": { - "create": "Tworzenie plików i katalogów", - "delete": "Usuwanie plików i katalogów", + "create": "Tworzenie plików i folderów", + "delete": "Usuwanie plików i folderów", "download": "Pobieranie", "execute": "Wykonywanie poleceń", - "modify": "Edycja plików", - "rename": "Zmiana nazw lub przenoszenie plików i katalogów", + "modify": "Edytowanie plików", + "rename": "Zmienianie nazwy lub przenoszenie plików i katalogów", "share": "Udostępnianie plików" }, "permissions": "Uprawnienia", - "permissionsHelp": "Możesz uczynić użytkownika administratorem, lub wybrać uprawnienia indywidualnie. Jeśli zaznaczysz opcję \"Administrator\", wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n", + "permissionsHelp": "Możesz ustawić użytkownika jako administratora lub wybrać uprawnienia indywidualnie. Jeśli wybierzesz „Administrator”, wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n", "profileSettings": "Twój profil", - "ruleExample1": "uniemożliwia dostęp do któregokolwiek z ukrytych plików (takich jak .git, .gitignore) w każdym folderze.\n", - "ruleExample2": "blokuje dostęp do pliku Caddyfile w głównym katalogu zakresu.", + "ruleExample1": "uniemożliwia dostęp do plików poprzedzonych kropką (takich jak .git, .gitignore) we wszystkich folderach.\n", + "ruleExample2": "blokuje dostęp do pliku o nazwie Caddyfile w katalogu głównym zakresu.", "rules": "Uprawnienia", - "rulesHelp": "Tu możesz zdefiniować zestawienie reguł zezwalających i zabraniających dla tego konkretnego użytkownika. Zablokowane pliki nie będą widoczne na listach i nie będą dostępne dla użytkownika. Wspierane są wyrażenia regularne i ścieżki względne wobec zakresu użytkownika.\n", + "rulesHelp": "Tutaj możesz zdefiniować zestaw reguł zezwalających i zakazujących dla tego użytkownika. Zablokowane pliki nie pojawią się na listach i nie będą dostępne dla użytkownika. Obsługujemy wyrażenia regularne i ścieżki względne w stosunku do zakresu użytkownika.\n", "scope": "Zakres", - "settingsUpdated": "Uprawnienia Zapisane!", + "setDateFormat": "Ustaw dokładny format daty", + "settingsUpdated": "Ustawienia zaktualizowane!", "shareDuration": "Okres udostępniania", "shareManagement": "Zarządzanie udostępnianiem", - "singleClick": "Pojedyncze kliknięcie", + "shareDeleted": "Udostępnienie usunięte!", + "singleClick": "Używaj pojedynczych kliknięć, aby otwierać pliki i foldery", "themes": { - "dark": "ciemny", - "light": "jasny", - "title": "Motywy" + "default": "Domyślny systemowy", + "dark": "Ciemny", + "light": "Jasny", + "title": "Motyw" }, "user": "Użytkownik", "userCommands": "Polecenia", - "userCommandsHelp": "Lista oddzielonych spacjami poleceń dostępnych dla tego użytkownika. Przykład:\n", + "userCommandsHelp": "Oddzielona spacjami lista z dostępnymi poleceniami dla tego użytkownika. Przykład:\n", "userCreated": "Użytkownik zapisany!", "userDefaults": "Domyślne ustawienia użytkownika", "userDeleted": "Użytkownik usunięty!", @@ -211,8 +241,8 @@ }, "sidebar": { "help": "Pomoc", - "hugoNew": "Hugo New", - "login": "Login", + "hugoNew": "Nowy Hugo", + "login": "Zaloguj", "logout": "Wyloguj", "myFiles": "Moje pliki", "newFile": "Nowy plik", @@ -220,10 +250,10 @@ "preview": "Podgląd", "settings": "Ustawienia", "signup": "Rejestracja", - "siteSettings": "Ustawienia Strony" + "siteSettings": "Ustawienia strony" }, "success": { - "linkCopied": "Link Skopiowany!" + "linkCopied": "Link skopiowany!" }, "time": { "days": "Dni", From 6d55cc59f750656956a65c94a7d5b5766a900f8f Mon Sep 17 00:00:00 2001 From: Matthaiks <3577122+Matthaiks@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:02:53 +0200 Subject: [PATCH 03/82] chore: Update Polish translation --- frontend/src/i18n/pl.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json index 0ddfbf56..e621d7fa 100644 --- a/frontend/src/i18n/pl.json +++ b/frontend/src/i18n/pl.json @@ -32,8 +32,8 @@ "save": "Zapisz", "schedule": "Harmonogram", "search": "Szukaj", - "select": "Wybierz", - "selectMultiple": "Wybierz wiele", + "select": "Zaznacz", + "selectMultiple": "Zaznacz wiele", "share": "Udostępnij", "shell": "Przełącz powłokę", "submit": "Prześlij", @@ -47,7 +47,7 @@ "download": { "downloadFile": "Pobierz plik", "downloadFolder": "Pobierz folder", - "downloadSelected": "Pobierz wybrane" + "downloadSelected": "Pobierz zaznaczone" }, "upload": { "abortUpload": "Czy na pewno chcesz przerwać?" @@ -59,7 +59,7 @@ "connection": "Serwer jest nieosiągalny." }, "files": { - "body": "Ciało", + "body": "Zawartość", "closePreview": "Zamknij podgląd", "files": "Pliki", "folders": "Foldery", @@ -68,7 +68,7 @@ "loading": "Ładowanie...", "lonely": "Smutno, gdy tak pusto...", "metadata": "Metadane", - "multipleSelectionEnabled": "Włączono wybór wielokrotny", + "multipleSelectionEnabled": "Włączono zaznaczenie wielokrotne", "name": "Nazwa", "size": "Rozmiar", "sortByLastModified": "Sortuj wg ostatniej modyfikacji", @@ -77,15 +77,15 @@ "noPreview": "Podgląd tego pliku jest niedostępny." }, "help": { - "click": "wybierz plik lub folder", + "click": "zaznacz plik lub folder", "ctrl": { - "click": "wybierz wiele plików lub folderów", + "click": "zaznacz wiele plików lub folderów", "f": "otwórz wyszukiwarkę", "s": "pobierz aktywny plik lub folder" }, - "del": "usuń wybrane elementy", + "del": "usuń zaznaczone elementy", "doubleClick": "otwórz plik lub folder", - "esc": "wyczyść wybór i/lub zamknij monit", + "esc": "wyczyść zaznaczenie i/lub zamknij monit", "f1": "te informacje", "f2": "zmień nazwę pliku", "help": "Pomoc" @@ -99,7 +99,7 @@ "signup": "Rejestracja", "submit": "Zaloguj", "username": "Nazwa użytkownika", - "usernameTaken": "Ta nazwa jest zajęta", + "usernameTaken": "Ta nazwa użytkownika jest zajęta", "wrongCredentials": "Błędne dane logowania" }, "permanent": "Permanentny", @@ -117,7 +117,7 @@ "downloadMessage": "Wybierz format, w którym chcesz pobrać.", "error": "Pojawił się jakiś błąd", "fileInfo": "Informacje o​ pliku", - "filesSelected": "Wybrane pliki: {count}", + "filesSelected": "Zaznaczone pliki: {count}", "lastModified": "Ostatnio zmodyfikowano", "move": "Przenieś", "moveMessage": "Wybierz nową lokalizację dla swoich plików/folderów:", From a46acba5f92ee044661880d6ae349e289d984328 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Thu, 16 Jan 2025 11:59:19 +0100 Subject: [PATCH 04/82] fix: generate random admin password on quick setup This should help mitigate issues like #3646 --- cmd/root.go | 7 ++++++- users/password.go | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/cmd/root.go b/cmd/root.go index 59329c5c..b421f771 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -378,7 +378,12 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { password := getParam(flags, "password") if password == "" { - password, err = users.HashPwd("admin") + pwd, err := users.RandomPwd() + checkErr(err) + + log.Println("Generated random admin password for quick setup:", pwd) + + password, err = users.HashPwd(pwd) checkErr(err) } diff --git a/users/password.go b/users/password.go index d7ef250a..3f5e1c6e 100644 --- a/users/password.go +++ b/users/password.go @@ -1,9 +1,14 @@ package users import ( + "crypto/rand" + "encoding/base64" "golang.org/x/crypto/bcrypt" ) +// randomPasswordBytesCount is chosen to fit in a base64 string without padding +const randomPasswordBytesCount = 9 + // HashPwd hashes a password. func HashPwd(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) @@ -15,3 +20,15 @@ func CheckPwd(password, hash string) bool { err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) return err == nil } + +func RandomPwd() (string, error) { + randomPasswordBytes := make([]byte, randomPasswordBytesCount) + var _, err = rand.Read(randomPasswordBytes) + if err != nil { + return "", err + } + + // This is done purely to make the password human-readable + var randomPasswordString = base64.URLEncoding.EncodeToString(randomPasswordBytes) + return randomPasswordString, nil +} From 54b91b8ff0b8ee1f02f72425ab97d27a5d942fc3 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Tue, 21 Jan 2025 14:45:54 +0100 Subject: [PATCH 05/82] fix: imports lint --- users/password.go | 1 + 1 file changed, 1 insertion(+) diff --git a/users/password.go b/users/password.go index 3f5e1c6e..d8cd7fbc 100644 --- a/users/password.go +++ b/users/password.go @@ -3,6 +3,7 @@ package users import ( "crypto/rand" "encoding/base64" + "golang.org/x/crypto/bcrypt" ) From c606a01a2d20932fb32ee896234d57631f8c47e4 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Tue, 21 Jan 2025 14:51:01 +0100 Subject: [PATCH 06/82] fix: err shadowing lint --- cmd/root.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/root.go b/cmd/root.go index b421f771..125f443d 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -378,7 +378,8 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { password := getParam(flags, "password") if password == "" { - pwd, err := users.RandomPwd() + var pwd string + pwd, err = users.RandomPwd() checkErr(err) log.Println("Generated random admin password for quick setup:", pwd) From b883e287a05d4585cd9bde510fad4ef1c4e31a7d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 4 Jun 2025 18:58:48 +0200 Subject: [PATCH 07/82] chore: migrate transifex settings --- .tx/config | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.tx/config b/.tx/config index f7363d04..b62f63ac 100644 --- a/.tx/config +++ b/.tx/config @@ -1,10 +1,13 @@ [main] -host = https://www.transifex.com -lang_map = pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be, sv_SE: sv-se, cz-CS: cz_cs +host = https://www.transifex.com +lang_map = sv_SE: sv-se, cz-CS: cz_cs, pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be + +[o:file-browser:p:file-browser:r:file-browser] +file_filter = frontend/src/i18n/.json +source_file = frontend/src/i18n/en.json +source_lang = en +type = KEYVALUEJSON +minimum_perc = 50 +replace_edited_strings = false +keep_translations = false -[file-browser.file-browser] -file_filter = frontend/src/i18n/.json -minimum_perc = 50 -source_file = frontend/src/i18n/en.json -source_lang = en -type = KEYVALUEJSON From 48f894740fb0903e3bbf66ed3a38c4f171b654c0 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 4 Jun 2025 19:08:43 +0200 Subject: [PATCH 08/82] chore: remove stale bot --- .github/workflows/stale.yml | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 .github/workflows/stale.yml diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 45a7e9e5..00000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: 'Close stale issues and PRs' -permissions: - issues: write - pull-requests: write - -on: - schedule: - - cron: '30 1 * * *' - -jobs: - stale: - runs-on: ubuntu-latest - steps: - - uses: actions/stale@v9 - with: - stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' - close-pr-message: 'This PR was closed because it has been stalled for 5 days with no activity.' - stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' - close-issue-message: 'This issue was closed because it has been stalled for 5 days with no activity.' - days-before-stale: 30 - days-before-close: 5 - exempt-issue-labels: 'feature ☘,enhancement ⚙,bug 🐞' - exempt-pr-labels: 'need-help,wip' - operations-per-run: 100 \ No newline at end of file From 71a8f5662c207e3cd4ee714a5b5a961121f510cd Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 5 Jun 2025 15:53:29 +0200 Subject: [PATCH 09/82] fix: set videojs locale (#3742) Co-authored-by: Oleg Lobanov --- frontend/src/components/files/VideoPlayer.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/files/VideoPlayer.vue b/frontend/src/components/files/VideoPlayer.vue index a1947f90..ac38b6d1 100644 --- a/frontend/src/components/files/VideoPlayer.vue +++ b/frontend/src/components/files/VideoPlayer.vue @@ -62,7 +62,8 @@ const initVideoPlayer = async () => { const languagePack = await ( languageImports[lang] || languageImports.en )?.(); - videojs.addLanguage("videoPlayerLocal", languagePack.default); + const code = languageImports[lang] ? lang : "en"; + videojs.addLanguage(code, languagePack.default); sourceType.value = ""; // @@ -70,7 +71,7 @@ const initVideoPlayer = async () => { const srcOpt = { sources: { src: props.source, type: sourceType.value } }; //Supporting localized language display. - const langOpt = { language: "videoPlayerLocal" }; + const langOpt = { language: code }; // support for playback at different speeds. const playbackRatesOpt = { playbackRates: [0.5, 1, 1.5, 2, 2.5, 3] }; const options = getOptions( From f4a8420bf3c1b677a2aef1a9c28fd9ac8ffec61d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 11 Jun 2025 17:44:18 +0200 Subject: [PATCH 10/82] docs: add maintenance warning to readme --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 23afecfc..8ba29bb6 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@

+> [!WARNING] +> +> This project is currently not under active maintenance and is looking for maintainers. Please check [issue #4890](https://github.com/filebrowser/filebrowser/issues/4890). + ![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif) [![Build](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml/badge.svg)](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml) @@ -14,9 +18,9 @@ filebrowser provides a file managing interface within a specified directory and ## Demo -url: https://demo.filebrowser.org/ +URL: https://demo.filebrowser.org/ -credentials: `demo`/`demo` +Credentials: `demo`/`demo` ## Features From e82e2392a4ff6bac513a9de4fecca0573dd9fc89 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 11 Jun 2025 17:53:43 +0200 Subject: [PATCH 11/82] chore: update Go dependencies --- go.mod | 59 +++++++++++------------- go.sum | 138 ++++++++++++++++++++++++++------------------------------- 2 files changed, 91 insertions(+), 106 deletions(-) diff --git a/go.mod b/go.mod index be75c5ae..b6a574d2 100644 --- a/go.mod +++ b/go.mod @@ -4,69 +4,64 @@ go 1.23.0 require ( github.com/asdine/storm/v3 v3.2.1 - github.com/asticode/go-astisub v0.26.2 + github.com/asticode/go-astisub v0.34.0 github.com/disintegration/imaging v1.6.2 github.com/dsoprea/go-exif/v3 v3.0.1 github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 - github.com/golang-jwt/jwt/v4 v4.5.1 + github.com/golang-jwt/jwt/v4 v4.5.2 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 github.com/maruel/natural v1.1.1 github.com/marusama/semaphore/v2 v2.5.0 github.com/mholt/archiver/v3 v3.5.1 github.com/mitchellh/go-homedir v1.1.0 - github.com/pelletier/go-toml/v2 v2.2.3 + github.com/pelletier/go-toml/v2 v2.2.4 github.com/shirou/gopsutil/v3 v3.24.5 - github.com/spf13/afero v1.11.0 - github.com/spf13/cobra v1.8.1 - github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.9.0 + github.com/spf13/afero v1.14.0 + github.com/spf13/cobra v1.9.1 + github.com/spf13/pflag v1.0.6 + github.com/spf13/viper v1.20.1 + github.com/stretchr/testify v1.10.0 github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce - go.etcd.io/bbolt v1.3.11 - golang.org/x/crypto v0.36.0 - golang.org/x/image v0.19.0 - golang.org/x/text v0.23.0 + go.etcd.io/bbolt v1.4.1 + golang.org/x/crypto v0.39.0 + golang.org/x/image v0.28.0 + golang.org/x/text v0.26.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v2 v2.4.0 ) require ( - github.com/andybalholm/brotli v1.1.0 // indirect - github.com/asticode/go-astikit v0.42.0 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect + github.com/asticode/go-astikit v0.55.0 // indirect github.com/asticode/go-astits v1.13.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-errors/errors v1.5.1 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/golang/geo v0.0.0-20230421003525-6adc56603217 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 // indirect + github.com/golang/snappy v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/pgzip v1.2.6 // indirect - github.com/magiconair/properties v1.8.7 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/nwaples/rardecode v1.1.3 // indirect - github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/sagikazarmark/locafero v0.9.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/cast v1.9.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect + github.com/ulikunitz/xz v0.5.12 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect - golang.org/x/net v0.38.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/net v0.41.0 // indirect + golang.org/x/sys v0.33.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect - gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 000afe76..b98d8ecb 100644 --- a/go.sum +++ b/go.sum @@ -3,20 +3,20 @@ github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863 h1:BRrxwOZBolJN4gIwvZMJY1tzqBvQgpaZiQRuIDD40jM= github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM= github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/asdine/storm/v3 v3.2.1 h1:I5AqhkPK6nBZ/qJXySdI7ot5BlXSZ7qvDY1zAn5ZJac= github.com/asdine/storm/v3 v3.2.1/go.mod h1:LEpXwGt4pIqrE/XcTvCnZHT5MgZCV6Ub9q7yQzOFWr0= github.com/asticode/go-astikit v0.20.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0= github.com/asticode/go-astikit v0.30.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0= -github.com/asticode/go-astikit v0.42.0 h1:pnir/2KLUSr0527Tv908iAH6EGYYrYta132vvjXsH5w= -github.com/asticode/go-astikit v0.42.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0= -github.com/asticode/go-astisub v0.26.2 h1:cdEXcm+SUSmYCEPTQYbbfCECnmQoIFfH6pF8wDJhfVo= -github.com/asticode/go-astisub v0.26.2/go.mod h1:WTkuSzFB+Bp7wezuSf2Oxulj5A8zu2zLRVFf6bIFQK8= +github.com/asticode/go-astikit v0.55.0 h1:jdR6djfjAF2SwtFu1hzwkenCRejzOZUREsr3xPAPHeg= +github.com/asticode/go-astikit v0.55.0/go.mod h1:fV43j20UZYfXzP9oBn33udkvCvDvCDhzjVqoLFuuYZE= +github.com/asticode/go-astisub v0.34.0 h1:owKNj0A9pc7YVW/rNy2MJZ1mf0L8DTdklZVfyZDhTWI= +github.com/asticode/go-astisub v0.34.0/go.mod h1:WTkuSzFB+Bp7wezuSf2Oxulj5A8zu2zLRVFf6bIFQK8= github.com/asticode/go-astits v1.8.0/go.mod h1:DkOWmBNQpnr9mv24KfZjq4JawCFX1FCqjLVGvO0DygQ= github.com/asticode/go-astits v1.13.0 h1:XOgkaadfZODnyZRR5Y0/DWkA9vrkLLPLeeOvDwfKZ1c= github.com/asticode/go-astits v1.13.0/go.mod h1:QSHmknZ51pf6KJdHKZHJTLlMegIrhega3LPWz3ND/iI= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -47,48 +47,48 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjr github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/geo v0.0.0-20230421003525-6adc56603217 h1:HKlyj6in2JV6wVkmQ4XmG/EIm+SCYlPZ+V4GWit7Z+I= -github.com/golang/geo v0.0.0-20230421003525-6adc56603217/go.mod h1:8wI0hitZ3a1IxZfeH3/5I97CI8i5cLGsYe7xNhQGs9U= +github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 h1:8mHyM6CCmj/DQAhHXJVTgdkg/6hAH71N7qGEF+t4Bzg= +github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492/go.mod h1:Vaw7L5b+xa3Rj4/pRtrQkymn3lSBRB/NAEdbF9YEVLA= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= @@ -101,8 +101,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg= github.com/marusama/semaphore/v2 v2.5.0 h1:o/1QJD9DBYOWRnDhPwDVAXQn6mQYD0gZaS1Tpx6DJGM= @@ -111,76 +109,72 @@ github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Cl github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= -github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/profile v1.4.0/go.mod h1:NWz/XGvpEW1FyYQ7fCx4dqYBLlfTcE+A9FLAkNKqjFE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= +github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= -github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= +github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= +github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce h1:fb190+cK2Xz/dvi9Hv8eCYJYvIGUTN2/KLq1pT6CjEc= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= -go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= +go.etcd.io/bbolt v1.4.1 h1:5mOV+HWjIPLEAlUGMsveaUvK2+byZMFOzojoi7bh7uI= +go.etcd.io/bbolt v1.4.1/go.mod h1:c8zu2BnXWTu2XM4XcICtbGSl9cFwsXtcf9zLt2OncM8= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= -golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= +golang.org/x/image v0.28.0 h1:gdem5JW1OLS4FbkWgLO+7ZeFzYtL3xClb97GaUzYMFE= +golang.org/x/image v0.28.0/go.mod h1:GUJYXtnGKEUgggyzh+Vxt+AviiCcyiwpsl8iQ8MvwGY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20191105084925-a882066a44e0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -190,10 +184,10 @@ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -204,27 +198,23 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From abbf203bdd2ba1cd7eed823129872d44aa5b8c08 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 13 Jun 2025 12:02:32 +0200 Subject: [PATCH 12/82] chore: updated readme and templates --- .github/ISSUE_TEMPLATE/bug_report.md | 22 ------------ .github/ISSUE_TEMPLATE/bug_report.yml | 43 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 5 +++ .github/ISSUE_TEMPLATE/feature_request.md | 16 --------- README.md | 17 ++++++--- 5 files changed, 61 insertions(+), 42 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index f026f3ce..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve ---- - -**Description** - - -**Expected behaviour** - - -**What is happening instead?** - - -**Additional context** - - -**How to reproduce?** - - -**Files** - diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..b5e1e3e1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,43 @@ +name: Bug Report +description: Report a bug in FileBrowser. +labels: [bug, triage] +body: + - type: checkboxes + attributes: + label: Checklist + description: Please verify that you've followed these steps + options: + - label: This is a bug report, not a question. + required: true + - label: I have searched on the [issue tracker](https://github.com/filebrowser/filebrowser/issues?q=is%3Aissue) for my bug. + required: true + - label: I am running the latest [FileBrowser version](https://github.com/filebrowser/filebrowser/releases) or have an issue updating. + required: true + - type: textarea + id: version + attributes: + label: Version + render: Text + description: | + Enter the version of FileBrowser you are using. + - type: textarea + attributes: + label: Description + description: | + A clear and concise description of what the issue is about. What are you trying to do? + - type: textarea + attributes: + label: What did you expect to happen? + - type: textarea + attributes: + label: What actually happened? + - type: textarea + attributes: + label: Reproduction Steps + description: | + Tell us how to reproduce this issue. How can someone who is starting from scratch reproduce this behavior as minimally as possible? + - type: textarea + attributes: + label: Files + description: | + A list of relevant files for this issue. Large files can be uploaded one-by-one or in a tarball/zipfile. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..b712a879 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: GitHub Discussions + url: https://github.com/filebrowser/filebrowser/discussions + about: Please ask questions and discuss features here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 4bdb0367..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project ---- - -**Is your feature request related to a problem? Please describe.** - - -**Describe the solution you'd like** - - -**Describe alternatives you've considered** - - -**Additional context** - diff --git a/README.md b/README.md index 8ba29bb6..d49de48e 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,6 @@

-> [!WARNING] -> -> This project is currently not under active maintenance and is looking for maintainers. Please check [issue #4890](https://github.com/filebrowser/filebrowser/issues/4890). - ![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif) [![Build](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml/badge.svg)](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml) @@ -16,6 +12,19 @@ filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app. +> [!WARNING] +> +> This project is currently on **maintenance-only** mode, and is looking for new maintainers. For more information, please read the [discussion #4906](https://github.com/filebrowser/filebrowser/discussions/4906). Therefore, please note the following: +> +> - It can take a while until someone gets back to you. Please be patient. +> - [Issues][issues] are only being used to track bugs. Any unrelated issues will be converted into a [discussion][discussions]. +> - No new features will be implemented until further notice. The priority is on triaging issues and merge bug fixes. +> +> If you're interested in maintaining this project, please reach out via the discussion above. + +[issues]: https://github.com/filebrowser/filebrowser/issues +[discussions]: https://github.com/filebrowser/filebrowser/discussions + ## Demo URL: https://demo.filebrowser.org/ From 31a326606d003002b64814fe4287b38510159431 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 13 Jun 2025 13:17:39 +0200 Subject: [PATCH 13/82] chore: updated readme and template --- .github/PULL_REQUEST_TEMPLATE.md | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 781aa085..873df269 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,19 +1,15 @@ -**Description** - +## Description -:rotating_light: Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/). + -- [ ] DO make sure you are requesting to **pull a topic/feature/bugfix branch** (right side). Don't request your master! -- [ ] DO make sure you are making a pull request against the **master branch** (left side). Also you should start *your branch* off *our master*. -- [ ] DO make sure that File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md). -- [ ] AVOID breaking the continuous integration build. +## Additional Information -**Further comments** - -:heart: Thank you! ---> +## Checklist + +Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/). + +- [ ] I am aware the project is currently in maintenance-only mode. See [README](https://github.com/filebrowser/community/blob/master/README.md) +- [ ] I am making a PR against the `master` branch. +- [ ] I am sure File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md). From 6d82a27f9a341453f0e213ccc0a66ba6a50620c4 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 15 Jun 2025 20:13:03 +0200 Subject: [PATCH 14/82] ci: add transifex.yml --- transifex.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 transifex.yml diff --git a/transifex.yml b/transifex.yml new file mode 100644 index 00000000..a3fc88f1 --- /dev/null +++ b/transifex.yml @@ -0,0 +1,16 @@ +filters: +- filter_type: file + file_format: KEYVALUEJSON + source_language: en + source_file: frontend/src/i18n/en.json + translation_files_expression: 'frontend/src/i18n/.json' + +settings: + language_mapping: + sv_SE: sv-se + cz-CS: cz_cs + pt_BR: pt-br + zh_CN: zh-cn + zh_HK: zh-hk + zh_TW: zh-tw + nl_BE: nl-be From b6b4fb5da7334bb43258dcf6cfd0a53912038ae7 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 15 Jun 2025 20:13:21 +0200 Subject: [PATCH 15/82] ci: remove manual .tx config --- .tx/config | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 .tx/config diff --git a/.tx/config b/.tx/config deleted file mode 100644 index b62f63ac..00000000 --- a/.tx/config +++ /dev/null @@ -1,13 +0,0 @@ -[main] -host = https://www.transifex.com -lang_map = sv_SE: sv-se, cz-CS: cz_cs, pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be - -[o:file-browser:p:file-browser:r:file-browser] -file_filter = frontend/src/i18n/.json -source_file = frontend/src/i18n/en.json -source_lang = en -type = KEYVALUEJSON -minimum_perc = 50 -replace_edited_strings = false -keep_translations = false - From 54a1ae0fa026e81837e9c3b4363763864243fa11 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 15 Jun 2025 20:48:01 +0200 Subject: [PATCH 16/82] chore: add only translated mode to transifex --- transifex.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/transifex.yml b/transifex.yml index a3fc88f1..64e2caba 100644 --- a/transifex.yml +++ b/transifex.yml @@ -4,6 +4,7 @@ filters: source_language: en source_file: frontend/src/i18n/en.json translation_files_expression: 'frontend/src/i18n/.json' + mode: onlytranslated settings: language_mapping: From 5daae69a6d9d379802f9835f8a2fb6b574b6e25d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 15 Jun 2025 21:05:30 +0200 Subject: [PATCH 17/82] chore: revert only translated mode to transifex --- transifex.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/transifex.yml b/transifex.yml index 64e2caba..a3fc88f1 100644 --- a/transifex.yml +++ b/transifex.yml @@ -4,7 +4,6 @@ filters: source_language: en source_file: frontend/src/i18n/en.json translation_files_expression: 'frontend/src/i18n/.json' - mode: onlytranslated settings: language_mapping: From a882fb6c85ab6ccc845ed0bf3908d8e5e60ce346 Mon Sep 17 00:00:00 2001 From: SOMA <94370762+dgstx@users.noreply.github.com> Date: Mon, 16 Jun 2025 12:39:57 -0300 Subject: [PATCH 18/82] feat: improve pt-br translations with new keys and refinements (#4903) --- frontend/src/i18n/pt-br.json | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/frontend/src/i18n/pt-br.json b/frontend/src/i18n/pt-br.json index 53d855d1..5e5b1116 100644 --- a/frontend/src/i18n/pt-br.json +++ b/frontend/src/i18n/pt-br.json @@ -38,13 +38,20 @@ "toggleSidebar": "Alternar barra lateral", "update": "Atualizar", "upload": "Enviar", - "openFile": "Abrir" + "openFile": "Abrir", + "copyDownloadLinkToClipboard": "Copiar link de download para a área de transferência", + "fullScreen": "Alternar tela cheia", + "preview": "Pré-visualizar", + "discardChanges": "Descartar" }, "download": { "downloadFile": "Baixar arquivo", "downloadFolder": "Baixar pasta", "downloadSelected": "Baixar selecionado" }, + "upload": { + "abortUpload": "Tem certeza de que deseja abortar o upload?" + }, "errors": { "forbidden": "Você não tem permissões para acessar isto.", "internal": "Ops! Algum erro ocorreu.", @@ -58,8 +65,8 @@ "folders": "Pastas", "home": "Início", "lastModified": "Última modificação", - "loading": "Carregando. Aguarde, por favor.", - "lonely": "Não existe nada aqui.", + "loading": "Carregando...", + "lonely": "Não há nada aqui...", "metadata": "Metadados", "multipleSelectionEnabled": "Seleção múltipla ativada", "name": "Nome", @@ -73,12 +80,12 @@ "click": "selecionar pasta ou arquivo", "ctrl": { "click": "selecionar várias pastas e arquivos", - "f": "pesquisar", + "f": "abrir pesquisa", "s": "salvar um arquivo ou baixar a pasta que você está" }, "del": "apagar os arquivos selecionados", "doubleClick": "abrir pasta ou arquivo", - "esc": "limpar seleção e/ou fechar menu", + "esc": "limpar seleção e/ou fechar prompt", "f1": "esta informação", "f2": "renomear arquivo", "help": "Ajuda" @@ -123,7 +130,7 @@ "rename": "Renomear", "renameMessage": "Insira um novo nome para", "replace": "Substituir", - "replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n", + "replaceMessage": "Um dos arquivos que você está tentando enviar possui um nome conflitante. Deseja pular este arquivo e continuar o envio ou substituir o existente?\n", "schedule": "Agendar", "scheduleMessage": "Escolha uma data para agendar a publicação deste post.", "show": "Mostrar", @@ -131,7 +138,10 @@ "upload": "Enviar", "uploadFiles": "Enviando {files} arquivos...", "uploadMessage": "Selecione uma opção para enviar.", - "optionalPassword": "Senha opcional" + "optionalPassword": "Senha opcional", + "deleteUser": "Tem certeza de que deseja apagar este usuário?", + "resolution": "Resolução", + "discardEditorChanges": "Tem certeza de que deseja descartar as alterações feitas?" }, "search": { "images": "Imagens", @@ -159,7 +169,7 @@ "commandRunner": "Execução de comandos", "commandRunnerHelp": "Aqui você pode definir comandos que serão executados nos eventos descritos. Escreva um por linha. As variáveis de ambiente {0} e {1} estão disponíveis, sendo {0} relativo a {1}. Para mais informações sobre esta função e as variáveis de ambiente disponíveis, leia a {2}.", "commandsUpdated": "Comandos atualizados!", - "createUserDir": "Criar diretório Home para novos usuários", + "createUserDir": "Criar diretório Home do usuário automaticamente ao adicionar novo usuário", "userHomeBasePath": "Caminho base para diretórios de usuários", "userScopeGenerationPlaceholder": "O escopo será gerado automaticamente", "createUserHomeDirectory": "Criar diretório Home de usuário", @@ -184,7 +194,7 @@ "newUser": "Novo usuário", "password": "Senha", "passwordUpdated": "Senha atualizada!", - "path": "", + "path": "Caminho", "perm": { "create": "Criar arquivos e diretórios", "delete": "Apagar arquivos e diretórios", @@ -209,6 +219,7 @@ "shareDeleted": "Compartilhamento apagado!", "singleClick": "Usar clique único para abrir arquivos e diretórios", "themes": { + "default": "Padrão do sistema", "dark": "Escuro", "light": "Claro", "title": "Tema" @@ -229,7 +240,7 @@ "hugoNew": "Hugo New", "login": "Login", "logout": "Sair", - "myFiles": "Arquivos", + "myFiles": "Meus arquivos", "newFile": "Novo arquivo", "newFolder": "Nova pasta", "preview": "Pré-visualizar", @@ -245,6 +256,6 @@ "hours": "Horas", "minutes": "Minutos", "seconds": "Segundos", - "unit": "Unidades de Tempo" + "unit": "Unidade de tempo" } } From d9ebd65ffcf9b2166fec708d51849796d12b16e0 Mon Sep 17 00:00:00 2001 From: Dev_Nergis <136839304+DevNergis@users.noreply.github.com> Date: Tue, 17 Jun 2025 01:35:50 +0900 Subject: [PATCH 19/82] feat: update translation ko.json (#3852) --- frontend/src/i18n/ko.json | 248 +++++++++++++++++++++----------------- 1 file changed, 139 insertions(+), 109 deletions(-) diff --git a/frontend/src/i18n/ko.json b/frontend/src/i18n/ko.json index 722da2d2..6a6db23f 100644 --- a/frontend/src/i18n/ko.json +++ b/frontend/src/i18n/ko.json @@ -3,47 +3,60 @@ "cancel": "취소", "clear": "지우기", "close": "닫기", + "continue": "계속", "copy": "복사", "copyFile": "파일 복사", - "copyToClipboard": "클립보드 복사", + "copyToClipboard": "클립보드에 복사", + "copyDownloadLinkToClipboard": "다운로드 링크 클립보드에 복사", "create": "생성", "delete": "삭제", "download": "다운로드", - "hideDotfiles": "숨김파일(dotfile)을 표시 안함", + "file": "파일", + "folder": "폴더", + "fullScreen": "전체 화면 전환", + "hideDotfiles": "숨김 파일 숨기기", "info": "정보", - "more": "더보기", + "more": "더 보기", "move": "이동", "moveFile": "파일 이동", - "new": "신규", + "new": "새로 만들기", "next": "다음", "ok": "확인", - "permalink": "링크 얻기", + "permalink": "영구 링크 받기", "previous": "이전", + "preview": "미리보기", "publish": "게시", "rename": "이름 바꾸기", - "replace": "대체", - "reportIssue": "이슈 보내기", + "replace": "바꾸기", + "reportIssue": "문제 보고", "save": "저장", - "schedule": "일정", + "schedule": "예약", "search": "검색", "select": "선택", "selectMultiple": "다중 선택", "share": "공유", - "shell": "쉘 전환", + "shell": "셸 전환", + "submit": "제출", "switchView": "보기 전환", "toggleSidebar": "사이드바 전환", "update": "업데이트", - "upload": "업로드" + "upload": "업로드", + "openFile": "파일 열기", + "discardChanges": "변경 사항 취소" }, "download": { "downloadFile": "파일 다운로드", "downloadFolder": "폴더 다운로드", "downloadSelected": "선택 항목 다운로드" }, + "upload": { + "abortUpload": "업로드를 중단하시겠습니까?" + }, "errors": { - "forbidden": "접근 권한이 없습니다.", - "internal": "오류가 발생하였습니다.", - "notFound": "해당 경로를 찾을 수 없습니다." + "forbidden": "이곳에 접근할 권한이 없습니다.", + "internal": "문제가 발생했습니다.", + "notFound": "이 위치에 접근할 수 없습니다.", + "connection": "서버에 연결할 수 없습니다." }, "files": { "body": "본문", @@ -51,175 +64,192 @@ "files": "파일", "folders": "폴더", "home": "홈", - "lastModified": "최종 수정", - "loading": "로딩중...", - "lonely": "폴더가 비어 있습니다...", + "lastModified": "마지막 수정일", + "loading": "로딩 중...", + "lonely": "여기에 아무것도 없네요...", "metadata": "메타데이터", - "multipleSelectionEnabled": "다중 선택 켜짐", + "multipleSelectionEnabled": "다중 선택 활성화됨", "name": "이름", "size": "크기", - "sortByLastModified": "수정시간순 정렬", - "sortByName": "이름순", - "sortBySize": "크기순" + "sortByLastModified": "마지막 수정일 순 정렬", + "sortByName": "이름 순 정렬", + "sortBySize": "크기 순 정렬", + "noPreview": "이 파일은 미리보기를 사용할 수 없습니다." }, "help": { - "click": "파일이나 디렉토리를 선택해주세요.", + "click": "파일 또는 디렉터리 선택", "ctrl": { - "click": "여러 개의 파일이나 디렉토리를 선택해주세요.", - "f": "검색창 열기", - "s": "파일 또는 디렉토리 다운로드" + "click": "여러 파일 또는 디렉터리 선택", + "f": "검색 열기", + "s": "파일 저장 또는 현재 디렉터리 다운로드" }, - "del": "선택된 파일 삭제", - "doubleClick": "파일 또는 디렉토리 열기", - "esc": "선택 취소/프롬프트 닫기", - "f1": "정보", - "f2": "파일 이름 변경", + "del": "선택한 항목 삭제", + "doubleClick": "파일 또는 디렉터리 열기", + "esc": "선택 취소 및/또는 프롬프트 닫기", + "f1": "이 정보", + "f2": "파일 이름 바꾸기", "help": "도움말" }, "login": { - "createAnAccount": "계정 생성", + "createAnAccount": "계정 만들기", "loginInstead": "이미 계정이 있습니다", "password": "비밀번호", "passwordConfirm": "비밀번호 확인", "passwordsDontMatch": "비밀번호가 일치하지 않습니다", - "signup": "가입하기", + "signup": "가입", "submit": "로그인", "username": "사용자 이름", - "usernameTaken": "사용자 이름이 존재합니다", - "wrongCredentials": "사용자 이름 또는 비밀번호를 확인하십시오" + "usernameTaken": "이미 사용 중인 사용자 이름입니다", + "wrongCredentials": "잘못된 자격 증명" }, "permanent": "영구", "prompts": { "copy": "복사", - "copyMessage": "복사할 디렉토리:", - "currentlyNavigating": "현재 위치:", - "deleteMessageMultiple": "{count} 개의 파일을 삭제하시겠습니까?", - "deleteMessageSingle": "파일 혹은 디렉토리를 삭제하시겠습니까?", + "copyMessage": "파일을 복사할 위치를 선택하세요:", + "currentlyNavigating": "현재 탐색 중:", + "deleteMessageMultiple": "{count}개의 파일을 삭제하시겠습니까?", + "deleteMessageSingle": "이 파일/폴더를 삭제하시겠습니까?", + "deleteMessageShare": "이 공유({path})를 삭제하시겠습니까?", + "deleteUser": "이 사용자를 삭제하시겠습니까?", "deleteTitle": "파일 삭제", - "displayName": "게시 이름:", + "displayName": "표시 이름:", "download": "파일 다운로드", - "downloadMessage": "다운로드 포맷 설정.", - "error": "에러 발생!", + "downloadMessage": "다운로드할 형식을 선택하세요.", + "error": "문제가 발생했습니다", "fileInfo": "파일 정보", - "filesSelected": "{count} 개의 파일이 선택되었습니다.", - "lastModified": "최종 수정", + "filesSelected": "{count}개의 파일 선택됨.", + "lastModified": "마지막 수정일", "move": "이동", - "moveMessage": "이동할 화일 또는 디렉토리를 선택하세요:", - "newArchetype": "원형을 유지하는 포스트를 생성합니다. 파일은 컨텐트 폴더에 생성됩니다.", - "newDir": "새 디렉토리", - "newDirMessage": "새 디렉토리 이름을 입력해주세요.", + "moveMessage": "파일/폴더의 새 위치를 선택하세요:", + "newArchetype": "아키타입을 기반으로 새 게시물을 만듭니다. 파일은 content 폴더에 생성됩니다.", + "newDir": "새 디렉터리", + "newDirMessage": "새 디렉터리 이름을 지정하세요.", "newFile": "새 파일", - "newFileMessage": "새 파일 이름을 입력해주세요.", - "numberDirs": "디렉토리 수", + "newFileMessage": "새 파일 이름을 지정하세요.", + "numberDirs": "디렉터리 수", "numberFiles": "파일 수", - "rename": "이름 변경", - "renameMessage": "새로운 이름을 입력하세요.", - "replace": "대체하기", - "replaceMessage": "동일한 파일 이름이 존재합니다. 현재 파일을 덮어쓸까요?\n", - "schedule": "일정", - "scheduleMessage": "이 글을 공개할 시간을 알려주세요.", - "show": "보기", + "rename": "이름 바꾸기", + "renameMessage": "새 이름을 입력하세요:", + "replace": "바꾸기", + "replaceMessage": "업로드하려는 파일 중 이름이 충돌하는 파일이 있습니다. 이 파일을 건너뛰고 업로드를 계속하거나 기존 파일을 바꾸시겠습니까?\n", + "schedule": "예약", + "scheduleMessage": "이 게시물의 게시를 예약할 날짜와 시간을 선택하세요.", + "show": "표시", "size": "크기", "upload": "업로드", - "uploadMessage": "업로드 옵션을 선택하세요." + "uploadFiles": "{files}개의 파일 업로드 중...", + "uploadMessage": "업로드할 옵션을 선택하세요.", + "optionalPassword": "선택적 비밀번호", + "resolution": "해상도", + "discardEditorChanges": "변경 사항을 취소하시겠습니까?" }, "search": { "images": "이미지", "music": "음악", "pdf": "PDF", - "pressToSearch": "검색하려면 엔터를 입력하세요", + "pressToSearch": "Enter 키를 눌러 검색...", "search": "검색...", "typeToSearch": "검색어 입력...", - "types": "Types", + "types": "유형", "video": "비디오" }, "settings": { "admin": "관리자", "administrator": "관리자", - "allowCommands": "명령 실행", - "allowEdit": "파일/디렉토리의 수정/변경/삭제 허용", - "allowNew": "파일/디렉토리 생성 허용", - "allowPublish": "새 포스트/페이지 생성 허용", + "allowCommands": "명령 실행 허용", + "allowEdit": "파일 또는 디렉터리 편집, 이름 바꾸기, 삭제 허용", + "allowNew": "새 파일 및 디렉터리 생성 허용", + "allowPublish": "새 게시물 및 페이지 게시 허용", "allowSignup": "사용자 가입 허용", - "avoidChanges": "(수정하지 않으면 비워두세요)", + "avoidChanges": "(변경하지 않으려면 비워두세요)", "branding": "브랜딩", - "brandingDirectoryPath": "브랜드 디렉토리 경로", - "brandingHelp": "File Browser 인스턴스는 이름, 로고, 스타일 등을 변경할 수 있습니다. 자세한 사항은 여기{0}에서 확인하세요.", + "brandingDirectoryPath": "브랜딩 디렉터리 경로", + "brandingHelp": "File Browser 인스턴스의 이름 변경, 로고 교체, 사용자 정의 스타일 추가, GitHub 외부 링크 비활성화를 통해 모양과 느낌을 사용자 지정할 수 있습니다.\n사용자 정의 브랜딩에 대한 자세한 내용은 {0}을(를) 확인하세요.", "changePassword": "비밀번호 변경", - "commandRunner": "명령 실행기", - "commandRunnerHelp": "이벤트에 해당하는 명령을 설정하세요. 줄당 1개의 명령을 적으세요. 환경 변수{0} 와 {1}이 사용가능하며, {0} 은 {1}에 상대 경로 입니다. 자세한 사항은 {2} 를 참조하세요.", - "commandsUpdated": "명령 수정됨!", - "createUserDir": "Auto create user home dir while adding new user", - "customStylesheet": "커스텀 스타일시트", - "defaultUserDescription": "아래 사항은 신규 사용자들에 대한 기본 설정입니다.", - "disableExternalLinks": "외부 링크 감추기", - "disableUsedDiskPercentage": "Disable used disk percentage graph", + "commandRunner": "명령어 실행기", + "commandRunnerHelp": "여기서 지정된 이벤트에서 실행될 명령어를 설정할 수 있습니다. 한 줄에 하나씩 작성해야 합니다. 환경 변수 {0} 및 {1}을(를) 사용할 수 있으며, {0}은(는) {1}에 상대적입니다. 이 기능과 사용 가능한 환경 변수에 대한 자세한 내용은 {2}을(를) 읽어보세요.", + "commandsUpdated": "명령어가 업데이트되었습니다!", + "createUserDir": "새 사용자 추가 시 사용자 홈 디렉터리 자동 생성", + "tusUploads": "청크 업로드", + "tusUploadsHelp": "File Browser는 청크 파일 업로드를 지원하여 불안정한 네트워크에서도 효율적이고 안정적이며 재개 가능하고 분할된 파일 업로드를 가능하게 합니다.", + "tusUploadsChunkSize": "요청의 최대 크기를 나타냅니다 (더 작은 업로드에는 직접 업로드가 사용됩니다). 바이트 크기를 나타내는 일반 정수 또는 10MB, 1GB 등과 같은 문자열을 입력할 수 있습니다.", + "tusUploadsRetryCount": "청크 업로드 실패 시 재시도 횟수.", + "userHomeBasePath": "사용자 홈 디렉터리의 기본 경로", + "userScopeGenerationPlaceholder": "범위가 자동으로 생성됩니다", + "createUserHomeDirectory": "사용자 홈 디렉터리 생성", + "customStylesheet": "사용자 정의 스타일시트", + "defaultUserDescription": "새 사용자의 기본 설정입니다.", + "disableExternalLinks": "외부 링크 비활성화 (문서 제외)", + "disableUsedDiskPercentage": "사용된 디스크 비율 그래프 비활성화", "documentation": "문서", - "examples": "예", - "executeOnShell": "쉘에서 실행", - "executeOnShellDescription": "기본적으로 File Browser 는 바이너리를 명령어로 호출하여 실행합니다. 쉘을 통해 실행하기를 원한다면, Bash 또는 PowerShell 에 필요한 인수와 플래그를 설정하세요. 사용자 명령어와 이벤트 훅에 모두 적용됩니다.", - "globalRules": "규칙에 대한 전역설정으로 모든 사용자에게 적용됩니다. 지정된 규칙은 사용자 설정을 덮어쓰기 합니다.", + "examples": "예시", + "executeOnShell": "셸에서 실행", + "executeOnShellDescription": "기본적으로 File Browser는 바이너리를 직접 호출하여 명령을 실행합니다. 대신 셸(예: Bash 또는 PowerShell)에서 실행하려면 필요한 인수 및 플래그와 함께 여기에 정의할 수 있습니다. 설정된 경우 실행하는 명령이 인수로 추가됩니다. 이는 사용자 명령과 이벤트 후크 모두에 적용됩니다.", + "globalRules": "이것은 전역 허용 및 차단 규칙 세트입니다. 모든 사용자에게 적용됩니다. 각 사용자 설정에서 특정 규칙을 정의하여 이 규칙을 재정의할 수 있습니다.", "globalSettings": "전역 설정", - "hideDotfiles": "숨김파일(dotfile)을 표시하지 않습니다.", - "insertPath": "경로 입력", - "insertRegex": "정규식 입력", + "hideDotfiles": "숨김 파일 숨기기", + "insertPath": "경로 삽입", + "insertRegex": "정규식 표현 삽입", "instanceName": "인스턴스 이름", "language": "언어", - "lockPassword": "사용자에 의한 비밀번호 변경을 허용하지 않음", - "newPassword": "새로운 비밀번호", - "newPasswordConfirm": "새로운 비밀번호 확인", - "newUser": "새로운 사용자", + "lockPassword": "사용자가 비밀번호를 변경하지 못하도록 잠금", + "newPassword": "새 비밀번호", + "newPasswordConfirm": "새 비밀번호 확인", + "newUser": "새 사용자", "password": "비밀번호", - "passwordUpdated": "비밀번호 수정 완료!", + "passwordUpdated": "비밀번호가 업데이트되었습니다!", "path": "경로", "perm": { - "create": "파일이나 디렉토리 생성하기", - "delete": "화일이나 디렉토리 삭제하기", + "create": "파일 및 디렉터리 생성", + "delete": "파일 및 디렉터리 삭제", "download": "다운로드", "execute": "명령 실행", "modify": "파일 편집", - "rename": "파일 이름 변경 또는 디렉토리 이동", - "share": "파일 공유하기" + "rename": "파일 및 디렉터리 이름 바꾸기 또는 이동", + "share": "파일 공유" }, "permissions": "권한", - "permissionsHelp": "사용자를 관리자로 만들거나 권한을 부여할 수 있습니다. 관리자를 선택하면, 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 현재 관리자만 할 수 있습니다.\n", + "permissionsHelp": "사용자를 관리자로 설정하거나 개별적으로 권한을 선택할 수 있습니다. \"관리자\"를 선택하면 다른 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 관리자의 권한으로 유지됩니다.\n", "profileSettings": "프로필 설정", - "ruleExample1": "점(.)으로 시작하는 모든 파일의 접근을 방지합니다.(예 .git, .gitignore)\n", - "ruleExample2": "Caddyfile파일의 접근을 방지합니다.", - "rules": "룰", - "rulesHelp": "사용자별로 규칙을 허용/방지를 지정할 수 있습니다. 방지된 파일은 보이지 않고 사용자들은 접근할 수 없습니다. 사용자의 접근 허용 범위와 관련해 정규표현식(regex)과 경로를 지원합니다.\n", + "ruleExample1": "모든 폴더에서 모든 숨김 파일(예: .git, .gitignore)에 대한 액세스를 방지합니다.\n", + "ruleExample2": "범위의 루트에 있는 Caddyfile이라는 파일에 대한 액세스를 차단합니다.", + "rules": "규칙", + "rulesHelp": "여기서 이 특정 사용자에 대한 허용 및 차단 규칙 세트를 정의할 수 있습니다. 차단된 파일은 목록에 표시되지 않으며 사용자가 액세스할 수 없습니다. 사용자의 범위에 상대적인 정규식 및 경로를 지원합니다.\n", "scope": "범위", - "settingsUpdated": "설정 수정됨!", + "setDateFormat": "정확한 날짜 형식 설정", + "settingsUpdated": "설정이 업데이트되었습니다!", "shareDuration": "공유 기간", - "shareManagement": "공유 내역 관리", - "singleClick": "한번 클릭으로 파일과 폴더를 열도록 합니다.", + "shareManagement": "공유 관리", + "shareDeleted": "공유가 삭제되었습니다!", + "singleClick": "파일 및 디렉터리를 열 때 한 번 클릭 사용", "themes": { - "dark": "다크테마", - "light": "라이트테마", + "default": "시스템 기본값", + "dark": "어둡게", + "light": "밝게", "title": "테마" }, "user": "사용자", "userCommands": "명령어", - "userCommandsHelp": "사용에게 허용할 명령어를 공백으로 구분하여 입력하세요. 예:\n", - "userCreated": "사용자 생성됨!", + "userCommandsHelp": "이 사용자가 사용할 수 있는 명령어 목록 (공백으로 구분). 예:\n", + "userCreated": "사용자가 생성되었습니다!", "userDefaults": "사용자 기본 설정", - "userDeleted": "사용자 삭제됨!", + "userDeleted": "사용자가 삭제되었습니다!", "userManagement": "사용자 관리", - "userUpdated": "사용자 수정됨!", + "userUpdated": "사용자가 업데이트되었습니다!", "username": "사용자 이름", "users": "사용자" }, "sidebar": { "help": "도움말", - "hugoNew": "Hugo New", + "hugoNew": "Hugo 새로 만들기", "login": "로그인", "logout": "로그아웃", "myFiles": "내 파일", - "newFile": "새로운 파일", - "newFolder": "새로운 폴더", + "newFile": "새 파일", + "newFolder": "새 폴더", "preview": "미리보기", "settings": "설정", - "signup": "가입하기", + "signup": "가입", "siteSettings": "사이트 설정" }, "success": { @@ -227,9 +257,9 @@ }, "time": { "days": "일", - "hours": "시", + "hours": "시간", "minutes": "분", "seconds": "초", - "unit": "Time Unit" + "unit": "시간 단위" } } From 56b80b6d9b4710538765ba7df5da1f03898f6b81 Mon Sep 17 00:00:00 2001 From: michioxd <80969068+michioxd@users.noreply.github.com> Date: Mon, 16 Jun 2025 23:47:20 +0700 Subject: [PATCH 20/82] feat: add Vietnamese translation (#3840) --- .../src/components/settings/Languages.vue | 1 + frontend/src/i18n/index.ts | 4 + frontend/src/i18n/vi.json | 265 ++++++++++++++++++ 3 files changed, 270 insertions(+) create mode 100644 frontend/src/i18n/vi.json diff --git a/frontend/src/components/settings/Languages.vue b/frontend/src/components/settings/Languages.vue index 2b8a7606..00129a28 100644 --- a/frontend/src/components/settings/Languages.vue +++ b/frontend/src/components/settings/Languages.vue @@ -38,6 +38,7 @@ export default { "sv-se": "Swedish (Sweden)", tr: "Türkçe", uk: "Українська", + vi: "Tiếng Việt", "zh-cn": "中文 (简体)", "zh-tw": "中文 (繁體)", }; diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index f0b0304b..9fcbc2c4 100644 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -23,6 +23,7 @@ import("dayjs/locale/sk"); import("dayjs/locale/sv"); import("dayjs/locale/tr"); import("dayjs/locale/uk"); +import("dayjs/locale/vi"); import("dayjs/locale/zh-cn"); import("dayjs/locale/zh-tw"); @@ -103,6 +104,9 @@ export function detectLocale() { case /^uk\b/.test(locale): locale = "uk"; break; + case /^vi\b/.test(locale): + locale = "vi"; + break; case /^sv-se\b/.test(locale): case /^sv\b/.test(locale): locale = "sv"; diff --git a/frontend/src/i18n/vi.json b/frontend/src/i18n/vi.json new file mode 100644 index 00000000..5dea8650 --- /dev/null +++ b/frontend/src/i18n/vi.json @@ -0,0 +1,265 @@ +{ + "buttons": { + "cancel": "Hủy", + "clear": "Xóa", + "close": "Đóng", + "continue": "Tiếp tục", + "copy": "Sao chép", + "copyFile": "Sao chép tập tin", + "copyToClipboard": "Sao chép vào clipboard", + "copyDownloadLinkToClipboard": "Sao chép liên kết tải xuống vào clipboard", + "create": "Tạo", + "delete": "Xóa", + "download": "Tải xuống", + "file": "Tập tin", + "folder": "Thư mục", + "fullScreen": "Toàn màn hình", + "hideDotfiles": "Ẩn tập tin ẩn", + "info": "Thông tin", + "more": "Thêm", + "move": "Di chuyển", + "moveFile": "Di chuyển tập tin", + "new": "Mới", + "next": "Tiếp theo", + "ok": "OK", + "permalink": "Lấy liên kết vĩnh viễn", + "previous": "Trước", + "preview": "Xem trước", + "publish": "Xuất bản", + "rename": "Đổi tên", + "replace": "Thay thế", + "reportIssue": "Báo cáo sự cố", + "save": "Lưu", + "schedule": "Lên lịch", + "search": "Tìm kiếm", + "select": "Chọn", + "selectMultiple": "Chọn nhiều", + "share": "Chia sẻ", + "shell": "Chuyển đổi shell", + "submit": "Gửi", + "switchView": "Chuyển chế độ xem", + "toggleSidebar": "Thanh bên", + "update": "Cập nhật", + "upload": "Tải lên", + "openFile": "Mở tệp", + "discardChanges": "Hủy bỏ thay đổi" + }, + "download": { + "downloadFile": "Tải xuống tệp tin", + "downloadFolder": "Tải xuống thư mục", + "downloadSelected": "Tải xuống đã chọn" + }, + "upload": { + "abortUpload": "Bạn có chắc chắn muốn hủy tải lên không?" + }, + "errors": { + "forbidden": "Bạn không có quyền truy cập vào nội dung này.", + "internal": "Đã xảy ra lỗi nghiêm trọng.", + "notFound": "Không thể truy cập vị trí này.", + "connection": "Không thể kết nối đến máy chủ." + }, + "files": { + "body": "Nội dung", + "closePreview": "Đóng xem trước", + "files": "Tập tin", + "folders": "Thư mục", + "home": "Trang chủ", + "lastModified": "Sửa đổi lần cuối", + "loading": "Đang tải...", + "lonely": "Không có gì ở đây...", + "metadata": "Siêu dữ liệu", + "multipleSelectionEnabled": "Đã bật chọn nhiều", + "name": "Tên", + "size": "Kích thước", + "sortByLastModified": "Sắp xếp theo ngày sửa đổi", + "sortByName": "Sắp xếp theo tên", + "sortBySize": "Sắp xếp theo kích thước", + "noPreview": "Không có bản xem trước cho tập tin này." + }, + "help": { + "click": "chọn tập tin hoặc thư mục", + "ctrl": { + "click": "chọn nhiều tập tin hoặc thư mục", + "f": "mở tìm kiếm", + "s": "lưu tập tin hoặc tải thư mục hiện tại" + }, + "del": "xóa các mục đã chọn", + "doubleClick": "mở tập tin hoặc thư mục", + "esc": "hủy chọn và/hoặc đóng hộp thoại", + "f1": "mở trợ giúp này", + "f2": "đổi tên tập tin", + "help": "Trợ giúp" + }, + "login": { + "createAnAccount": "Tạo tài khoản", + "loginInstead": "Đã có tài khoản", + "password": "Mật khẩu", + "passwordConfirm": "Xác nhận mật khẩu", + "passwordsDontMatch": "Mật khẩu không khớp", + "signup": "Đăng ký", + "submit": "Đăng nhập", + "username": "Tên người dùng", + "usernameTaken": "Tên người dùng đã tồn tại", + "wrongCredentials": "Thông tin đăng nhập không đúng" + }, + "permanent": "Vĩnh viễn", + "prompts": { + "copy": "Sao chép", + "copyMessage": "Chọn vị trí để sao chép tệp của bạn:", + "currentlyNavigating": "Đang điều hướng tại:", + "deleteMessageMultiple": "Bạn có chắc chắn muốn xóa {count} tệp không?", + "deleteMessageSingle": "Bạn có chắc chắn muốn xóa tệp/thư mục này không?", + "deleteMessageShare": "Bạn có chắc chắn muốn xóa chia sẻ này ({path}) không?", + "deleteUser": "Bạn có chắc chắn muốn xóa người dùng này không?", + "deleteTitle": "Xóa tệp", + "displayName": "Tên hiển thị:", + "download": "Tải xuống tệp", + "downloadMessage": "Chọn định dạng bạn muốn tải xuống.", + "error": "Đã xảy ra lỗi", + "fileInfo": "Thông tin tệp", + "filesSelected": "{count} tệp đã được chọn.", + "lastModified": "Chỉnh sửa lần cuối", + "move": "Di chuyển", + "moveMessage": "Chọn vị trí mới cho tệp/thư mục của bạn:", + "newArchetype": "Tạo một bài viết mới dựa trên nguyên mẫu. Tệp của bạn sẽ được tạo trong thư mục nội dung.", + "newDir": "Thư mục mới", + "newDirMessage": "Đặt tên cho thư mục mới của bạn.", + "newFile": "Tệp mới", + "newFileMessage": "Đặt tên cho tệp mới của bạn.", + "numberDirs": "Số lượng thư mục", + "numberFiles": "Số lượng tệp", + "rename": "Đổi tên", + "renameMessage": "Nhập tên mới cho", + "replace": "Thay thế", + "replaceMessage": "Một trong những tệp bạn đang cố tải lên có tên trùng lặp. Bạn có muốn bỏ qua tệp này và tiếp tục tải lên hay thay thế tệp hiện có?\n", + "schedule": "Lên lịch", + "scheduleMessage": "Chọn ngày và giờ để lên lịch xuất bản bài viết này.", + "show": "Hiển thị", + "size": "Kích thước", + "upload": "Tải lên", + "uploadFiles": "Đang tải lên {files} tệp...", + "uploadMessage": "Chọn một tùy chọn để tải lên.", + "optionalPassword": "Mật khẩu tùy chọn", + "resolution": "Độ phân giải", + "discardEditorChanges": "Bạn có chắc chắn muốn hủy bỏ các thay đổi đã thực hiện không?" + }, + "search": { + "images": "Hình ảnh", + "music": "Nhạc", + "pdf": "PDF", + "pressToSearch": "Nhấn Enter để tìm kiếm...", + "search": "Tìm kiếm...", + "typeToSearch": "Nhập để tìm kiếm...", + "types": "Loại", + "video": "Video" + }, + "settings": { + "admin": "Quản trị viên", + "administrator": "Người quản trị", + "allowCommands": "Thực thi lệnh", + "allowEdit": "Chỉnh sửa, đổi tên và xóa tệp hoặc thư mục", + "allowNew": "Tạo tệp và thư mục mới", + "allowPublish": "Xuất bản bài viết và trang mới", + "allowSignup": "Cho phép người dùng đăng ký", + "avoidChanges": "(để trống để tránh thay đổi)", + "branding": "Thương hiệu", + "brandingDirectoryPath": "Đường dẫn thư mục thương hiệu", + "brandingHelp": "Bạn có thể tùy chỉnh giao diện và trải nghiệm của File Browser bằng cách thay đổi tên, thay thế logo, thêm kiểu tùy chỉnh và thậm chí vô hiệu hóa các liên kết bên ngoài đến GitHub.\nĐể biết thêm thông tin về tùy chỉnh thương hiệu, vui lòng xem {0}.", + "changePassword": "Đổi mật khẩu", + "commandRunner": "Trình chạy lệnh", + "commandRunnerHelp": "Tại đây, bạn có thể thiết lập các lệnh được thực thi trong các sự kiện đã định. Bạn phải viết một lệnh trên mỗi dòng. Các biến môi trường {0} và {1} sẽ có sẵn, trong đó {0} tương đối với {1}. Để biết thêm thông tin về tính năng này và các biến môi trường có sẵn, vui lòng đọc {2}.", + "commandsUpdated": "Lệnh đã được cập nhật!", + "createUserDir": "Tự động tạo thư mục chính của người dùng khi thêm người dùng mới", + "tusUploads": "Tải lên theo phân đoạn", + "tusUploadsHelp": "File Browser hỗ trợ tải lên tệp theo phân đoạn, giúp việc tải lên trở nên hiệu quả, đáng tin cậy, có thể tiếp tục và phù hợp với mạng không ổn định.", + "tusUploadsChunkSize": "Kích thước tối đa của một yêu cầu (tải lên trực tiếp sẽ được sử dụng cho các tệp nhỏ hơn). Bạn có thể nhập một số nguyên biểu thị kích thước theo byte hoặc một chuỗi như 10MB, 1GB, v.v.", + "tusUploadsRetryCount": "Số lần thử lại nếu một phân đoạn tải lên thất bại.", + "userHomeBasePath": "Đường dẫn cơ bản của thư mục chính người dùng", + "userScopeGenerationPlaceholder": "Phạm vi sẽ được tạo tự động", + "createUserHomeDirectory": "Tạo thư mục chính của người dùng", + "customStylesheet": "Bảng định dạng tùy chỉnh", + "defaultUserDescription": "Đây là cài đặt mặc định cho người dùng mới.", + "disableExternalLinks": "Vô hiệu hóa các liên kết bên ngoài (trừ tài liệu)", + "disableUsedDiskPercentage": "Vô hiệu hóa biểu đồ phần trăm dung lượng đã sử dụng", + "documentation": "tài liệu", + "examples": "Ví dụ", + "executeOnShell": "Thực thi trên shell", + "executeOnShellDescription": "Theo mặc định, File Browser thực thi lệnh bằng cách gọi trực tiếp các tệp nhị phân của chúng. Nếu bạn muốn chạy chúng trên shell (chẳng hạn như Bash hoặc PowerShell), bạn có thể định nghĩa tại đây cùng với các tham số và cờ cần thiết. Nếu được đặt, lệnh bạn thực thi sẽ được thêm làm đối số. Điều này áp dụng cho cả lệnh người dùng và hook sự kiện.", + "globalRules": "Đây là tập hợp quy tắc chung về quyền cho phép và từ chối. Chúng áp dụng cho mọi người dùng. Bạn có thể đặt quy tắc riêng cho từng người dùng để ghi đè các quy tắc chung này.", + "globalSettings": "Cài đặt chung", + "hideDotfiles": "Ẩn tệp ẩn (dotfiles)", + "insertPath": "Nhập đường dẫn", + "insertRegex": "Nhập biểu thức regex", + "instanceName": "Tên phiên bản", + "language": "Ngôn ngữ", + "lockPassword": "Ngăn người dùng thay đổi mật khẩu", + "newPassword": "Mật khẩu mới của bạn", + "newPasswordConfirm": "Xác nhận mật khẩu mới", + "newUser": "Người dùng mới", + "password": "Mật khẩu", + "passwordUpdated": "Mật khẩu đã được cập nhật!", + "path": "Đường dẫn", + "perm": { + "create": "Tạo tệp và thư mục", + "delete": "Xóa tệp và thư mục", + "download": "Tải xuống", + "execute": "Thực thi lệnh", + "modify": "Chỉnh sửa tệp", + "rename": "Đổi tên hoặc di chuyển tệp và thư mục", + "share": "Chia sẻ tệp" + }, + "permissions": "Quyền", + "permissionsHelp": "Bạn có thể đặt người dùng làm quản trị viên hoặc chọn quyền riêng lẻ. Nếu chọn \"Người quản trị\", tất cả các tùy chọn khác sẽ tự động được chọn. Việc quản lý người dùng vẫn là đặc quyền của quản trị viên.\n", + "profileSettings": "Cài đặt hồ sơ", + "ruleExample1": "ngăn truy cập vào bất kỳ tệp ẩn nào (chẳng hạn như .git, .gitignore) trong mọi thư mục.\n", + "ruleExample2": "chặn truy cập vào tệp có tên Caddyfile trong thư mục gốc của phạm vi.", + "rules": "Quy tắc", + "rulesHelp": "Tại đây, bạn có thể xác định một tập hợp quy tắc cho phép hoặc từ chối cho người dùng cụ thể này. Các tệp bị chặn sẽ không hiển thị trong danh sách và người dùng không thể truy cập chúng. Chúng tôi hỗ trợ regex và đường dẫn tương đối với phạm vi của người dùng.\n", + "scope": "Phạm vi", + "setDateFormat": "Đặt định dạng ngày chính xác", + "settingsUpdated": "Cài đặt đã được cập nhật!", + "shareDuration": "Thời gian chia sẻ", + "shareManagement": "Quản lý chia sẻ", + "shareDeleted": "Chia sẻ đã bị xóa!", + "singleClick": "Dùng một lần nhấp để mở tệp và thư mục", + "themes": { + "default": "Mặc định hệ thống", + "dark": "Tối", + "light": "Sáng", + "title": "Chủ đề" + }, + "user": "Người dùng", + "userCommands": "Lệnh", + "userCommandsHelp": "Danh sách lệnh được phân tách bằng khoảng trắng dành cho người dùng này. Ví dụ:\n", + "userCreated": "Người dùng đã được tạo!", + "userDefaults": "Cài đặt mặc định của người dùng", + "userDeleted": "Người dùng đã bị xóa!", + "userManagement": "Quản lý người dùng", + "userUpdated": "Người dùng đã được cập nhật!", + "username": "Tên người dùng", + "users": "Người dùng" + }, + "sidebar": { + "help": "Trợ giúp", + "hugoNew": "Hugo New", + "login": "Đăng nhập", + "logout": "Đăng xuất", + "myFiles": "Tập tin của tôi", + "newFile": "Tập tin mới", + "newFolder": "Thư mục mới", + "preview": "Xem trước", + "settings": "Cài đặt", + "signup": "Đăng ký", + "siteSettings": "Cài đặt trang" + }, + "success": { + "linkCopied": "Liên kết đã được sao chép!" + }, + "time": { + "days": "Ngày", + "hours": "Giờ", + "minutes": "Phút", + "seconds": "Giây", + "unit": "Đơn vị" + } +} \ No newline at end of file From 56a0f9244bfb9ff0f51307a9fcf652eff4b096a6 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 16 Jun 2025 20:18:42 +0200 Subject: [PATCH 21/82] chore(release): 2.32.1 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d414dcb..7ef7bda8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,31 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.32.1](https://github.com/filebrowser/filebrowser/compare/v2.32.0...v2.32.1) (2025-06-16) + + +### Features + +* add Vietnamese translation ([#3840](https://github.com/filebrowser/filebrowser/issues/3840)) ([56b80b6](https://github.com/filebrowser/filebrowser/commit/56b80b6d9b4710538765ba7df5da1f03898f6b81)) +* improve pt-br translations with new keys and refinements ([#4903](https://github.com/filebrowser/filebrowser/issues/4903)) ([a882fb6](https://github.com/filebrowser/filebrowser/commit/a882fb6c85ab6ccc845ed0bf3908d8e5e60ce346)) +* update translation ko.json ([#3852](https://github.com/filebrowser/filebrowser/issues/3852)) ([d9ebd65](https://github.com/filebrowser/filebrowser/commit/d9ebd65ffcf9b2166fec708d51849796d12b16e0)) + + +### Bug Fixes + +* err shadowing lint ([c606a01](https://github.com/filebrowser/filebrowser/commit/c606a01a2d20932fb32ee896234d57631f8c47e4)) +* generate random admin password on quick setup ([a46acba](https://github.com/filebrowser/filebrowser/commit/a46acba5f92ee044661880d6ae349e289d984328)), closes [#3646](https://github.com/filebrowser/filebrowser/issues/3646) +* imports lint ([54b91b8](https://github.com/filebrowser/filebrowser/commit/54b91b8ff0b8ee1f02f72425ab97d27a5d942fc3)) +* set videojs locale ([#3742](https://github.com/filebrowser/filebrowser/issues/3742)) ([71a8f56](https://github.com/filebrowser/filebrowser/commit/71a8f5662c207e3cd4ee714a5b5a961121f510cd)) + + +### Build + +* **deps-dev:** bump vite from 6.0.11 to 6.1.6 in /frontend ([#3886](https://github.com/filebrowser/filebrowser/issues/3886)) ([5355629](https://github.com/filebrowser/filebrowser/commit/5355629fd1e7bd85ee3222fca22da899ba23ea95)) +* **deps:** bump golang.org/x/crypto from 0.31.0 to 0.35.0 ([#3865](https://github.com/filebrowser/filebrowser/issues/3865)) ([0ba9505](https://github.com/filebrowser/filebrowser/commit/0ba9505a19cb369653fc9f8260dc02fcc6587629)) +* **deps:** bump golang.org/x/net from 0.33.0 to 0.38.0 ([#3869](https://github.com/filebrowser/filebrowser/issues/3869)) ([cfea84f](https://github.com/filebrowser/filebrowser/commit/cfea84fd5e7ec9c1d2366293e5db12baaa4e3a81)) +* **deps:** bump vue-i18n from 11.0.1 to 11.1.2 in /frontend ([#3786](https://github.com/filebrowser/filebrowser/issues/3786)) ([35d1c09](https://github.com/filebrowser/filebrowser/commit/35d1c092434b80b22c89a614a02122e9f5965b39)) + ## [2.32.0](https://github.com/filebrowser/filebrowser/compare/v2.31.2...v2.32.0) (2025-01-31) From c34c0afecf3242b16ad5d5584cd90a6ad323361c Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 09:05:21 +0200 Subject: [PATCH 22/82] feat: updated for project File Browser (#5159) Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> --- frontend/src/i18n/ru.json | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/frontend/src/i18n/ru.json b/frontend/src/i18n/ru.json index bb6e8c92..440e285b 100644 --- a/frontend/src/i18n/ru.json +++ b/frontend/src/i18n/ru.json @@ -3,14 +3,17 @@ "cancel": "Отмена", "clear": "Очистить", "close": "Закрыть", + "continue": "Продолжить", "copy": "Копировать", "copyFile": "Скопировать файл", "copyToClipboard": "Скопировать в буфер", + "copyDownloadLinkToClipboard": "Скопировать ссылку в буфер", "create": "Создать", "delete": "Удалить", "download": "Скачать", "file": "Файл", "folder": "Папка", + "fullScreen": " Развернуть на весь экран", "hideDotfiles": "Скрыть точечные файлы", "info": "Инфо", "more": "Еще", @@ -21,6 +24,7 @@ "ok": "OK", "permalink": "Получить постоянную ссылку", "previous": "Назад", + "preview": "Предпросмотр", "publish": "Опубликовать", "rename": "Переименовать", "replace": "Перезаписать", @@ -37,13 +41,17 @@ "toggleSidebar": "Боковая панель", "update": "Обновить", "upload": "Загрузить", - "openFile": "Открыть файл" + "openFile": "Открыть файл", + "discardChanges": "Отказаться" }, "download": { "downloadFile": "Скачать файл", "downloadFolder": "Загрузить папку", "downloadSelected": "Скачать выбранное" }, + "upload": { + "abortUpload": "Вы действительно, что хотите прервать операцию?" + }, "errors": { "forbidden": "У вас нет прав доступа к этому.", "internal": "Что-то пошло не так.", @@ -72,7 +80,7 @@ "click": "выбрать файл или каталог", "ctrl": { "click": "выбрать несколько файлов или каталогов", - "f": "открыть поиск", + "f": "открытые поиски", "s": "скачать файл или текущий каталог" }, "del": "удалить выбранные элементы", @@ -102,6 +110,7 @@ "deleteMessageMultiple": "Удалить эти файлы ({count})?", "deleteMessageSingle": "Удалить этот файл/каталог?", "deleteMessageShare": "Удалить этот общий файл/каталог ({path})?", + "deleteUser": "Вы действительно, хотите удалить пользователя?", "deleteTitle": "Удалить файлы", "displayName": "Отображаемое имя:", "download": "Скачать файлы", @@ -111,7 +120,7 @@ "filesSelected": "Файлов выбрано: {count}.", "lastModified": "Последнее изменение", "move": "Переместить", - "moveMessage": "Переместить в:", + "moveMessage": "Выберите новый домашний каталог для ваших файлов/папок:", "newArchetype": "Создайте новую запись на основе архетипа. Файл будет создан в каталоге.", "newDir": "Новый каталог", "newDirMessage": "Имя нового каталога.", @@ -128,8 +137,11 @@ "show": "Показать", "size": "Размер", "upload": "Загрузить", + "uploadFiles": "Загружаю {files} файлы...", "uploadMessage": "Выберите вариант для загрузки.", - "optionalPassword": "Необязательный пароль" + "optionalPassword": "Необязательный пароль", + "resolution": "Разрешение", + "discardEditorChanges": "Вы действительно желаете отменить ваши правки?" }, "search": { "images": "Изображения", @@ -158,6 +170,13 @@ "commandRunnerHelp": "Здесь вы можете установить команды, которые будут выполняться в указанных событиях. Вы должны указать по одной команде в каждой строке. Переменные среды {0} и {1} будут доступны, будучи {0} относительно {1}. Дополнительные сведения об этой функции и доступных переменных среды см. В {2}.", "commandsUpdated": "Команды обновлены!", "createUserDir": "Автоматическое создание домашнего каталога пользователя при добавлении нового пользователя", + "tusUploads": "Загруженные файлы", + "tusUploadsHelp": " File Browser поддерживает загрузку файлов по частям, что позволяет работать в сетях низкого качества.", + "tusUploadsChunkSize": "Указывает максимальный размер запроса (мелкие загрузки пойдут напрямую). Вы можете ввести простое целое число, обозначающее размер ввода в байтах, или строку, например 10MB, 1GB и т. д.", + "tusUploadsRetryCount": "Количество повторных попыток, которые необходимо выполнить, если фрагмент не удалось загрузить.", + "userHomeBasePath": "Путь к домашнему каталогу пользователя", + "userScopeGenerationPlaceholder": "Область действия будет сгенерирована автоматически", + "createUserHomeDirectory": "Создать домашний каталог пользователя", "customStylesheet": "Свой стиль", "defaultUserDescription": "Это настройки по умолчанию для новых пользователей.", "disableExternalLinks": "Отключить внешние ссылки (кроме документации)", @@ -196,7 +215,7 @@ "ruleExample2": "блокирует доступ к файлу с именем Caddyfile в корневой области.", "rules": "Права", "rulesHelp": "Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны для пользователя. Есть поддержка регулярных выражений и относительных путей.\n", - "scope": "Корень", + "scope": "Область", "setDateFormat": "Установить точный формат даты", "settingsUpdated": "Настройки применены!", "shareDuration": "Время расшаренной ссылки", @@ -204,6 +223,7 @@ "shareDeleted": "Расшаренная ссылка удалена!", "singleClick": "Открытие файлов и каталогов одним кликом", "themes": { + "default": " Системные настройки по умолчанию", "dark": "Темная", "light": "Светлая", "title": "Тема" From 0cca7d8dc016bae3fc671cf46772c9fbe4f92d96 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 17 Jun 2025 11:37:15 +0200 Subject: [PATCH 23/82] docs: move most docs to main repository (#5141) --- .github/PULL_REQUEST_TEMPLATE.md | 1 + README.md | 28 ++--- docs/assets/1.jpg | Bin 0 -> 66296 bytes docs/assets/2.jpg | Bin 0 -> 119309 bytes docs/assets/3.jpg | Bin 0 -> 154304 bytes docs/assets/4.jpg | Bin 0 -> 217335 bytes docs/assets/5.jpg | Bin 0 -> 133646 bytes docs/assets/6.jpg | Bin 0 -> 61661 bytes docs/code-of-conduct.md | 46 ++++++++ docs/configuration.md | 148 +++++++++++++++++++++++++ docs/contributing.md | 91 +++++++++++++++ docs/installation.md | 85 ++++++++++++++ SECURITY.md => docs/security.md | 0 frontend/src/views/settings/Global.vue | 4 +- transifex.yml | 2 +- 15 files changed, 388 insertions(+), 17 deletions(-) create mode 100644 docs/assets/1.jpg create mode 100644 docs/assets/2.jpg create mode 100644 docs/assets/3.jpg create mode 100644 docs/assets/4.jpg create mode 100644 docs/assets/5.jpg create mode 100644 docs/assets/6.jpg create mode 100644 docs/code-of-conduct.md create mode 100644 docs/configuration.md create mode 100644 docs/contributing.md create mode 100644 docs/installation.md rename SECURITY.md => docs/security.md (100%) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 873df269..a8efcb42 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,5 +11,6 @@ Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/). - [ ] I am aware the project is currently in maintenance-only mode. See [README](https://github.com/filebrowser/community/blob/master/README.md) +- [ ] I am aware that translations MUST be made through [Transifex](https://app.transifex.com/file-browser/file-browser/) and that this PR is NOT a translation update - [ ] I am making a PR against the `master` branch. - [ ] I am sure File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md). diff --git a/README.md b/README.md index d49de48e..dc1eb3e9 100644 --- a/README.md +++ b/README.md @@ -25,28 +25,28 @@ filebrowser provides a file managing interface within a specified directory and [issues]: https://github.com/filebrowser/filebrowser/issues [discussions]: https://github.com/filebrowser/filebrowser/discussions -## Demo - -URL: https://demo.filebrowser.org/ - -Credentials: `demo`/`demo` - ## Features -Please refer to our docs at [https://filebrowser.org/features](https://filebrowser.org/features) +File Browser is a **create-your-own-cloud-kind** of software where you can install it on a server, direct it to a path and then access your files through a nice web interface. You have many available features! + +| Easy Login System | Sleek Interface | User Management | +| :----------------------: | :----------------------: | :----------------------: | +| ![](./docs/assets/1.jpg) | ![](./docs/assets/2.jpg) | ![](./docs/assets/3.jpg) | + + +| File Editing | Custom Commands | Customization | +| :----------------------: | :----------------------: | :----------------------: | +| ![](./docs/assets/4.jpg) | ![](./docs/assets/5.jpg) | ![](./docs/assets/6.jpg) | + ## Install -For installation instructions please refer to our docs at [https://filebrowser.org/installation](https://filebrowser.org/installation). +For information on how to install File Browser, please check [docs/installation.md](./docs/installation.md). ## Configuration -[Authentication Method](https://filebrowser.org/configuration/authentication-method) - You can change the way the user authenticates with the filebrowser server - -[Command Runner](https://filebrowser.org/configuration/command-runner) - The command runner is a feature that enables you to execute any shell command you want before or after a certain event. - -[Custom Branding](https://filebrowser.org/configuration/custom-branding) - You can customize your File Browser installation by change its name to any other you want, by adding a global custom style sheet and by using your own logotype if you want. +For information on how to configure File Browser, please check [docs/configuration.md](./docs/configuration.md). ## Contributing -If you're interested in contributing to this project, our docs are best places to start [https://filebrowser.org/contributing](https://filebrowser.org/contributing). +For information on how to contribute to the project, including how translations are managed, please check [docs/contributing.md](./docs/contributing.md). diff --git a/docs/assets/1.jpg b/docs/assets/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..413e50adf7ed02f4d61104354e51841c84e64e2e GIT binary patch literal 66296 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

a`-*b0EUV}9Nt?2JWEr_K4Cz7f+=bwyxO&| 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 literal 0 HcmV?d00001 diff --git a/docs/assets/3.jpg b/docs/assets/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34ba26f7374536bb8cf7550fa24cc1a3eab0adea GIT binary patch literal 154304 zcmeEv1wd8F*Z3s_5lQKm5~KvAQ&2$~rCX3L=?+CjNs*LP5RvX~iASe&OLsgv{})_$ z*ELr6w|@Koe&1dm_su^!py2SX0PV!*&*z#LTrmq7tx;b4ws{dmA2z`>tFggp%c zPmYgpur{z@4#H7Ca25_Mg${=fW=)#9m`6@uwTi;yT5_K*!aPYlh@8HT>hywZgqZ%+ zKxXt?`R;p)DyP&9ux(!aT}ch^1q}^3{(SysL_w<|m{w~8H>SdH~C#I{ix3&kCdp@;YJgJ80ZTsvs#)=#TQBKtWkQg=(G1`cXiT)QQ+1Yw$tr zk5HczS;6v@)7+O%)bk;M#MJ_32}%7@;S(vpRPtB6V+jL4VTJ0-m^8R2wZ(Ef$2{9ppqs4L;#*%tq3~@L-Q2CAU_BH0tqZa2_gWL7?-HwE5s-P zcu^1&R#XD>35Wn7!ApFZ_&M0miIWM2VFJK|$6=W6qEGIDM1XUcWSH(zjI!E_mc*kl zNEnx>fT(k}Ix>UKF0i7NF)$LRvfYH8y>gSnZ@0z`ak{AOuT5f}KVLbwQ>fLN+;$1d z6nwKjzVMafWJsu6!c(GC!D?Tn1^@|B02T?B8lb|2L4rpT z1WCAql?8zNf=}F$uDT0dft8`A6w(6VtK9*zr{v#55C&v)Isoau3>Bu(RRExB=%5!{ zmKy@#ZvYZ!HoS_pu?MiNGhQPJ2HikHN4${w#*%cJaDU3Hw;(^MYq_O-;PZ2l4jR6Lu241J$YbefG+*@hBk{P#_;F{81&QIAM&On{8 z!wk&bKT(=uK6l)$dqx0nM7MKTy2-prjGHW#ZB;@66#(zfmUji|G-w}}Fv(8L2!&jXZCuFwRWJH|OSP_PJSVGn?3RG^tkfH=nncU%O6 z91|T@H0V3YlHI%X3I3_2Cxvo7<%3_x?To zXFAyOpvH_uv&^<&xbER>z)}0@3Bu1!fg|&)`oRQ&-Z;=w!J2V)0gmSjiPnT5WA^LC zTE=+@|JP5;ciYT;5w`!M)09%7$W)utVp6iv?;GKlG|cMOiZz%<(Yf=5-2W7G)g9*5 zF%7hs7vLH0mdWvjGpW|`7eJJjPP5;S=8`LKDu}8QZfp7i1j2duzty|zQ~>~$F|Dna z4zO#Mf(Uy?qN4pkUrg*&cMv0pMM~<1D2VE0FutC*1G(YB+1=O8F8dymdy&_pU3Sf- zWa&`%It2?ezPn(^+3GS^cL2{P&HQx!Q?c?9N(7&Xq-B|5!DmQ_}UpnCNlsJ4aVql{0>H{!X4Vjs9Wz1HLegax>q9DBv4hI{f=UVGAWSO{K$0O1i zl;R2$Qu~D6mt>$?_)GCil2umZN^jl^Dm`KUd!>+24Xuwbv-06GPY>S*0EB$H5>Cd= zd+HhQ=iC9f)=~r?4Yjm4(19BCbr}FIxQj&Ce9UiB_%-7Y*xgQaL`1R~eGXBNbBcdK z^jJyYtWh#k6U2#~++AN&+_mNBnr`fzzLDc9R#TOIm7|cGzd>Pk+o^_ptiM{*(5{SG zp?%btF#Ir3gL6ogm~yD>=AvFJOW!m^$A5VHvQu9!>IKE;9hcV@)?1jw{qwAL_I4U= z?4nFKdG<@sIq@G{9iFs1^rcfIsdG3u^v^P1OUvzi9%H36ez3`-kEXfo=Xlxuq}o4v zdg7sIE^VS+|6sS-^Adn1;C%!ZXqjOtgEWS^>a` zH|6L0%8WQSPMRX(X}JMC`lExu4xiK<{e19XSkyhOvBuofAfp20eOXY z!1f-tHz!CDn6?HB0$8SQS4doDK>q;XO?PVdjGWnh0j8Z@_KAT@`b3Nq?gRtewRIrq zm&1pv0!(43XZoSpv)Q_XoRV{X$@&XlQ^t0PaOQ6=O@Z<#q*YG2h5;v*hE1BR1(Jhn zuq!2VaAlGwQJpOm1Yqh?My?^b5cw6HutHT-401I^EbC9odvOBz^h8SP=y|)EI3L}1 z@XCM%qUpcMzpRInj-gL=dvf*Bu6Wo9k*aMW7z0EiCKkk*|0e&7^kAmEwoA&}l74A_ z39ZAHVB^6T?BF{<=*QE?-*eP7&RIerxER_~CiA3GmAg_^8X4{Yj1aW75b81@U6X%M z=BC%ba=Q5dh#fA&?L=eJ0*n@o+<%BW>+J^JA1d%IWW0i*Xyx<_0wqW1DrkYgjb7t! zbby4eZRbF-x_y1PmNa;w-*9Rtx@k}&&S4djoIoGg^&e@X=$%@ zH_ml8fh_-I!$hY;>3AE%Ez*0t>F}HVw?J@*$i(3&ih8OHVrx%GWZJdEL;K~7om$~` z0A}?nQv-2bKPVH;we|0i>~E_c>`UF!`gz3gT`|#c0F~-yj~rmI{97f*qaowvc2h&9 z!94n{8;ZQpws`?XC@+IwW9Rs|aj(TPG2=3F=1zI9!7X~5^78ka%sb{eaEiuqFz*lB z-?G@c@eU*Fk_67_t^>vnBQK3&Ff`g(r@MFQBPI8##g`6WC3)0?FED`2XVROZ}Kh!@X6e(6@c104=- z!i{3<{;h`_i_n!q;v{x{o0oEu{Ts=JjusiVTzsSvn}#lDI0_Cus@h3|_O#e+a|MCU zQI%T%N3Qp(<;+}7XUXv1Y_$tz+teVt4$|=^_r6+CeZ-nE!{V5p$xQMe68J*#f{;D3<0N@N3SC@f_D~+|^{-tB`hEDhJDsE_=>)qC{ zniZhyyO&MM(UaCYu?`V$Wn(=IowRl_*cOoB<$p?0tn%VJ82*Oxx7Fd8BqC;_aT0LZ zE=QUaah3<=IJShP$#nqix$!`kM)GF&N`^0NEDb2<(9N!tg*i9@aEkg$zsd3)DVR_k ztA+2t`#uzliy=iX;6$9RuCBNSX7r?xeP6LZV8K)V0r1x^|DZtX4zrv`^P>Nr{#WS0 z_g3-SUxw>8+lHu&zitM9Pf5D2y;IJ=3?x?uF4|W7J!Jnnm2|}g>=gvR%_rld2Z$z# z1K&%DtFNTo$@zdyzCS$UVkwvHdPzfHic0?e?krnLf@<8dc%XW^@b0TkRH(-_K5gFV z6cy+#*Jq>SS|GZ5;F~0sir>#sFbVaegCm!X9Q#}23QHuGDzjy}3(MGy0~Ll%I_TGZ zxJqLA!0FXYZ#QO5E!wTF+eMgwj1nwR5Oqzup!Ae5i;BEBEJ!gh z?TvW|V%VS#?U6p~U;E7uz4=h)%n9iB^XF4v?L-SD>VMY9^c=GwxWp+-sis@STJ z(pKvS7v`_K4C1ktu@Ac}LPy6Jj3fYVjYpcKiXnuT@u>+4pN$8pghn2JWAd^S5qZB zStYAGvt2Pqe#>vECGTAhNghvaW^IZiDS{{c{C)rYL@z(Awogj`gbT&w%`@A-IBy<#a*OVN#)B-Z z8G%~%NszWK-t+7KEeYS_IO!LU-|NRcSApTtPpUEo836F}uSR@TkS|L2HQ?!h^eumo z;unw4N1rdE{RV_1kq0#Jh*vDwx8YI}dnm5)zw?6R(r` zdK*;sUpjus_Kwx2w#I)bADh0EA=+yi40jQ)_p1$@tD6MyA{X8f4PC2A^$2>0=ag_)h*sraZ7ZBP; zOx-a{D0WrbP$x1TcDpo82+27+U&qb6|%yTSE?64NEKTue8o6V zi(HV>_vFRz?;-xc55}LG^$x)4(#$&#EuWR9*>H{Ar)zN2-M-H4R6dE;wLuucbfJ0| zQnW*wx)#6RzI*@StV-*6YsWiHeOOJ-*L$tLjSJBzH3b)pNnfwfB}|mi*M#5OB^{mI z;>Fi5uoo$6XH8Bwzh!QJ_N(*rA4K}&C0mxxR|mr1&lKM^lR^UVv;N57uU-Eu){p4z zUv2$7ZJ}DUD}=HuG9_OA7LSuT;adpbo%ds75nS~_cD18rs^742)DfWHT(HY`uW`<5 z0p3`|bDm@?Ij|Y`outXUuE%IUn{Nmw%j)j1e2NWIfoqSaF4X*nu(&bL-WNps=c?mU zd|aL0vQiG`5|Qyv=SJmCaM@ks^agx)Lin!yIp;&0Vyq~g9z)`}lAhrsU?_ma!LdiL z)%M98{xB2u#xe`TAhL_#yG08NV?HyDDf<#X7x&L=crqt_4*m-efgf9lds_Y3P#`!Ykms67)hqng$|V$hc6~bOKG^(9sv^5)|p$Z_A#~> zL!e#`d)}$uX`z}g%M-DSn>98{mVEx`c>PN8dlElkOe7P7fALR$+=0KpVx$5>nCHp= z=?}&94Dj89AECNRuQNZSYT;*|szm|dpBf4O#Kb>}<&U@NPsHabtl1*1-29%Myl3d; z#!b(KLyiSwvOgj5C)t0$nSsv%107p0vXyLg*<;r&>ShETvM;W+UfA$EbzkOBr1_I< z6qB&Euc3S%phAQ^Gv+T@jm#%`yZVOj`OUoP7vG3-1OJp)Yvk&9fc)OY-rTWvgM(*E zjxXY#mFk8x-Nua<5D5|s7icMTICpV0G~>lQiNAFH)xu3jS4X5-r>>U49_0z1Zby&c z>*4Fu5q6mU&`8ABg{AagctZMNa6X|zJKE3n~PseN<=j@+^Wp8&qEzqE=j)|X4zV6 ze(T{ZiBrn^^>X(0r&NDJ^_$t>J!74O4!%k1<79Ih-1-xSdG8Vcz-s+N?#91f#_>{> z58p; zzj0w)pe@glr>O*v`ydR;ncb=B13sASn>Ap7a%qEfS z%Wfm}<;!c;xGBIkt(i5jI>SQ#JH8^H+#^voN&-Onu{x}t^X{v~CkF2LQr|d{SI;_)|Ye9RHvTwR8 zwv^peg0?Bn9c!>F)>=Cfn?BFG4DDG6v6&8-@fIL-eYDON?Y1)jVn8ML-nZ5c@6CGC z903vKce2x&7KapEIku$bl%@9D_s&N-u;uk;uR?Mi=e{V*N149z{bM>oxS0F;VT!UL z9|`qp=}a`we8)~t5~vk1yxGL7rR^N8?YVhI$|Eqwdn5cY(bklmOEz?m@*yL!k!OYz z`A9rmUP$(oa)-{QJmPl$T%dm}(w{i35&FKA%gKcxOIo>R(ha$EF4}44<|A$+2izPs zf4=43#>v$=x@hyL-CVqhEiU!}+QI{328HZ7Blu7Kvbo8VyK_%8u;LmeIetAK|kRx{)c7wLV=$k7N>~KjpeAjUtsowpr0Vyd)s-I zHIu=)1HUcOqF~H6v zXAu>XiO5hTOKX!z=-bNOlXW{^B=sBc!&G2wGEYbbC{lrI$w=#$TsTVQCmE(intA4D zc)boR_%0|ml!`931{#n&AB6gqMzz@3wL=|>NvNzkudj*}=xX~@XZGlnPOy(>_N*l5 z8T@6%9H6+lQ+(YeiUG5^uD6}VY;DtbT3}-KpxZJk)sO$lV0~kQ&FXY&6ls~Q zRicNC>AdrNl!VIQ8f3L~h>aWTu(E5X6R(KCABygK2xJ2D3J{jBv{nVzU zrz1zFd9irkv7^zcGrO5jGoUB5fit?Wm_aeQa=A}sohc@nX5H;tuZriJwcUWpl4WV4 zvpmGmR_^Y!lro#r4eep)kuKMZVLfQ?9HRK{{OCOlxG~LY7gXS%+6Y1#xTgc|dFRye z29^&7f{<)rG{63c*mSj}ua`i;Nk=x1tIrOR&Q6Ps9m3b<@w_mDEw@NmHKvciqUiFf z^>t5(sFl9k=l6*x-WZ&!zEa<(P5BqDU{bSFv%WbMqo^Nm>0nK065#n5wnkAz=F;jI ztu(O^`Ifbv#M;2UgDAJNx(ONnD^D0X-yCe=6p#0cG|fWMT0XAOg$tYYBkeJ`yJpS) zt>*gZaDNNu`|`f!W__V;zfJUi#>e`C+P*E;2eM?hNom9<2lLn(KsgGLN6I_RME|3D z{Dc~u=4S!lN#dSh<#HAbt~j^xox+aby&OdT&$v3@c5?n=BQZ~)2O$09A3QK3Z+r*x z)yQ&JSAQ2^#eK5T@VmAl{LehIWwQadg%P#H9B(82uI(Bhhd2s?)ujXTc5Y~5` zqjzJmZr@bFty2vVMP-4!1j=(7vV-v?qiYdk#~TR$!a-N_0Ff>UEcg?81pu55VVfk0 zm^e5r*<55xHZu<`RyQ;`RLyKi^)yhO;c&cK>bU5MkZl`3oQ(MwD?onj0#)5{#edRR zj*4dQkQ-k67gYQEBHw!O^##xI_eDQXf4HCe9RA~wZ$087C<3?lq3TPAx!V0e&=P!; z&_DjrmmHH^@JD_1Z|m;=XN`Yb^6$+3R$%Z8-ukzxez={JTMWLGcP2(N`4)p?ge#?! zlnOOP8mP@2sNrjFHCBR%ks{&BYldpLAsJ~)N4B_*)B^~$d%-T z#BM9co58~`OBATG*Jz6fT2nZQcO+CUNZeO*_LLbX4&lA0k?|;+^+k6tmB&P%2#`T> zb;MAcB4KG<0p(Si31mPGtNY1y;j*r8{w_jPqkwm!I~ zamqAYznn6fT0&4HU&_=J7qAd5J}+E*5L%BKYUepK9k6e1F_}NN!Lbp68{}9X&^U)R zK&(fLOFYLP(zIVzCO>Smma7q!MZz{0Z868$<8M>MO>ANL!f_;^R^V#vZW-HHRC!sA z#$j$=ZVXw*ni;bE@=ED>-tYnS_U55kJ35tMC;q7P7)e(|aSjc+fi9`O*4RYjp4pZJ z(=i)|_4zhF$b;Ia@8yAQBCNzq^-W)$= zz#p@_CTW7r!+x7+I1DbZ`;4Mn3dQqxXXM{ms_Tkyy!OM@CzD?U-)e-aC_N*Su6et0 zjy%|KQ2w?)#`RJZ28{x^fbJjzbFnv}eD~_+Jum26!@TXx@kLpg)E~aaQP{0`;pKBC zNYpOh72eiChtfv2G7jXrS=}ejQ@NJ;^E?)`MtrUXes-c3+jduweCDh9&~iIxAL6Vx zC-;>-JOh2I$hLU9cEQIYh{moG+A#l6;T^4=5co2ouOHu9%$=N^n*>Z*?|4q%b^ZTn zCGLOKbolj_`GK6DFgX7J_phV=pD`{3qAo7iU2bP%rZoMt`31dFyIJ%N(pR&f4tuh_ z*M!ng`TL6Ehfpt=<@a#NMI>H~&a}CxoB4Lh{p-5>lbpZ*9tWIe5~37cmrBjT5*3%< znGBm9c$Jg|OhrdbHT7?B6C^7vtU31eD7-X(zf4#}WK3BUQsgN!I@+r|^A4qCRV`Ox zQK_3dKH+&Mk0KiN#(%KD;qNya3^D-Y{0GMqeEN1;^ub?OJn;8R_a{yLecAtKZXf`I zh}xHVzbFL-W#vQ4AfnjzzS?=0xfcZv1&Ehc<3Y_!t7kK=HF6L6nK=D$rgdil!3uo1IJ9V_Blua-gYD(gjb@;?Dz&okXu>K7&QOvQ{}cQ(&r zoABNKd>h?m_GuG|jhRx*wxA$NGucDC)p9*GM>dO%~jbz_7&B%*D;o1RUm z$kGyG7ub{1sP%rGc}{=UV*OU4e%$Wa^2;Xt_ZV|2B6PaVu=fz78+%e5sp$I(Z#g6g zZLWYTIFw&6^QrGHO_?j=#%#8Vug2&>>$+yg%EYl6Od}jhO*)tGyUx@!O)L{Hm-8%7 ztDBeU-LRa_duQgvX@6>DR$;5Tse~7zUa{?0HjNym&XaJ#n~`TET0J+$&qSWNEVsxx z-9Gy+qfJBBLN^6Ydul^lTCh~*qtte#?T~5t8HKFnwH5ueR-2TG;?BYAt zil~U8TdDJdw$43td8nw-332j^SZC)81HI+5HXxmYS)Gu?Wqn06M4omNDBYrP+f%G# zOZW+Wi;i6&Qz+B61{Zt(Vt2sxp*%E}tbPPO^|5q`(l}4`a=L(u;!{Gy7ege*A6As1 zNM=BXgDYfq^DM+ivb+`_bL|qZURms|YH`84xr=i}tmvU$;Vi8Yd!KUEq6-@TtZMz0 zz0#0EoGaL>Dk|}Diz(e1s+euX2V!!5Ed1RdlBbaMCY2EUw zH&rynsyQ7TXI`pt$bo-;d>`$~?XgO1mGrfoQ^d5tGu$L%$3v8}C*+HS_< zaodMB+E}K0GVyx(UQ@XlvfO#M6Kb>KUk+NsG z#XexTSvq^aP<>raZj;{2pMIU8nCrk&Wmp_WTN7!r>}B(O5S_G)!)Eg+t)eVgZLg3n zAB7x74^S7V{2F1$jq(#(1t!hpk~5(o*AP0)gC@8SYbC6to&uMzuOPh4>lixS&F&7q zJo>}lHDeQZPzZuBKM&GAn())d5`i-134&uz`!E2$8so!%+sNsZ5F7opPu|kZsowSh zAAA<}jh(!I%>gGWdoj6v1SGz*a$(G^HfJlpnx-GhsGbb7TA!{HYFPv69Ol{OU9cbW zXffMw&M zPr_D})@X#TZE>y*r`@7?Ix*8KR@r3!de7r&joi4KixEWHDTFG; zH>66PJ92qk1X!~nFS-`7=;t$wrw^j^nuX?=i`DHIvYj{P!bhx>6GRdiUdNTzWamQ$ zhu-x~ujOSs^+y#s42)Uw;9PrF=%vc!de80Rjy>+Jrc~ZBdE(otZZ=jI>O$zMvOXx&+rXM7<&jZEz8hT8E+Y^P zPt6R6!BR8EL!vpzKosAU_2q32K8;|VxF|E1oe}4G>-i8vdyaITGGiWcnPWrx#tzB9 zcmqVIAd_M^2#M^Y7Y=?Gpt7Aq^?trLyxGp*QC#s|p;wRoT^Ywso1nvOP=Lgz^xbV)O{#9odd z#%!4CG%ZEls~8;-Id|%@f*sEd<480i<=V*s1w{u%>s-HU+cG?P=hdgwjj}c!sk0@U zO~loeJmGxpiM+a2^OghAgbCp1vCls;LxtX^YM-786@2Df|wJzzSD z$31pE6*eMYAG>)eiAJ&hxM6;RTX0O3pqSDf{L*5L6~1Z?CV;l4_LZOVDsWsbaq#vI`s&e9j_D=Jg>8&BQjCW-jtSkR){}~Je5QIwK)HC{R2TQ)5`O}6 zk3s&9#Z9N&rnxcs35|T815$x?B*W71ym)0A9L>iWYZ>cQl?L@fSygq@TPgF#E3Ue; zi#@wk6m11uQd=ags-eZxd3>hRS>vouLj-QIWHjHcvY!yUOYMX8a3ykfsZ_4l#txr; z6`#DX(jTCh6YHrzmpEPaz$-Y1*J!b40lVp-I!V4OrAL9XMB~(i#l`%&JLLi#Q`rr3 z&)PW_?}MF+Px~+=%COg%Z2*HQYI*1y>+_kn#ksxWtE$;4N$b1wbeTHh*Jf2tu{t(f zzKA=aP}rjve3nB_(T=;~yEOp({h|Kv=lu=L|2we_c+6UsukY&ohKl}}_4m6JSmHwx zb3AbVjd^m7dh}(6ObUw=u7xRuK`jD&LksIko@TCfYy8n{vuu8PbWC$10vzr0&N04B zNu}l-ot*p9m$KI}lW*|d6P<{TsOwmxSV#63;k$BWhYv=uyiM?r@_*O$Pw26U12hj8 zZ{ajVXk{L{ZMuj;rDc|PqKrmn3Nn)sDaxA`TU9&WaO@j5P&l4-jhT*q$oI~LPCuC&J(llu3>b)m zYha9jf(gDrzOl{9QKe3djcUNEh`a7&Bh~j-;wL=(zsNrKym!)uTPW2eF>3B%zq=y` zYrFz)e*1h#q)|*LsdPFIu^qLmQ;krb^Lq1iYZ~_1!RTD@O)$C_GiQmAjI|2oSX~;S z-U)44*|Q|(ZrQ2R8s6hO-8{=N0}awc@AErxyapX(`0PCk95_*PaxZdJQs=+Ymm;k0>3RZf^- zx5Km7JfY|Qy$bs&PoEM8PJvIK_{-%$cYG?^Gb737t?X1OT}5(FDHYa;cTx^bbP&zf z{R}G}(S$U(>E==fY^q!h!z1yEOKW#MB@o+LR>>2P34+9Si{#+dZcM1j;;T$$17CHtd4jJ=hHg>JM zmxQiTaLC}YunM}Lrxq3=r@C^D@`5b*yLRAj-T^SDfit`u4^1KLZ#Hs8Qj_>hW#^6j zRplJ}@z2LAQ-cRtiibH)EC&!Ts?cXkGT>4*qL4D8j%(d5^ zuauBKssOD03!Ja0;EQ_sJrL%1y8JU5f()Oi{%hzzBFwj%?_V*G4f{XVrp)gRwr1zgsa>=_qzbz6)apFjSlp>&S^WJXB@ddW{`?1hn5e0$|Uqzp}pW zh~p?>k1}<$bHgG&*_YmQY$?jMl2^ZV%~OrgWt`T|=M}ZEVv80B;|Izj;}z@U?FA0D zVq9#QcbiSrSXFV)c1vS>pdsjFS{%CbhxvqBMMZkeRI_M6uXYRXtG#;XEKPUIP(>jq z72V1LLZU@sJ$1Orohf_kMMs^H29c8hdmYg`d$XV|dqsO0=t7we?9i@>=-C}g6z$7n z_eiEkvgR~(^E)dP<0)cU+gUr2mK`wj#H?c{=yepS6`t@JZbgYIBVBkUh2Dw^Rh%?| zXC;62q>jYi<(a8TpjcZIF4dEl92fSJGSU1zIz20e>wM`~OWSG{t(k*|&g$yfPv9xN zyGIV$1$HgaqV)NQ=xNTzxvig- z*iC_gwohB}gp49K2qXSIRWAMo=F29P`IQw_!fMmQc6?IWiXelV0W>$qXa>$i8acO1{c2X^ak=(f(HBcANUj6eVmBZ8b;5|-f zT^E0QQuDU#PCO+K$yO)^hOFg7iIOA0h78w+42#AG@o5vPfO{Sznf~)UcIGij%gYhk zj!gyJ%z(Ib&Z3-W!+H7oBj93+!1xR6QIh*Ql`+m@k|M|TO={C1*MluFG=V>Vs=Nws zfT{9Lz4TSxFnfO<A(A_Eva$S-A2D0=u3>oN&W?Tf#9HY$x{b zByhZ`I>anxCdP<<7#;djJH~cPy_PUD;q^dvtiU9zD_x&%<3JfyDBR4js-n9ICr>L3 z)n>-wi_9Udd6nz zY*qn$z(Gg?sW*OIXl#EPGVdPl17*C48|bRU3uDTsyJc?I*QVIvxt^(eVLMZ>;#PG> zM>2#$sOCenpT0{jdU_^a$087eBM9z*tF_cGVoh%L+19?>`Wv!$)bA5_{7i6PQJlt3 zKj(KYtCUuKxaaph)d6pnPnzM5+*zOP(dscMDXPy4AT=UvzSowzunzJ_R8%IFr z`~hQGbos7}TYOJv&k-Pg#=K%OVu|1JK5s!Kaoc}}tQFG|fh(c^I&eN?n5s9S6Gc(55jMW3|Z8}PaaOv&2z zeANI>8soT)KA?h4eu5fHJtwEXdubHLi3kQ_`zAN{T51x5sjRV)x2l{BLlu}9DR;%$iJX}HSukmaGA;)XD>ZevFoEMx)kFh z;uh+^C2|CaYO7Kejp$F^@ZY(21TgU|JR8E3uB9k%gzUu~0r7~lMEm8Yn?pT)D@|@q zXmhGI`2*sq2P|mtiueZp?@DV2;u*^ieU`Jtt#1q9`K>fbz?^}D5PO#g5I5ftJB&Z; z%raMB9xG2=pg+^(Cm+SqS0j>X)05HMLl`6_NU))=zcy^UZ?5l}_g|f_e zD1*G57@k#`Iu0se`nv`ji`~pk$FMZOT{XP)u*&Kj&7KTC=>gKnosgO14m%na28)I0 z$4x@C1MRD0LF;mP^w?-K>h_k7dWO&uAk5+H5&fk08V7+F3qpo`-hfHofT=~^klE&7 zt*RACU2E<9F20^}jsXPn-afiL_5Aq|ZKpDy2d)=F%y!$?NaIMC{MRR*QNpA6K0!mh zEZQ%rB-}#)#g!J4*?c3IantFQ)}&%AS_fx(*#JY)-UM2WzI~v2f7leha*1{Kg(ILS zOss6rByWBh)eLXT+<=i{FAw%flm~kF8Of~y-F!_K=!)dy_RxZHQ)Qc_Qv#>RmL5w- zqA&YZO@@$3Xk0NZ7)b3M*Aaz;v58@+-3K5$7HSrGDMec_&mTWaU5A0*CtmG!cHr!I zY=66+^E{LGTTwC#Ws5aDm;3mpoA8_zCYGzDQ65C$XAU)2d3|r+lx^>2mu+W~~T@lSQ@`FOXk~{VZqSr{-Z0{0&wB zXR#X1xSQGL8S@fPoOYQMTfR}JZxCx*L8o~gz;@s{V3BVUzc`szuy>^zb>N=A)p;do zQ^rtBsR(^)kY$M2b)Pb_b%~)S~U%8jJbf%s$a>wPdpan|xLA zRPYy4Hmxx3ZdwT&4L4{D!ZM}$P*21~+1)69OwyC0JzYoS#73IBd9z_eK|^<<`89a270?g4lKnNw?zj`YeYI`8gBMT$Cts9n&=U`v~Fku$_bdv&v}i6xbars zj%{A^BzD_Pcc+nPC5myK(k{{ym_l5?a|hlBWgPhkxRqfOIw@1A~s}4 z5DZCBS)6fX*e_y1Fuxc)7DZvoiu)deQp}^O<3ahOZ725vx-bl?K5t$0n!EW}UIJKH zv&wmNVftI+kM5Lk)e=9ZZKFox*9U6W`d80vPCu_1z2;dr$ApCHy0d*lbeKqooWsYv zik9OVH5zNo16J-=>>@$UE9(jmgQ_`whSmZHc{7ws98pOJ?9=g9l}e=v*`Jvi6GAF+ zQ6u^HxR1kPRN}-gpzKR&K(`G;pSYoA%*3tQXHV(GDOcNv(L39!iARR5 zHcea!;^&anxgAy|b;nk<>6J-l@AfpMT4lPwW5onbQ#9e7=jd$~xYyt(d-r*7WA>es zCKXeCUU~C5UMOMERTK$-;wL!xYo|h=Q#W1Z7(l~#c;|Y*8zw>fg=xe*@?M2uW}nCB zA7bhC;m{@BA`f_0FcMXh0vXp&to5}+hrM5&?Mdi_3l}K*Xkjz}(sb@gn;0KPV9`$8 zIBIV8S#-*q>Vsmwpl%J zorl?;NL`ieKMau$9GCI;87$xRuB!3XwNGhp@jW*lKriS{AG@lbNQ}Y}-gtMHK14?| zOkmwUW-)`#TYtEgpC$yJ-HNjchc$GpMR;6aY{>sg{gkvP>(dUf`-s^?2kmH{+cIXP zs=B0d7(b`x3XTb`5fw>W(sel)+CNuT&(Qv0Uz?|5+_Y$Dv0z+ROILpCmx&GxSD`k_ z0Ghg6IGQthnGl8E*}7ik7t|GZ+5%ob2GW8wC>xEw8dxdEBLW>PUPVT&dXvenIIN%j5|H8lw*i-5Ne^{>lnTr-%k72CVov`j`0oa#u?t@hRdFE}WS;KiU{m9U-%jDb^IQtc85ZM? z0;$&&b|Zf1drr$$Js96>WA6xIUSD25GiOrmE6shEB{4G8D>rbGLWlnG4ZTq0ph=}M zyy)vy+byPQv8x3Sz3PgpFz|C}B|1H^URC?`U^&c@U-5yQi(9(e9M~GI>ya(%tHa0- zuW^1{y5)Tf!f9uT8iP)WhDeuZN;p?d!}Odf5!i4@uK3FgrgOZOwO7AcctelY@Zxo3 zA+reXi?%)-*nyB>5ei*`*Yf_FVk%8_OA)^419(j+pQW`&)Vo{KO|UqmIjfk zX-e@XH@b=U+C3%NLPqu~4~?2h`+1Yjw*~OMonp^<&kZRc2Hgya@wxesPqya#uJ{D! z`WthOTj`v<3jFLV4^5a6@iSem$g<0|Z@mymK)G1MlH#~~v-?ifpv81={@G**_tn5| z)FZ$?5lQ+jOWC~*Q$v%-!O5Yj3WIY#MFTp$sSr)wT9J+GM?mxW@%xRj6qGC`VF6Z& zz0)c>9Ah`~E)z8&KGHeVaudx8KPx2WgkP`h@yK>_!g8(>1^-UMZVbT-R*VZ0cNLr+ zx?08S-)j5b2~p+?xT-D8y&^A6Z6MEBi z*PXFR()8ban6VEI31qeTA#{Ln1JOV3PSLIMc#4Orx6+?^Ocq3mC+i}2gp>;7S3lX~7hmL}fFe{2H<6$4J$oV+6RPucVzV01L-n^UJ;Z;OwfEL>fT;*#sF%9Xr=lqNh}JZx+x%MbVp(0W+9IyYAyLvZ zjtWs`LXVXxCY-Deb57vZHEUsuL8N^V#>C7+B+&Uipnr$YC8`=5m#M~m0iPt#dsms4 zcR$VO)T;a=HcK2D&Ze+_zUhe2TXgwjLyD~^EBsLdN@J{QI@MkdFP zmC}*bNS`1d^PC!-==Xn}c#i1clLtL3~vYy1Tk&|APM2#J@K2XI(+AuUQ?1 z))WV3m8N`ODewpwTWQ|AoN)cO>)Fii!NpCik!&$*EmBPHBOu)>D6drfxmv@NB1>U# zQ<|<7-T&H)msm%@PQ0OJU6$KE->HzD^kD$EMxD5qoQ4&T&09myyf2>n655k%hrVX< zIrGUoSa?UkE|(gFFn&nX+3&1Zhwp$5V?1O2I%B##on~34O2_W4HG1%N`iw(SQKxU) z6+9GgyxU4}C=m{(zv`7REw9n8U}D%w+}Mg)L`+na>y0V~%bku;Ry7TWbLXfT=oBl1 z0{n|}DEZxVf-|49N10A7TBM(gSx6sIJ_4SN981fOU#=H4Q^8M#`<^}z4!=XRj^!4$ zdQlgW4u&CrviT6>suY?DJbQk2G4Ca^R%JM)8}e`DvL^~4 zbiIQksuA;6E@tM5hKT820eQ*5c95nwYfQ?$TnryYqP*)%cO%kuBWP6%M+0vHeEl6$ zB5HNBS%|i|xkVkJH}i&qb%OkhBXCh-%6JFhoZe3F(QS3RP2{gJO79Dtjme8@cXt+J zstOWQ$3@+1t`Qj_w}0QugL1Y?f-T5N7c0kF9HX0;9p-S>)kjQ2NHCG^OlA+hoooRY zqU1R+@@4QyO}CFs&7W&kt$HFKPjL+s~uR_}Y6aZpuZBNz3XIZ)j<{ssf}-(>hPE`k+>N!-ZuL-A zQqxh7CxP@5!csSAiDDfuP*}dce;4A@M`54kHnx4|AZN)3?!BxlQU780b#)w^A$pIj zC7-wf(;1y3V6|9Xk>p-s%>yn~mh*;VRtLc=tMcA661V0_ z*aBZtJT}yQ%|gvZ=Tt(gy^F$l1U#s{D0;_VRM|Uow+!C*b+v@w%%)PE42FMqMPE!z z{Ny0gTENZb>o=rvsW~^5i6z{~ON)wKnJ?YwMrXDQp^-fqFi@{-MdCuy}(U zy9TVF9%>6?YFf3rS$iNs*J&rL;L8!-r$^GW!5{4__p@9m>fJMkCsIT$9Ef-pJQM!l z%pG;u>(q*8g9}6Naq85X1e9?7zL8MPhD_?blHLx*uh^=#gN^h?7XFQ7$&@>?;Hej| zG*@Vl{qqrLlG}p>RL`p$6-Y*<_=s(*9Ra$|Tv+GMW%@l@P#c`WF&@J{Osq1rNi6Iu zNrf2eAv3`)xCCS#!uc3r5Yu)O`9&Z=lDWL^*QFC+Se_ES-NQK{EXtJtRIo!N7;Tp^u6|_qOZpOIhIx85eGbpVk)*U6KJKzp1<_2e%{OZu!C6BVg-{$nyd9DY64>M^@NG6)y%(TPm|l@8?Iswq7M9 zIqShqeG9S1U{Xz@RwRRXEIV)yOjGeQr`5iO?EVITJ zxyau>s@52i9k;Ys8Ek{`cpBn_AbRJiUjuuU$AHApt^t>?u;{hAs8oC$D||{Y9Mx%l zd0dJa|JmE&af>FQ#v9@Ffn2=GkaFC+NjNmC`tf2811u=JjRP@RdaEX{)M?B{x|9g1 zQ}Fx6Tuftj81`*Kwb|=b9V*`Ih@+r)T8fF_Mu*f5zI<{25*+)bVfvVDS9}3ep19+2 z$CKW7@V01HU1y{}*Zqjwn~!z#!|P3w-8pn=xky-X9&a82==s|Z%c~idcwa7~JT_*` zP+csXj<_94YW&HE*9&)cEAsBT&1v3qBqHu{v}S9Jq*G%hig`iJ6fezkdpi`?;!#bR4BBFbRLXn2|RThS4;5b}N(`hbFo>F^}9E7c^BdM&S z`n0*Nf34~EQ|zbg56h1`+TOgtn(7Yjg+tOu(gRYz49VBe;4qzQLfjN)ThLajXP2=4>0r&xLy$G z(=0pbe*u=i8&llkY;uZ%^WHPpvCyd$O7MWwnW2yES+@h#_?)~bxdY_H9#g}u_Ju{w zo=+=w1ZYex7FsrjsAWxt(iiGBGAjSCy^te40`|mi#(b)o?M%=KLaVy4nDC3cQ{(f| zE|JXB@%)lHRK#x>GElwB33>K!^1nw9L0wVNnjf0|2*C9_0&1R&jN6|~!ldt4%eOOm z_RUY67>|7ojw1l)f}8JH;AUshB{y&ISJvKFFRzxIxEE-v_9J=f%;!vvO`AxNKsRC^ zp$;C-`ff(nX{+cs3Q@6pgvNIGrtgaS)ulr3#D$fmmg;V5nlffrs&oXU8dXvR>YD59 z-&zCE+-`418P3x>NjF0LjL-A5S-V>-w6FC!ntN=clD>TWFru zas&|mT4&!qJwB|nktGqj69p?4LV5PYlUkzoof3#tzP!7SnEM`Fl2&Wh(Ho!WFRhH9 zf_)Z2eNkNCxb5H8&`m#^rkhP*)%~#H88{r4YR{@JpZ^V2C;0V zq?APVT!nbYp^74vkC&}4pP3<=8?PB6cS=P`MlL8dy0IG z1pad58AH`K^e>@?Hv!A&);zDPLAATcq~y%cIhq2Xfs}W3YlfLsBCm$()EUi zG&LHym|Ht(_mqvSsF(|HNJv(y5xuz}WpK%qaw_|=2uYkx;{|&3i+)Wway0=qIbjmf zQ+FCm;{G3d?*SC$wyX_<-vPyKc4-d*+Wf})u9PQ9U5uU`H1)7`JH#i!VpcDLvV z!xdQqC#envAaw4}Nc=Gyaur)lw~V$PbD%d*&X2GXXz(-m#v+iFg`e8R9W}%wDtVxowyfEB3*FA&ynDu^%*d1!lqj@ zd!P=OW+l~sY?`_z=3dUCm`AqxF=uj1B3T(4_5 zFGoZ|p^!pMYH7Sv<*qQBqz8%RkPv$!BVfYFW8>3Yz0r0K&*3~TRhEZz9>uC=Sj{<* z2Eqvyh9zp4Po!+biQtAcYO93~(N4il>MyRv;371SM4-tHjAr##tWIwiT>=ODyQYN`4k+3E6=&5zq7hV@&ZTdH~C!@}- zuuw}?K3%}UtDtdzVNt6mw%>IzE&XW@A&52+Y>B(mkm?UV$lRHaO~5~6HL9Ww@FsT5 zSXl?y!RNxdoqRZpU5qkb5A#i?mYUnLSaaukprX83`{wOVMMbu?VAL}lj+<(C`EFR> zTB;J);Y1x6a_%2#UTM|~E|W)6v`t=MaPnB()liIU-8LpRosV9`;ul_XsVaBIUI%-2-T6#htH@) z=#hdn2TPOqj7xdY0 zvMyGlVJ~g4@CKeJd5ae5?YK7XIQq1&eH?WGR&;B>QUTK0jBnJlpc}cW4c>|a)Fpsl z_6J4CYC{zIUn^9A#a$D`XC^IOPUeCl?UY1rt%hMcu&RsA7a{lo^(f_tX3zVfN8-{VOTC$gNW-Q(NlLE zbm%#K87*8iI>Vr@20l1s?H+)tveP+x2YjT))DD%>EtPcU=p^4mC~1$|Y#AZfHm%p5 zUXKP$fIXwUc%PM#<@EQHkta@z*P!pcTg0 zsLGUGG~SOR^i{zBQUiX>jI;~IvI6#j?~+qKdzyeF9P4@z(QjQ0E+%##@?}%zjaJ0f zxp_-D7j@@(?>a@i$b9Oalx>KTxGewEg?CsllESGlmxxzZN5eI-U0}3?W&^hH95S{& zL*5e#GS*;|u9J0Cqz1OA^+@M?ZUDdU(}mBy$pg(x^bvd?1|p7bMy#3kTg^vN&B|V4 zu*35beL@u<4lPacvBRdnu=c!S3a1y2u0^TBS(vd)$bAxL2x)JdlaY?7`9DbG#v}J@ z!F=IX(G5Ij4X=?Zdyo)f>*SI7pvdMu>_U}EQErCd7CAR}C`%4|k+r=MVos*Bki%pU zDR)uArFb(F*@t+xW+`JVx#ck5YUU)B#lye$ER^Z=xS^aWaV%q6w?RKz zIFsjW;&BNp1uMP&d3&K!2mKWhmXQ36l7j7umjf=0TKMkVrE6hOE=XJ^Tm)VYAc2O$ zoi+;$2+4{VhMg?8ZPC~LzoHfSzSThE{knveh|{Q1^vjUGs7U9qyKf#W!OaWrI!!cG zjA%1J>Zs>j9cf)!ynS>ceRn*zoCNzna?Z1;F$Zqhr(2>XCRtH$D5r+O=^nd2cShej z8zl3_>!_)=>2i%gglm)b;$d0~LiFuv7~HPn=V0|LSJ_kty?(ke>ynNxb{qj?91>_k zKVd~&vdH2lSK$s1S9mpeMrzUo^z2%%A2bGjZXES~h`+yR`clvIE@j#D3A>Vmp1)sR`M8P$?Q;V7}mQl@!Y3DG! z5+Ub{W_1Mt#!mLVhX)uf`xjzQFC~5fYF(E?^eaP;SrEY`GLq9A8G=+MTmI!1j{Q}U zPso|3K8UqRChr;zuwo@&pxvOgHTz1luh?cB=4e!3 zVPYu2Pn{O~_rU*^JbYdnyWLN%epCAU-Vw27W+Pp$`L6i>c!Q%!eWi(ECBI?XUv$8r zzL@vjXNjv)D`kO)(@m%ugKe92`;31)%~devD`b?fKvp(C9(jCPa`EDr_YdguwXxS= z+3nl*tF>Qcw_fuF;s4X(H9LGsF)?$t`}+1nx50m2_Mb9jUWOf?1m6&vSjagn{hzsD zjIYUb=9hs=uNj}kneceqk6L;auUA@kTpF9qq`Ig~%cKLBB3kEgztZ|YX2U7!Ra%!A zq<6R^KKO>VCy-yF#ey$6)*En;ge@f5mw*hvfa(T z5kaWMNjyNv8~6=PfX+lA!l-p;`u@)A+tE@CLrm`)4^|$UIAgp|HdD_}55vR(`?(|y z4UgaUytrvu+AgtvyFllk!ci#ujuCnFrECMiva>tS<0!v|nUe{)G_-#B&1E!7^&=(DPj+?`uL^fnJ;RA1 zx09I?eNt~-Hq6qs#umy{B>|3Gcz@2I?WYe~C1NI^rT5Cf39=k4wV*3r8p}us!s>wx zu!X5*TnWiZEZvVZ+d68Ofl0SKEej%S?fI&y;o(gjS{s$#6aHlv)pH4cvs%- zHb1e|n@paQ-6CIOh8BGv;Y_k? zncvW;P!YM6>56v36d8_@LOest9ysj@n>91&?{KxMiW?`l`#jjN^=?I-kmc%x5N>w2 z&VHKHJobplLo_RV)O*Tcb%H4F+UI?Kv>X3!U&fviW&N}=UDbn`CdqfQRj30AZ2dC2 z;tQm2a79$Ht&+PL4O56Z@sQQJ*ua2(VP|u)>?D-C5_RYI(?$2gTnOyZdaa!eYmA5VGj> z4XtLc~qK^174#GS-%x?qw4g3^_MKu8lYsxj!*hceB5Gr7qKE+MT?- zQDPqyZ(4}R#Q9C_SIOOJv7?jyFyj;Z6@bVUAsn2hWSB}7GbNZW#Fo?1U(~Ecb2FzR z{x+HguP7u=iP=s!TJID_?iP(K`sDROwh55r`8e@|3cl%s0a5kX=P#mh0y~Vb7(T2L z$tJmn&K65cc706J3SH3GiaE4>GsgC@+b@WOm-sC-!ZE~>e3eAm{cV<0K_0nQj4}Tn zZEZr-!C18VWJ2nQuqkL`Mp%w!w4IasfCDAJ{=C9IQcrZn$m=W}r0syyTe__G16y|$ z+whekZIJ?9TezV~omSCnAJV_?u4r0E9GwWQ*`_toyIQCGkqBc>pC!2-j@nfrV~k`) zxpf=CSS07Z>j3p`k;@E(zE6Aqx_Wa7kNR_vnHHm*%+!EH5qm_kxSdQ=YQLEI?dQ2l zLz~IA8b+H^(zc6eCUz*1O;Y}6M~gz6C=s$o>=-IFKa z=}5#Hlp)%zRcr<@X-p2v0K{QsJc3L8L;u}3*T;}j{gru<9dS$NjAzI11cD#dSL{|g z1Y|VCldmVirI`Fm8ZN7BV>yu=B3j|i3*?qQ(Y(m;=cmLtC!(pi7cV?9LxU^(QojhwG(*`eyDnCDA+Ys@PM8%UN~rm{PQ6Mn zMeAd&p13yeompXEF>-!@%eBpwZxq@Cl(^ALn>D?OCKTpsuF+FrcKh6sANwpTk~o6y zGA&oLGa=|(J`CVS-`oYt#Bzs()Xq{cSaIWyDR>0msG4q}Q;NS>d#kQvtLv-Y$%G}9 z45aFuA}VSD8kz2l^+h!?M^H|lfs-RCjjiclF60%i_-Zn|unD8VFPbL@6fq3?MG9bu z-K2byPX3U?b9W_Gj1(Agmdo7!IZg=Tb=JgQ>s4+h9xUhye5hxk$;4nfAiF5#R%<*4J7RyFMx4aUgbeUi(SD}z4t>*k7@3C=rSOp^=$W1tD1aS?TyIFwM~ zH{2r1tPXZgjE+cb)f5H`Zpps^6g*dt1=Rr=Pok|$XGhvcZWJ70(wApi6=)RS@7V~G zJu&+1(8c7_Z{jnV<+{meeS+&64+=VwfJ`k)-cf_F>Yc=(pD>gwQL<7S7GBj+F)P*T z4lS1KxQc&FUsyc9_veo1+2J>|B<3-^cruZ>)B5!^7v%2CUO8!;kgM0i+w>M?ro?4Z z?Ha0_t(u44kUo`M7h-jG_Q0B?V0u1hkeZegRVBGJuG~~@t#gu^z!f9s=3&)dz^@{k#Z1D zV@aIT*@9}P_@lI+_}B?T=VUuf@TLw&@WBm!WuvE^*BL!8p-QXI{78DMU1b-T)!+?RMs@72IhKU2`-`KMc3JQiX-iW_Bv*?)7hZlCu2oXB?_X~ zhTF*>NfT)XSnr@6V^?4H81MLOvYT}b;Y)vU>F5`}V;ofKcxmwG(4a%+^_p72u&~9V zKxn$L(o;RW%!~q(@mSKc4@?;J?Ok}TL(*J|B0Xgg$E!Xt6;;fvwrNu#UkH=0@`_(Hk>!|&HvM$&kA(5>n;-5O%ItVo0>86m zlXHR{+opDs>|NcMJ&W4EPC}%V@R(5Sv$uzZaGmS(wYrhG!U~R>iOAj85C+KRw9R1i z5mwBthUS1cV)zHy{p=+WzYHwVk}iu@T&= zDIr^E(7r(|^(K8~(OK%B<0U`8P)%J#j9%VdqtT)DcXI*8gpvLrM2$(ZAL7Yqd*No^X}--p(9bM1)pdc5i!ICNPorZU}HgoK_zQ}zt{lY8@0SLC>6 zJw`j~>=0o5h&)!hJ1!lxwW7dL;3?zo6f+>0m>_lobv~}mLL0S3q3SAm1-ozwB+s_^ z8D5n$#20q$`XkQgXhTw{@t+g0Mz;jbI8L=g13MgT7eNtMta9yiiM3@)KieKHG?}(h zz$(*pzryRm;?M5sXZSLY{=G}7TA=y^ak8)dMAg`3tZ*w^Y_qSN)q78#mhzX zAM7JLg8l}0Te}BykPO5Pt@><}TLN6^DOwuE&&S6d9mW10_+OAmIV4^Ex|R&q51fdK zUtNIi#b(*FzEOAk?tk@MtrB}zR@V>nERr*_btNIJS&LSs{vzF$@O^);rc7*N~sS+#P|G|aaYLUCG$V0#B4ZrXN z!bxRQz=pU#+A_-ueekk`Bt{(GihC zJr(!w#v)n?FyYS@3kWrp;Yb4a(r;+b&-$xfR8=06b3O@8TsrVarzXE^=0)bQdQJX6 z5!|0nb)b$E*kxgT-JX0zHb`y%`C*g5fLpO(<1Uh=wxMzF^KGChtEYKWHv3lmf3G)z zYM(Kv(%%P7&Nxkb9~ro&M&mEBD^u?_F(!#9cK2q4NV9eAaie|OIK$^G!1jyGQu!@iw8*K+@gyakhPiIo791n)@RXN4fFCMR- zb0sg^spTpT|E<0sDrfJbXCQDf8b>)v_FTI3`*;bVY$7J`lLjg-v1h)N{WjiUj}crQ z^qt`YEgX-r;#fObS#?IgEmlr;4uNetE<(W5U_(6%Jx#r{%qJ^{Ws|O;f|v)K5yfgY z!mkb=pcfsG>x5BIgLT96G}1}Z+wRBaBdY69&|>LP&?a2HA9Ga2ttQ z2Be1K6(((lnE4}cBb_416+ko#=bl~^`Xq2w1W`(7gOW>BQlpO4ldVhLU!2f98daCs zPgAbeE<*w>;Z4Gg8`SgNbD5@I1b+|xl_Y^zkaK_U-48bmva8$)BC0^xB!N}vEKgB_ z^BybLTFQQ8TyF~ny(;6-(zd=&a^3f}Kp=J}Ym#%!rbMOol;hy>hj*57J$CttjHm&) z$y5I$q1ZN=k4VAV3q8sY>9O?%a)GC+cstK0eRdmx52jZ$NFH6jgFIrEy*at#-o4|B z4)#tE`D|+eXREP_TEe8y+gO2#$n!6h z<SE+$o#@Gh73IarSYN>NTes);M!=pg*u@eooM9!swA+Y#e(Wk?Bpz`VXUaLhY z)ux6Rt&Fen0GiWN-MN5kiiRdj&aFCzhpZyy&vRqsW>^3s(-VvRwsAET!?Usp(2t-+ zaJ-r9Rlc-A+C|`}NMonWPw5u#4kaJ&kJtKxlE->$nFw~9UYZNUswV}F8*8OplSGqT z1H+QE<4@1kegc8>?s8@?VvxpZ8ADO`J-LWDGjHWiEav3ul9Gm)h`c z!?~O)WwQ%h71A|NEJ`Rak}#|^FWtA<7wXVFBk4tdL+Zt?V2+<`?Bp1vFHIF4zZc(A zj4hD`2|Y?8uo$OUf!=x=IZdfsSy|L}1Jigq(7l&B?b*I?7ty<>U6;n)hF3VGx{f|L z?XMVW8!aT!Vom0yuHhTh*Tj795u?_Lne(yzGd3f00p)))R}!srKHIPU24{b9n7R!& zef_oL+7H6=zb)qFMx;>URkO{%k=g$NQZ+;Z6Yr<{{lxTyzjhBm#pW%IhW#YSV|t47 z8ql&wc=iJ(^7ruke|n-e7cCW;lTdRaWS{h9Xb`nl-&IIR$X=xub?-HDZcM}PAM}C9!m*PPJAZzz9B$~oFzV%6`<~! zB?-p*4`5nsObfbi>X0a9rAsBh4&7*)5aEsr$}q4o--a>9@QSa~p|j=GQtpt-)z9N` z>W^YdtK^^30jzOq_9wFjUXAG(azMH-!d?jD<96_^aYjwU6sxG$I1v#>SSWoKAT?$j zm3tj45EUE8ACrY{Rm0&>9-f6~4>fZ%(?bv>kgB8Z;nz|SIW*Tc7bMcq;XaFMHb_i2 zz>DUOu3J}8g#u#3jq%(Tv=wADp7L?=KJL2;OHMW{>nNI5%M+`SmkvfnIwtX74ORLX zBxd;ER+8_HJ}g*vuFP=OKWz6&l_G|#U*;ddOrvJwGwyxky7uibjoSU*Lwg!?4YEBpIk zyr>|Bi}X%<{UR}}mSyFs_XzjOM!q5E6IdyO=j85khnO}Hyr0#3VKzXomWn?)-##ee zMg&VPC_?ZoaNBHX)QUxkxeT_bZuMx}HitwDFL145YeGTGjx8@rn(d*q`x5D;C2o4W_j^`BL`*~2` zP+U!xXme5=)pfd_<%NlKDZ~Bc2tg~l!x9t?9oK!{3?+|J6VHv@MUq7`CE<=yM`WE&RNbF%^AXRw}>z=8b745!$EoIi+ue0OHA zoW6(nh?Tx1XB^#MKL+BM`xH?5G=suZ=fgF=I?jhoZ{1P0zv%guz7zNox*#q7zRB>j zw{GK>k6Wny`$Iu>>Q?N6)agyCG}aYs9qOY5T6&Y0m`>$asuOym10 zz3t0CTL^)-9UWf1q>Ny}I$aR*e`a{w8U47q24z;RrHwIqj19z?%2~Q1W154$p;2Zi zgo^;G$q)9{ve>ISq;%G%-+yd7h=@0GNuNme%3=tu=*yJ5M@U9IMac2QMyUPB4q|6p zl@Q4%1dO#?nSqz=W)fE!%1pQo#W1ZnnGk<Ux+B%j~9e`;HHO<32dY za?FERa*LZQ(~Z$^z}$^<&un>pj- z7m9QizQWd4Ol^zbv%}-oZYh}<2z^7lgRL#se+&03A7MqF&>ZGDts^iy9fOe(&#%&Wsyj@`1P zwqJ6#?TVFHi}vRa{zLTt<*t9EN!h8+P3o_e56ZdCw+E&k)_QN;PQL0e zwiwz+Eg^hWp&Ln`3Nm&yP2g5S@`b2tOZ~iuO-gfV+&3*p{-hc5BL^f?> z)kpo#AL65LXjOl}XkXF)oZ$O?xBp+y{fp$tn^AGCe014aBs1GDg0CGLWOiZq!>9Qj z?MWHR2O@?IB5GR@FRwbf)w&-?3+l-+VeLN6u(e$R+7T(oO71wgnhluZ;=B+APac(foTx;_q>1DjS=Z8^yY4*9_h^#{yxm93f%YtapoX z9n+0!<7&-$Em(;(>(MY4?*Z<{LW^48UKsvVU_#V4sEQfihnUt7_@cXZ3QS|YLTj?3 z-o5ts&|gXtwy?!YhsBVeD58sFlbuFUZW%I-*0V_PE@TkeqMN}dvaV|O_t0NS68FUB z^x1V^|BUB^?W+WX9xa6blz(D6zPC#A^@HWl_@}EA`R&V44?3&en4x!7QYV>YIM6Jw zr!V3d1f%*R+z0PfrB-j5`v^4dl*dEJ&gqp~nU|XWa8fQIP+?<3LuIAQeG3T~1^Xk_ z?`8JC6Mpb^s+CGdO`j>UV*A>biip!{SO;+Y%TB%xVr^t{m>wAhqPaciD_SdnOF|@Rqt003KFZN>gb({jUd^Suks=%?M zdF9A5r1ur7Yn8}e*%Q_}j?IYAAP*1mb&Co4YQ%y^%8^-s&furJImRoQ%+e>t~HDv#Qm6A_!v$M z<-DX_72Z_2!Qw{t>~U0bbTCkc9sr=ndKF1oCMB*x{T9ZuM*Dtwa80*OPJ|)7ce$c` zTynzukx-?*XPMbUIByVLN8Ix0s!|T8-JKIAGJUjLUJKLf-{r%{TPrCuLby;U6 zBG88%Ssv@9B2rAW8Khv=gEe?muhC>DsBEAG@1Ct_#&jR*Ar?ivsufx<%-X#g9j})_ zDe9?Ri+J!5|G1H=;Dy(aei%~(_<(j9*FAyIlsnmJNHG;DAUxq*xAF%yRlXc0{H0sj z_ZaY3+|L7m>(vIIrICbV8@Zl!91{1|6d8vloIBva#xI24tq4NV>waT|R84uwc(L=a zaUx2Km$KG{&3&WO%iu=Y=N4OpbuJke%28m;X`j*=|5nL4Pb=w6;t+Gf}DFIqn(HHDNivZhzxN4`(O%bAA__wvE2Z*tPJm^AO`p|=M)yABwA z*)LA-(84gD^8;h^HxvPG-?=UQRg(#-`z1nBuiQlBB1);H6yX@J9+dWbWWi8 zvv+4@hwM8HYwYC9W@lV}`KJZH!&@@>x*mz$@uz^Rg4aiijG;o<$n3NRBo_V@?df=` z0f*2PE{0NdskOWsaWXNxK{4csgZZ(r2{Jx@?=7F+mIi%pL*tI1sbQVlbt~9ZbWrbW zroLn6974{6DF4=8Dph7;1(ZYI{r647#xJ8D7Fe$R z!>D;@OY@FU{K5+)2?6AE;Lfb-+&$*)R%b1@_5%Nn+;Z6}#Q5~60k7txgkO1w@Pvo_JrA7f9@vw^VV9jPic>(hFhgA6_`(sd7DI zvj-H35FQi(TxKnURj%n8eMFJIK~<`#ViRauMoPYYL6hXogp;5s?+CQbtPfUwGn}RA zqnD~+GqyZRD?We8Nsy>Fm`y?m3;D2bhAqv2CWy@?8>0rE%JR!Fy?RT6OaH+u8iDOs zw#3|c=vprc`{k*`1+Zn9Xs$SIwet8?va^rjMl^pk)nT`He{CT6-9Wz~RqeHbHr|O# zbMjquh?_MH*F`i6K0GyLjEKBHnZqSp%jB}%KsTIV^66t7*e&rZZUW@g;gFIG>*Hkq z6YD}tw#jRdNJQ{d5v|8g9xPGS!6~vBhA~m+;_oC?WnXZR8H8Hs(0;&7|Jk745d^Gs ziLr~X|2X{1xoD{x&4cDlVy$ybgwBO7EI=BBLG$Td+4tu31y(e%A)D+ z!Ed1JUv{y_3jlu8hg}QLUxgV&BwVW!8SBYar#ALFmA4%hw6!Df-cG;$+l2pD0o)(; zbK7&$%WQPQ?4L{I{`if5WkCN2k1Y>F)@}IOkk-8w8KbLH zWI;8Yd@?P<1=kt*DX0KcglM~AB_3q)&n=h(mKr$rurJe6ZnsilBNlnGpw3^4Hs_=3 zP^`ZuPW{u;{LQoM>3yWZkU0#R1K16&9p05^*kBhFB5fqD1QD4$AU3di&17xkds52~ z^A4SBL6n^hGg_obb3^xbT=J{N^|3=CJ7YrcvLX>`h=*8gcwv?hMJrcDUmHg0lGRvL z+qgh;gb6#gYeKB}yDV5x=w~{zskkFKLkdf&rm&pH6`v>STPw=mJ{inCx%Es|Qi9uw@i>daDTU|^()yux%>-ce(dziJZC1*M4 z0XtadjV9keH&^Qv!upa(@NJzQBby>Ogim~K+8FyEl5;8!fxa&I-~Phza`|@O{skvD zfU@j1rbCMIN`jsc3!zADcUEdDO6ng3_n%EMWvq@Ylhdu$5EM5f(U{Wv=BnD}p(kFX zv@xCdXYL+gQbSqLBeL+!Cb8b~L}*WF-6N_!yT^+?;(}lQHnqFb+Pb@s{9`=jmhJ7fDfOPR7Fab=PEXx=F3WmL_)&b+&X&m*$`;0gbyl=z>>ydU`( z<_@vAEgKCS)X$&1O*Ba+&{MdtE}((+g5~d_zmz1honsM2qraz+{9s}HSC5Flz_C1v z%|pgx1Y)>H-ZUb(iSVmU9j7+DRpWXkujXX?M*o|mns6!AE2~tLv=*{jD5eXQb=npA zlz+@sy0R2rfCJ8YZm6oXi}g8+TA5gy0+Pu~O(}|L{8=RVS#QL0B&I`Y)PT+9V_Gx! za{|(<2BfnCA|arD96zK`@riMeT>5YH%8%^uI@91_{oRLf#k_f?uFIcTT0#eUZD za{Q?{5&99itYiH%*l~gXLFS z#L<;T-gE7rzwwAQl1{g*^y#PvwdI?ZbED%Ghh zSv=MxHNVJ0JN6Ql7rKX8I`Skz^wRvCPcmB@)k?jf>T27_LI7`t(aolHVFC5m3~QhPrM>OF(4J2}Ik z2MTT5s*tn!x??MjV3%06c0-NW?3j%ERq#ahmAZg6)BNSr8^x+mT_$%uUO1=Y)73XB z3h}{<=gX}IY{|%Mqd-mOF6r-m#wcL=&aKDZc?x8dXB7-bL-FtS+7~aBOjSg_2sMB! zT2eaeICh<2Qa}!5bps=B`YMdXfw8wGYQWE-si^O`=d18fU86g7m&^Z0|a>DWP_f|Z}6 zX~3&qE0R)59WU2woY2lvP$2N8Qa`&eX(3Jl%uTHeh4py34)BHJES7<2b6K*_M%`wF z%3KMw+QW7BVcSEqivlQe!?3=KEynbr@(OHh-@b0Oy{{bTdQBP$+T~}m;V{kb@2jPW z76BF7MKlRygkl?ywOwbE>H;pC<&5?-U<@Se9U-~Sb_bUs4`FK5f|qh)ZyQ8YO2G(90jIaKokCu~Q?fDpn6I;UtjrnaFx5y?G%=Bthk+f~+#O#N>0 zHA7`A;TS>=xe~nv>qQ7@r6{+%tgJA^^aV2=Aw5gyBn=tP@7tr)du18IYdW1g$G}7qI3o3Hi3U`&pG2 zZ8z$qpvOImj6Q6|QFnQLdYYUg!nxvk0{&tGhvAuy>3*jiGP4&=-#_(J1d0L>O3&!s zMVrH+!yw9OhC>z0#+6)arry7@VgUsba|8;9k(`XgMl`o+hdCv4ZzkRB9PVVK>7%{Z z_1M`LbU}?KS+L8M*wu{^2i}>qX2N)**ZZpb>_7;fEqGBS)uO`@K~QU?b3IT2c)h#G ztV$A6wHn{OCR(dc%jC($s=jkO3~now92$4M`ztR&1Yk|Oh%56EDN6DUxH2=A{IC|N z{O}F6pG!RG&SEGMs0AOc0G*mBgI4S`#Bw zBkn?AQ)-OvRqzRoCw^}L6a8h^K34nPpkZ36IW_N9eH1-w!-&9S+T&~W(I?Hv+^6n+ z8EWw8JYnroj{{=UY@-0c(~8VJ=_voQ1)%Oq9iI9DYD-$ahepVWgtdQp9o9Ar-%Uia zqxWvGGsDj+Fh-&&*o`XGB9prsjS@j;q!Uwhq&TO}d%07a(}VdZQU=|Y@yX54q%cyj z#OA&01EU18udhiYqjMT@X);W=c_m^{Xk|b%_rSJX;~4*S47SvMz-=chH0b z2uk$BYeh)&H0D`<;7gycymQKk?{eh1uuie zP2f(vu^O;raMiC9u(V&pq!O;UCfJB_N3koZ38M`@h&-UMy9-~3;SM+?+ALb<7+I$~ zyHO{&v3Uk3!^p;0-s*342inA+>@YJB8l@AmAwcSZ5&a+B1BLpr-d1}2%7&!K$o8)z z+A>((2|WR^c#az;L8Y{Qc~mz0?e~D8{VOac?KQN0>{*DXc}<1-6!EDU*anCFH84xs zp$CivO!z2_KwmsaKl7t-$ye2eUs#{n6yTJT9cJcwKW`SPt_YxvhgXZBL>T;lA@oW> zR#RMsK9}3p!W1J;R75>Pt}L+{b!>2S#1m(wt8OK#Rsp=RY7=aWTe5M=x9h<6aCamC z>*M{^%o@O)Z6kvmFCz&jD~rsUaGgiBS{egxB1}6P0)kQqw)b=o7CZ};V2c;k<_Za$b!m<6_H)}rdZjT?apIJjOzgC-nFRI|VQei7Vy_^COt0Rg* zvVSF}rrg}Ibhf?JV%bn|^^doXGb=vu+OluTSWthc62_n`t!KTf0gO~ z03H6ne9X^|OC{2}39)}6f*~9(HD^-#VU6NMv3~d++N)cHo|OmY7B3B767b%)YKkmf zVf*uVQ>6R}%ut9HaKREUo87Gz!_P$&$LMu%twSN}AWqg4D-4OA?xk>R?KpxrosY>@ z$`ksei}u;dASwMfv~7C2b_02-IHvw{2Q!3*hzspd;a!I@c=<8|GRc`fU}i_U$%I4j zE@oXepPe7Tu41xDzA>$_8jl53@TLHjHD(*j+h}Ls8Cm<@?kwz`TS=K3q2CGV^{hAb z93|0pQQ8Iz<+H3AnKiNaBmE7Z>nY_d2y>3amIG&@lKkA3_21HcdFxMTC#E>mhBfl z@HKs{R|-7&loc3Q{3L+U@YdnM6lpuhL)Tiv73)Pt`s@UxS#PhYck&>ROM*2mH!{g_ zj$6c!7O-hr0-#k=q6j#{Y00id*9yR3ZKmoNe*w+;71`knr+j5fan8OP;C>AVsG-X?* z?}!)AL?f$eUEa|&*Br0xS8WI`a(spknQfa`tx?IoDrW~usLlkEMpyDF0fqaXUcEf^ zCzAcIHjY0sWPiDXGJ-nFFrHrhL1|x(BYeW!pOeo?h1dG8n&^GyaSr3nSj(dS~ zW4({x&YcIex}C0$L%>FljbGK8K4)4^bc0sBC*iwC;l+yAa>BCnIprMp4k0n>Q6;l1 z6^qBS*rofyyfcvnyQqPINJ@&5Oj>X@KNiWjoI1hLy23Q!nz0_Fziy0Po{C4K2s;+h zMeGi+m!U{u>sD=Nxtpg-Xv>*GQuC?0207`SApsy;4pD|ic_>I5-=TG&*q5HpFEdoe zO?j-i_zg|_Cwj9&$X=={!Nz+2N*3vA09ED8bz^!bGJm{!-69%(sD8dI6zJ^5vB;1H zqfI$%Q4XY0zBH3j0HR4swSP$=JCY*4%fZ-FlRdJ?Fcy(B=vjgqR5RO>I`3{!62k2# zCiR3T${2O#1FvGs8gGMx5d)d4D-|i=*ClB$kJZo3ZI>V5y3*(KO&k(71UYHBR#t1> zz9&!Fx>>v>A4zR&eBLeL=;qp~Cz$M0CnI;_CM@X~Qc^S{DHTmr1)O-xP_j?X@FZm5 zG+OGJE-i8|TfL@v!w~qf7i4TU5;|Z>OM{Woz~cog9`L{p8Oo11c4~#f2^a-5Tsfa8CXG~H^UL(nVSOv=%;XKdyy@!z8KCpw{BKGGAKp=Zc=#8%_a8)45aR^o+Zvs;X*4s<3b z@XmN3n@scyKM~0Zea-BHSfFF(G;;54tJv5X4FnhwwmEv{p`Yg-BC?uR$}zZXGbuS* z9PbpO`Hg@1%3UzZYOg3wcYddHMT*>z1o2|GJ*sdffm&X?@=&{f$W{cZ;sIc1stQ&Q zht9XXoeyN8$%c4si5nM$Mf0I2O{&-ZlNhar22a-V{Gy)89OxtokRff#Ga*eoADdg#&CS5R7wqrjgpEVyhvH%z zAAoFxH&&G~BzKbRq`_Q60JwG>3mD=N`CpjK2Ulv&Y4>anxG&waU5ac%I>Vh@)W{{j0oTzY)o z`LlzviNiJ}|E7c51t*cqxftlc2`j4PXVF^k*OBDYqr2pB|UxC%!cTLuDH>FIis3#P;Y>v$x3~d zu?s(RXw1rzG}0L8r+23h6KpWDgw_yS!m&!Y+|{e3V3}V>#ApRDqg*qdP#$o9eTjGZ z=!r=jm_8Hs}N{(+r>PY=ulqB|61^tRU5_7vm zBgZF_AX!ny>1;$ooOXP())25^Iwf+Ul9-j$BBNZNN|k;u+F0Oza}i1+-5{XR{nKE> zRX;huAz8q+^twJ?erz+@t3oj07W?;xw{3_Uc)j0WXavLRP%;Yn7|B3W^BOyW2Ygu! zw79U$5&o>jxYx!OEEi0izQE@a*6vL!>AZ!HiFw9Jq7#Qk@gfV|rPHjW(p;BapcB-! zUvMvXF++;w-$|+Tp6rgpx6HC0*7~B^-6v2C$~4iBWHf{&kLOCjB0r(;M*vX72KH(m=LN;PTfD ziS8Xhi4f!jBG%A$O5qVv+1O^l)nKN*-8%168X$fWz>oh84HYx||FQR#QE_EUqm8>u zXdt+|ySr;bAP}q@cSw-n?(Xgc0wlNuNr3LA@q{DZI_ zs`V#b?R!$DOs6{cOr^yCnMjnGej2>dulwONh)bcNzHh68#>{Y zNh5yk3y0q586W*F{?P&-$48z9YoB|U^FEOm?6>hrhoEzjm+?x)qHk~dWFb=GC=>c` zO3hQM;I|9S2(B<_hH#!`^8E=Ry{@L?GZ-HPBv!Sj<746hDqrGjwG1sd3~};`Z?aZ3 zX`fjaZ{|34eIM(;U>=0yrg%LL%T;{UX=Qen0L_`exT{q+_sHLKTOt(v?6z#Xrim+0 zp0O%7?r2Ge__0siBt*%z+`2A0#=i~|gHq#OH?oxV`dS(VbY1!xFkGv<3vVftMk-mG z9AO6zeYC@`iVLR9onpg*K3LZu6)Sh8GqyJ!d=eTaaN!I1PbE-Uy=4a9^qK^MMDAJE z>4*CXL!O-GBiVky3`cfO*XOw%7cG0z)5Wab7(dhO7t1HJ0H(0V#bUgT{{j8;4F#$B z!lYvxMLq-RDCR{>YMK)n;Rl)~8yZi%wntBvOj%R&r4AnR-MT)P$+&-)O)5fFn;Lb% zIBRA|OR`y^VBI_hS6UFkWF54t4QL?FEUv}VDnZdkMvm5=0?j1D#0;W%TWz4BfJUv1 zB+7JQShD741g5PLt`)3!5H1fvl%RKMWl<;v!Hi+O>_A->7zbV{u_v`3U4C8wZCLvo zd3GWe0%j1=a$-6b8y|K!EfftKovWZlOj}GtpES}s9p+bGC$T0>ueD3QUBaJY${8J) z1nSuqGAC!B)G17u#Ng8_lcd1QIyBRof`MR(d6RllZGkd|suTG zK=1h#VXcRG#$0-$oM{SX8VZ6G`Tj1wCGqS~`fNT6sjul$83TD+)TYT)JVqkMZ9Q>r zQW&Y)n}LuTm>?t2F%^{;HN2)55nI7N4sGS7H6n>mb*dBwyV0bHg~^BXfh`j@TSlqE zB&p){lXFtVoO||~wjHNF36Bz&cJV|_V(+~(K^Kz{3O1L`ki3(^a6`OA)KV#fspjp8 zDA;?OI%!k_qJGMOc`?Q;-1M2MF)AL4EE@Xkf<=@J77oITgLbFWdAg#ueEV%eZ7mBV zX{H^9LbRn4H0PlU@v`I*V@&&FRC>BhaYE00>g9}J>|RC1UJMdTA1}w7;xM&$KcR8j zBku5a*DpCc7vLbGN7i+sqioT0R=E7K=BAWelcvYCaXqze*Wf)x;U77LA!CUb42N=;O_$E_PP! zNLx`}B@tqh{i<8ITzOLG$XdXKB=DcgMO zqmG4emrV0}VHV4CjImIpCSqK`z(A8chvCs)h`#^@*Pwp(cI>FWlcq6X6J_hz%ERA2eFO8K}d^ZD3F8F`~Zci+X@+7#E>1emmTO}+FzcktOf%iW& zYd6!MAxJBlc648M^by?`98h{sRg#@a*`Lo2o6akYkWR@Gzcd$pV~0{1X%(u}8zf0E zNHjlZvWt&SrpFcu%->o|1-Q6doqD(0e#Q;JN+YyH(t`_}7f5IBP)<}Vg(lDkljJ3j zY3B)WGKld#_qAABr4DDt48}}BtKVHmccUHEPs}Oji*E&9jG0WqU?aZxo2}WJn}Hpf zzQa?hdh5L@8+g zC|GMD`$*N=D%VDKau5+Yvd!AGEJ@0WQ}3*X2L>}YmuDlRLAqzyjIHd0Y>*wVt+ zn~alju?W$dD&*k$mRPL=Ga-?bpX27uw!ea6Fq!z2z+C4bC2(X{E%K_$92NstBj0um zzxU@mrn9#BZFT0@l%WGM!qM;qc%@;!U7lKWEHSZkh1&5Xy2YA|RKbdn90B;zPe90@ zm-C0NsJ}($ka1QbPQin_WIC$#XC{=#ldCz8zTyy3vYSXDO)Ea?nh+S=b%8ImzT{A> zQh3Uvw4r?G+h)3>7^1bgTWtf3~>}0Rb!AvmUh_Mo+G-cqVz)>Va2CNRb3+TqdkQyRiXVOf(#fP=|M{+ zIHDLWWYK7LLvK_laCTNtU6VW*IV#EmsJqRfYakHDW3gdDFyya7)r*z!AhPKauzmUBxo8SRuY}H++i9-*(1Z@ z5mN7z$PnX^lb~lw1CfgRf1y#36Y-t_3S)W{OzOVPe2}J%pi=Zy&1olLo6IrN=oT;f zOjycN-Nro%-f1;U924cJV5^2axnZKgXj>DmT^F(T{0hdyrlk}1G>a!uu66R5(G^%q7V~1{;I9I;?O5Y0 z?J3-ht;ieL_tHI67G@_H5#6HQp7#U^g7NS*Fo4CzdmJ0=z9C~JkLR};+%K)3(>lv; zw0?q=fUk1TZ$oC>?Fyr}L5Nu9A1hBFga*G@_!-StObe&;p18laylIRIHl(0Tepy zXr`sLN*xfSc>c(i`a#yYx3ZR%k%Bh-2hn4`-hA~QRCDhh%yobweKYfP*!p79hX|1% zB}{`*Ia4n8%z3FTbw&dy)CoR+ApS{)3TlzCMZCknLX8F z=JJG%5uK57!aSe-m@#Wgtfn+2F>;bGJHwxEH2hWd^YACG6(XTam$nSSZ12V(Q7$^$ zIkY;v@E$#A`=(%u!a^NF6qWRi*!QbLd`ez9JTlU*v8-E;O>?wnX%iJfLnYMLzChO0 z(m>2XJ``9G(<+{Wheku?>F*h#a%l2>W|Pl8UfO-h;hk(J&ddzYL=s&biMi^f>et4m zt}8bWlpdv7>w_1bT%?UOSZ*0(trQR=-KV{mEYzaDr=qqhqbol7J3DF1u|>jsl(K5V zx!}9YNe#Ox7gy#x>UH6&ObXN*RmOL0rB% zc)eO-ziN&;p0%SPQe5S1+mmLMBRG0$+*4Vs$P0!}yy8LZV?ekjjs2)&Ku=`NJq`U{ zgGngMX@DD(meBm+L$UXp*qej4^Comwk2yegCz8-|-m(Rt#66uOkE%Cj))tdLw9F3p zkUF+Qg>2#P|J-U4*xu_3-H83zW9lo_qruWJV#>&{AjK*bs_RuaQ5ukN8x10kuP*0B zP=ZPStz~wCw(B$K9rgS8ySKqI8}ta)d>doG)e1|vY2iQdVdXMUpF9Hi0TyY!2$Ee#@Mh`p`K7(!NLjafF%C~ zFxYg?!QTWmieFtSLV_>FE@vfIcAw>Ly3+AktVuZk_C@evP}KTN!+1{Wv;~95)bT4A zck)7Lp+3KtJY)$Za_LX??w4dN_O}^?)2w*gKHGn2W^K?7tQGv2+M6@y#Sz9-Z-p>$ zq&c0F*QG}Y7zQsHcqF%qc=|~W>|glbJ<&a2l$DJ$O@Q*i4UGf(>rPdQ(LDP3Z0dfv`?hx~q$QV(8w<#K<^r(tQ#POI^ zA`|0NIi#f!ORP_HLO3}E&@5|(Q#?Ca&swHp&A=Zi__cwT{$?(tCjf~H{iUsTbF)j< zcN!UAq3*kyYycOiFB+nbdGaQ(M2zn42|=g$EJjsLt?l^O9Ox z1x4nPYDwB-^qu(7UQb3GCO`BnAR$$G0>In|G`jIZf%+jgP?3t~`^bHSg!o0V zNw!>!AZ#%)54lkf8=n^|nyjnmy$AY!(KN|HgjNMBr_}@*1_;I|M%gYvsET zZcS0E-cJ|LK;kgxttI8geA{NLHHH}R>=1tk?;`|RGWq4SePK*_qKwj#&D~;}g&kNX zv}C+nF7+b5vfTo2*F_q@-_>uLy+3KER+Q>4nVL0Oh32~eH`yppz`Hp5t6}09^8L0G zvrR8uI-R2x{jNztNuQ{}B&c@1P%S1$FDGVN&gD{!vfARYu&KA&Xfio#qTOB1Q=^cc zj^dr*=qs3P*$OmsbG?Og;~f|s%pjOCq^qdRhLo15qc0qdh17xBu`5x`!8a(ZQRcPymT}oMCi6Mgo)n4D&JxCia2tR-} z8cJwycG=L23S5w03Ou8n^vG&;j0_Vc$b!Wjgv8xJ2V?T1@mW2d^AmO4=Siqs&Tz^@KD)9LWPEpL{mmKZqQk#uyxw)(~zftP8YTbPViOaSw1Fe)QAAjget^{-5a z*otWJyk+rme?0HIQ^tWZ2xB`LgH^QpY3BI5x}tR1le45syyYaB+}KlZozMao+s&SF z>jkd-nDgZ!imC zaYZq%QjN?#$!?T*`u25&i6&GL@!sZZ(ANZ`sS&ty1o6-l8tp7EJbi?d4Zn81!WTnb zdTyYE1E$r%-8Ed%05Mr2D^>p6^UyNbg2k%hfnKL`7HbqLG;40y{T{PcT)LK zA0TP$TylN07Y9}x#v#R=Q~%T&_=fnDM9|SR2uWWemKnf$wn*XOh|#^j@GVh1TK4F^ z%`1iuFpioRDnEDJ2r#c!GHUI+XQULK7J%O~R&1Dgdz2(3u#I^Tc>m277gWWSnubP+ z7E|%~FZ6rArMdYdXM(xBg0xtQLg{CgL3PVs-?p|l?64|1ySCCKL3!LRaJVH-&t885 zje%<6H8(1cm(i}lsm)N>Cvs>SLzdC5 zvS%w*GC0jtPHgId9da^-FG6m!Q-p#* z_(5rWQ|b2^U7qu!xY0Hyr;(n>?90XUf{V9-XAjxl&m@Mavx*#g5Cms#6`(7 zkvH^2#lB~n&x&0yJW2I)mlV!#!;ED`OPQ+wmhF?(E8sXS&jff0YLC}5zrS@G&EVH8 zmw$AU3xSnqW=Y!CdzIFmF#fUsDeAI7Yo8Ta&pkgYBFffdp<_x_mD0BQ-ORymJ{}QE2U;^m<1C({nzBeT;@b$JWr_68#Vv^tnxbecI(SC^?$6l6pKv(qUkc2r0fXH<>4XlS zexuLbOunuOvNM}4sF8d?!u^poe>UxrL+Ywu#>wfdzHFFq!Xf31FaJpVhpx+#-cNzi zM;G?D=8B%cDntN8*XToQ4^1Ec`sk>W*`4d&EGv;(?nJzYpzt3)1pKu^MYDw(&c9ng z5nMfgI_}YhIwh@Luu1{D^KQc5mR!_dm3YO8*9y}LP+f%#uYczobm9+M;a+se%rvyf zTGTyFk;uP>{{=V4kR$BrksY;-23sI&h+ml=HS+oBeD6Kw~9 z3$Gx)y#{>u8kEK~#u31#HDYm2#WZalgsR#?9tdYj6&fQ9TDibX2TQP;`Ov-@OT{Q3 zO;tjNw!)CRSEDrveDEkE!`KujpC%J2K2@sB2!%(Zb2P+i8-AF>LkM3py=6%`0h!xm z_w7&qsf-p|bx5XtO+H)_k&`KWFv=kDq+kMTqIJV@pKN@KX2f)|^-2D)4=${pxsX_n zu!JgeE0?5Xfl`;8UW%xysgr@_XBrvgfGsknL$J0)T60!B0-2po}-on zeIt-lu7@&g0@4W+5U`^*8F%7DyVwCt#u}KTrL8umrLzGm&Q;OvE>NM8#k@d|k&PO~ z=D#Qtd(3B55VLVHge)lZK3YGnRUQ&TGnPVDI+$inZ}jZ7`bp!x{F7y94RV2^jsB@I zxP@?&%phVT@bKv=C16s9@B%l0bu#*P?&EgaWh>+4_%MDrxP!a!a`K|Q&yYdIA-OM#O zi6t+j4-)4I!U_IjX&}cGa^p1gOD)xjx2_UMn%(!R-3i-5PA$()F58~*Vx)ovc96$T z-GU<%hwZqoS3dpESk z8-b5KM16PIMD;cp;8oIQ-WI8gbVQ3iPC7R7IZ}siNbTB)5L)OkiEECP%~{|_Mja!- zo>uxHr0o~4{}+N+?k0C;(<;JWWxKK6>?-l~Q97~W)itPGlwvP)oiQqsNr@iegrECD zAvW=2O*jbBea;E6Mjit`xq)CpPO|v$g)VZ|h;g|+|4w7rGKDKG>;RZdhp@R{h%L17 z4=4Yfb(KH&NsZ~Q*$`P^oj(H4{(23mbD75{|T#YNDlr z4T;LK7avQIi@pnADUB@1oobV+f;!<44tXzXvc_iaMAEU_m6)c>-Hz`V_>0YimY&I} zneB;fjyCx)`0HX2q!lW4I+LE#BHZwh7|KgP$MT8XkAqLjZQkBo%!hMBsOcL&3^M#DZRVL-FT}!v9x% zoddzAT=0=HqMv~8#8lz+-i_C)u}1G%CX<6$!{3FOvGMNNxexx5;_KV6RoeWskQ+Am_BN0=X8fr9?y^Onl76J)AmawD%PTl+hm+Zhf0&ZmSIM zm!l-(tpvV280sDa#U9 z-l1pL5Lhg$KVm#TUqo+ltpdS<9*@_GxxUku)s}w*qAz$dNZGPn@bU1SD&n1Y9gR5% zrlYg{ejT07e4dc7_g*|yZz5)e6EdiaH;$I$B%4HUU9;aN0rlOr{qYI zCWEAj@ki^4fywffBuRz&c>RWnA$b%z7}N*^u^48Gi%Gio4p}l6lM_AYs{aI$-Us3p zfxD%TSgQ&z$@qdLHl2JdfaZFIC~Hlz3gUCA6S6>ShB%vy% z>MPB_9Y(|IN1Bb}NrM;HqzaS?!+TD9!M;|grfav;i}6E%*0UPIuYC}@2qwFY65iF#uy=tlY8OXvD{r|rFk zy4x(RYrMlKU)YQOGSVl;iGvNlh#&%FAf0$;9){#DJ1Ff~$mCjRcoUC=R=7S0Fo8;7xBWy;F%;TZ!_af@Pd@Nk<6Y&i*O^fbV649}kkoaP|__BbQ=3DFexE0^IT&dHyFAxVx zUV(w(PnK@@u+1$5&#}hwoDuA+``#zvOb~ivsb4&1ti=AS)s7>MuO^hC{Gb z2MalY-8=hUGjpruO=dLp&gUBJ2DSq7>=w?Ft@LLm(+|yv32C^_hKX?~GgHU6YF9$z zwC&~?>WH#c6~6n_H;FtNQ{EDxA0cXIt~hG`OTerp%_ldf-U81HFYj0H)?Ov4xA--zSmUzzw@q@`pmw zwv4!4LI((jd=k7gd#p&-kd7|>n8UhuZu%R}@^Nuvc4m9b*i>7zdv#bmlOwY|oAD&R z7IyUhCU79})*RWS1Yr-2Ll$jACc8HT-{W;vtm=XfXSjPp?a?q7GTH}tJ@{IE6$3*mO>7!(# z6jnqbkwq2Jh+E&feXw-+@;~!Lu!P%(?wdP|dfJ_7J9HQ77s=Mj@Mr%PK<%HAa{iS! zh~i3y(Qdc9L`bscP+?y^iBJOFe$L|eQB;15JbfEsWp;wF)nl%$?zix7e-b>aGBL=w zs54J;@8fHO<{wYI-ZzGoT7LVo`poQFru+ZHmrze-c@LT9BWk5SXodh1OwezE{`Zf+ zY4ATN2fS@~`wbucuciJU>OU3>uP%@Lc!LWqm&RAN@1K%STZHDn{0RY=lLFAuFwoF( z@Ch(+Z~>Uux6c>=OtMTYatdZ)W0T5vq)evwY_qak+uA8bl)0$pL#!%B z_kAOysMtislp?B!RcGHHtAYIKgoW}g|T`c~yr2lBb??8TS$gfqR{juo%OCEn${cTCN-~HE*eh2a^ZogLf zht2x6asSrDf3NJ<3jQ4ASJ+>x{KIDbJC}Y}{XgjPyN`Yc@^4uEVYB`x2>~S2wyw(|i z(;5G>6DBr#(%8=ChR%?q*{-^er>}K-d-Bknwbs)N0`f1YDQ1{bq}SpCQ{C@Y?oR!B z+b>`+g6dTVAfkd_|56!yOAnofZIxv<-qKYxe$fc>_H<)eT?@+RCt#b6C@a;FFzB6m{rHG|E%~1ZgOI=rJsH9bAKXoe!pgRcq--C7ydGL!9Uds;WqB&mRmx(;G*t zbt~bKCg8HJ1{aa$>#uA_W5*TcayF^{q1<(yL-YPT)bgq!gCCj-$4RYP^q+Mzo&$ z3|z%!M`ox3vnZL<2}jbzUM?)6xuf|xJ8Gj>&)vjk}uVJLt@J^c~x%=w#o&B^|$b z=i}AT@=w62_0dK8khSV4W%YvR6EP`*0;!t#EzmdVp_&nr%i!=V=IOBV(6z;1iM<4+ z{?-bL@$P*iPFj4Y%~Qx91G6l#Q4p2o|1tkYTh>LAMXPFfv&@JjSQPRIKi=BdQsc|4 znREhVQDbOo1TYB}*&3Q(OM`I&0@)Q}c z$&Mf-4da`5`!w-0vINE-{(_CZ;x^G(iEc30_4y^~V~PTjPRlT|VJw```~-Sb%>7@; z<9ge_*h)L85qAVMbbT_@bIRARZMtM%-?-g!g6z0D!#7XvjVX#@*Y@*hgqod!(o+NM z69H~}h1t`Fqkf7Xzl;;|i(CuyTLno*_4(7!r6Ue6xI!~mHJXrF#tCC48pJ$OG-Bw2 zd)keU${YPZzL@#g=gRA#g&F;Wb=E}omrnoc1dqTAFL)i zj``8cSTX{%{g`1h{@cO)l{l0E-tPe5ML zgzsW3B4*GKx96rC$xfaybJbyM2cq98?aT6(%=CeBomrOZlUic15fYvc;tf2Ssr|}u z>bg8KqBAQ3Tdd}D^YS3k`p3=n&}B1M$uTR0#LFC<^viX^-z(mju8_aE1JS z0&M?T0^<+E=JV9+*S`qUb!?!-_W*_bj_^H&?iIqM=GIxhCxnZW5J-L14tqYJ1cJ474(F zdmIUU_kA0+-1e`b|J{oICz1ZUtp7IO|0dzzB>W#6ME*Y!CI`!&O^s=J!AjTgc2LEKlp!abCq>n5Wm~$UX=E^OJCFDZ-Bq)@V7ktKh`hE zx%}T;hH75fK%SkE`0a=8hr3+}%&cPrB&2Q@o;uAbcA|8`ZO?C)V%=x2qYiHF#41#t z4Zc}hTid}5SQg!9gxD%yD#LHsH_5cQA#Q9*wKF2o6Q~FGv2uM4u+7&<`m-Z{0@M+v zS2(@j2fz0%#CVT3G9;zv6rryWl&(gZuX(A`Tv~lAzGxy8>0NV#0e%pnxMNIc=GkJ< z$yy;02G_-}!62td@%i>Rt~M(Uif5W^RoUm6mi%-M{mnzx3t1>~3J8ZzE;vb@Fzp$0 zRF5CExCFXSH zSj*-D1KH`)26k>+x6~K6!nYCTME0WDq^4D?GV@(DF9uwhDgfVV5-*9`o6WnL?fFSb zfaiMbvkXn#%wZt?36E3GPr$5JE0i`rz?bU&J#dyG6P1|n@CG-VJJ8%ON?|IE(zhr% zZhVKi)l7sXq>0$atW5`J0?zXR(iA4_>is6*kXq_p={zc_n(ciz{`oeN;*0fzrD!089EI08t^=^ zqZj@%T2;NpQOT7!+I|+a84;*0y?G;otwF<5(n07$IJ)4q1_y;UupXZf-|I?n_##S` zsixFwr-eJTYYPC>JkT_0Y7)VfQzLcG28n50Ih93llB=U=!l=3gdYYT#yS_^fcR@eh zofWf=LOh_y)F|3G4N(QrLbV0st(ZFYJ>LxQy53UX*KWtz9-jX(rs7QnHhU2R#cCDT!oLqj7@*rmpRF-Ix%u7T9a z0bD0-I(6{?LQ?~+I7#njW^1E}laG@|N(C!f4{(#SBeOny+5G~vFi^#S;j+B6En0FC z8D)7zv|_VD)y3ynJOq`I-6fK#Ld%-;#`2KWt*Yi@Dr6rm(tk8U`96y|b%|H&K@O8# zXQ&q+5&%w;zF#Uj3)sBBB-C+&yG|~p%37wbcT!X&RjHhxrGfukdQ6;0mof=>mqw&T zE{5!Z_jD^9KZP7`t1<7}X}-(j{I1611K}HLxe>X#7c4IK$lt|dMc~lezxxg$&>xkrDOH!wM)EY zv1p6zdQ*;^lIg$mXw&(MkiOX{NN;7V{)(^E+l9FX;&{a|nBU=yP9UND6TkyNlLio< zhx>~0EhbFQ(~nnVTYCKj>>DmvYVQp85nwuJ>J*ZblF%iEPDn1iY`;yuW>;{0^}XvS z;HKj`H;8?NYl6&6r2c9lgZQ*A6m%glhN&trp31Si!;B{0rFd+(@ZhW1r|#pLp47Lv zujjZghzdLWLku&T*4d-a0cdXS;cMk>FE4_!Sh=n7)rQfreb>S<>=s{C>>{3oD3_v)59-^pLQOF5H+UF7W0 zKA%_m%h$LgQ3UsT2Jo&aJr^sAAXg@`8(w@nyZ5r1UgG9prnD@xC1siAGK*v&bLlD~ z&7)nlL--LTp)#Gi!L#MFu+)CE8KX zO`_6j&HbV+S>7(xLCBlvX_iO^b7{1yTKm+L;m=zJ0-JYUJ?#&apce{ZIc5r(VZKNR zl<7_Tb^=6-%-)LYM zNTxCuNnx&OvBYQvX534^8C&pg^poS#@tz$puT9R?jy`;SsM?m^Cf!_LY+fqAnk?e09fK41nrX6d2*P3Q%>)ufTH%5txWyS8hmuVyArh|7vVV@#HMh>SO!J5XK<-pbpqMlFOnfK9u! z?>B#f_m8NfGgu-fDRLm>RSAYbO?CD>r3dLKq^X!c87H0;-Rj^b z7^BY=_hsc{=Onh|Qgw;V_wbb1z?Nysq%N()K_V7SrZ>J2utWNcF^>l^8DtfAJZoW( zc37R#PQ#G=d77V&>e4tU!A~t`Q~CH_P!7G<^9_P#HKsD)2lNBQmCz_ca_qQk36REm6C+W;|3A1g_EK$^RhVex}M6Xo#}wkBBN${9{Nx@hgUa{ zu=EaIsQP35P(kNU`mb{X{Z?fxz6MU8GYKt)|ETJsHEprEh2PWH`Gg-u7P^Ji|ks{)2(M;wRuoF7?4aT4p-h(9IfCI3UuCQs89Mi3f)U%E2)( zSzk(XCy6WX_0CyG-L~mFRai1g@MzJ-VRumAh>Q(y?JYPdOL5^khXs#PtM8mH*`_1d zdi#WonlQU`#FwHdS zb3ajv9K#Rql)mET{Ocje)$&y1Eoy`DxT_R?^mlMp{xzf_sos5P5SAebElVwFepPa-)qQ!PxY~ZD@wz9y|LF~a0m*xH zM&cZP8-pZ3%d%ie7vtL_E^j&&zNWW|WbiGA9ZJi%JoeOAQV&@kRdexPJxfA6=_}8s z^kvbbnARSXU&Rkq?Y({@k9d%@68!8XRsXr6rSQ?gAhCxRbCS@B<`m1^#H-i6av38o z#+AK~UNQpW6YkI~QQ37Uets@=C8rXoEU1x_THO&w5g_GxfA!&ypMbFMV9%~6%daeL z65ip_3)GjS%n8C_^~?=h)@*3ErBE7pnw zlF+D}ek`5rnuQy0MFw05*ne!_*6k5AaqIgKA87!1yzeM~I62Ts`smmgClG%Pr#as* zRCYYUj8`=wx;&k^GD6_RweiQknPX=LYdmR7Z^veEcf7NuJ_T%)4WnQY)97|awV!jl zos;)xc++i7L`JT3&WN8fzEfbx3=DQ54`g{WLNi2{+s@hcSqfd(tb^^iWXw{)4UJ=J z0G)edZIh?91uIrrzAXW*qeo3dQ%>>guYQ;pkM4ppY9pQ#awy&0E6Gcw=6o7ZWAZ6`s6iEg3MK1&; zUru7Y4ZUA?D58_T(zAwKZM=5{DBpoQ)$t4`$APxr+QwmjDBam;@*R&(@+_}eKFbBs zdvusDc>7^`bYaUQ8MbbAa|7_PK7%=94tMjn+==8ToP@Ww$3-Q)fPmVc06L$d#1%|c z!oF(R>h!LPTm)TQP-(z@?29+_n?-Tjtj?7hYcQQ{x$S25JFB>6qCB3qgxUSBZPks-pr;ep!60!goX%fxR-QoBHo$V62eQX>i=Ryf@Bb44S zm9LQ}2BPE_uhqnaL5}2KP=d+|Z1?$m1X+%RjL!+*VUlHpM_*rh91Iw`u;opIV>+G( z(4;uN{5rt%ajL0BmQ@7!fM}@2oA}oLKuM>e>wG_i-ud-61$M=j;9Co~<$(I*Cp_aL zOwkZ!?3eThd**V~DI!cD)?mL`GT+KYGz|MkxBq;zzxY)dg^yJ))T%)Z`dvlp4!fRjzeyAI%6NOh`w_3 zP<1?c*o5HTiXycsc zBMVMWN>u(woK(7NyMy#9GyF%*~DnT zaWYHBp8&b*&emJ2^338te|Wr6IVsdRYTtrmNc)EGhWw`vX5vB+bHY&z<==8WH2iC8|BN2zhC}MkiUiD|5isBYcFt(@BO~= z{q^E>su~BpRA;(pZSa1HFP-HOUU9R3N-hlzELpkL zi3bdLUJqAAStPyzn8fXrj<)gaZ7E8>Vf3a~X>xiZmqNPnuqD*2sZM>5QufuyrA+W< ztl}%J9h`&@%y>-R?@%`1@iQOMfJI88&&hrQToiQ&kkSLuOFxdDE}zCE3FnFF`B&U* zvd%4Szpm^)PEnA&P*-9w#N#}Y403N|^*L_1dZ{$!_1+k%`MwI=$$7r6(77$Pj>vE@ zysp8LT|~W>;5Jp&DWbjicD61qSIEPGw&5R0U(O8K+LMUF@vs_iEEv&bJQnm4q5sJu9%t0LspbxTkt7p1*47yvcL+NN1zaQ?Bs?>{jpRIi11e(*|H`_r zm>-Ndx#IjqQ2O2{+K_1k749?1h9P(BH#qX~Xk(2}@sB4=h$(oZ7-cVC1csj-8V~tnEs`1AYMt-;*Qj1tluZDj8B(I^hoJ_%D|cgEroB2!(NwJ);7oN8bn)@ zcIW9ltiD`_OqP95Cd%<>sbXisR6`*bdV0A7wNr76ObN(&_YKPP%!i+s8kh@;*EQs;@QXjjr-ku|M8#izuVzh zz*;G5y>rgDKJPP=lY~^w>PFuKV4kBUzykZ`SkrgAiJ>x^Rm@e5UiTs057+5Mlr-cI zot>Z4CX)6%F=B%VXqw%oqLa7=A-Wi_U~LfIU5a$&my+JXJE-51^MC}-A^p$jaw-&ArhQ~ zFV0^>-%G92B-0zD3-sMS$br-m@isS&=4uN(Id9Z*lf*LjjT(BKU*6tJe)PKSRrbPn zz}sP*hlF=z_&$|!5qV1GuYJ2VZ>=tg5I-KjA7fsKlADfyByc!&k4vFX?#XUv;|aX; z+O>w?l=KUrzOs$nBNmxg1=}|#$eU2^?$>=ZSD8<$mh$sDNlrdsf3)5_|AHpUvEj-? za_n5u9PF*oT|sa#onpQNDCeY#H$1Xt)${i|#m3B((|1bE#B~|M$bp9&c?wRTQBSIP zvIl1Mmp?n7?teyWN%v8(RvH@|gc%6VjK0GFAA4`oKQou_b6@&;NsO#-SSe4j?;s0u z$2@(|L~@|Sa0^#u-zw_$(+M1IuXC3-1jI6`E@eSi)iRl(>YiO)5i64TNxCZ}dOfmx zQX_b`kUx^-p~B9gZO!(AG=rB@-&fKM%coHuM`OBnapKZ8ca%EF2lV5S<zgWE@-u`a$Ge+5PrqMNF;VnC%6Y@*;_bllYFr1kBKFP|7jSZxs=2QgNY?GgG? z@ighVfT8Y6p~=Z;9-4{6>4mAP7nLS{`X%k~hvej|Ct2&X&m^UaAFBvDe;Ye3exk-+ z7;PysDD~t!Af5&3R%&|NmfC5nlZ=K6Up{fUE%S5G$JKxNUTm?&JNFDNV{5<`CT(Yq z${RLHV#RmB5BTEFmcehn;O5Xpj zf7zc{|K(Ob+5G9BoxeF&-vK{8=p6d>#hu;Qk&k(sZ~U;@xhbLitYeWeWA^4m?Gd(g z<;wJr?OiuoZkZ?Raxey;I*v8{>XMUg!!ssN z#oQT}qzh`teVU{NOY?zq#w5e{TEccRkAYzeIXDJra9HRdDk5m)ROo;>yXZ%OHR%o& z7eD@GaKO80kJjvJFC@tyyexk44sOhYt%UH zC{)!w7tBfwU1XrQ%ZhuME@=P`rhNPzU=6&*Mf~#6zE#~m7k(kdM4@ruvgOg04wV0D zGIeTSIzK^M!EApT&RjUueczB^ites(D$heGmoZ;Ku>8qjC0^g+Rpv4j$}yGU182zs zU^z8TBtOSQ`gDA46qk{v|3ydc>)@ia8M{F7^?35` ziS1YQ3#tJqb`r&eO4Et4I1CCT*^*U?{`?5}sIq$Q`DhD7EW?tb$8Be4&k`cu!$q(l zV&#St_l7(hjWaKAmI!j5@eL<=O$rq(rbtM%nmL12T4`o7&7Ve>wtBoaWct8aO2xb_ z(-&lQsCJj++-RA$)wh0lvO-`+84kp3-e`du_p&)Dk+Qt>V3^JFo~90NsW1R7b%+I3(TXkaW3lL6U+q_=WOR2$$Y~7Rl=; zPY5YMF){1Ji2zU86~_^XL8!H^iN1r><8Zu=h5BzA~ z>Nq=2KUjbpG??;0hz)QC;bho&QpBXK6%M{D;GxQE6lJFITR2GAhG~m<& zlD*Wvo+`JzWg3TzuG@4n8mwjftSEMK3e)Z4o=LJ(>pYNYMm}YXPduBg^6P>~J1y*v zYR@g(B*s;w;=DK{r&}Q3;kquhCu;0Zc`WHh=NCu*S?%En1i2!f@pv77={jT~t{Q3% z++1ULuJxQ_xWbsfKm$qFN2BZ@J#UL=piZ|pD3KJCm6SUtlWvpjbC%GG;K!3afl;b{ z2aHp=N{)iPI@qj8`C-u%%W;g*rGtha~e&yMTTFGtdQwlYag zFn(oPF;6hddP3{vN*(_$k($t}&*?%6zwU}6=Tg=68=Rfx@5Cd*8DQm!%eSVSuF!^4 zEqKI$T8OJQ)<|2lhOVZzqWSHH#EzRSE=djG;Io|PWjT^vK5`iNTKH6!+%4JWed3q# zi^H~up-VOa%XUGMq#egb+1GcNQa-Gj8T;7AY0#D2?Xq)-0^qygNM~XZa;jULfL547 zcXDTbvvcnGx|bUCGO=dmnxt90QnbbzRU&rlln?3K4DL+O0&YSg8v4^3u0fod2)kz1 zcdvLkD8}VElO|2k#0Yip;#)Zr?4mN%*vr&B-*&e3=OMHnfS$^Wll4l5XF=blgyL{E z3$`>!FAbOM`!CYZ4CTFIRwALVoM-Ep2+=JGxniul$|e0dCPs=umB7comd~w7B}1OV zVa2dK4!ufmJ{&F(URJoI%?VRsNzhk3OK#+zZ8kCI>3QrB z)HD1Yn@l%Dx8#y_jaK$xiF#dj1Dmd)bJx+0PIcR_Dn7~wx3+$^$MA*gdA)FKYf*pi zOfPbe)=xaqs!dl1!UcX*h23=_cw=Hn8J0pxA~!wk7=O~r9QA&;t@~AV>+N--qhl=$ z%`hZPnSqNPA*@iPb#|TQ&Y2A!Z|voju{+j);2N@3qB8_m5Z#1dT6`N&P)mFco0 zQX3%81*Frr{_bS~)RdNo$3YR0peFa~)B5AJ^b5sIk!SeSp2XsgM{&qfN}`JC>U0De zP(O?Xza&D|3|W(gDVG-va+(8`Fp-aKQ`1?8JEw(=iZC8WaV)ppTyq=n60t;5NoMPf z?O_QI3&tAo7XsERB(*7Wx^}^Cn$6nz&N4pk%JCsrUlD;y#1~b&=g|3?l zzv}>2!kvDI1YkLWv5*3ZWk!bH0BA`fob7OFecR$yaQ*X%hc{~RGYHwqA6s2A$ZCnd zYNLv=GOV`_w9!=&6m1)_2Wp^Y9>;`TAEfg=O2>{v_{i=xH3ll;57+luQ9jQe8KQ)& z^xASsU-bfMdf;or88BIGPA4U1-<+z1#F*xmEMd~>{s?(FKT_ChO;kQS(dLv;?=nVm zz$Xmg31;F{W3A(}!%sNiDd8?7dYt$mL0pMo%Dk_t@nOSjj=W8dBwqk8Ppj0YHK`>G z0-0o>2DFnJC>7oUi%NE}U;rp4&!xCqrK zfdVQTE)nEwo?oP;LcXWrYk`>5tB&c;NMn{KNG|AajGV_#EQuK&?(u^-4}_PB<~~4z z>9e*1a|OFD0)i_N8knvw9#v}MnWkziDn)D_G7QibEFCLm=Ob%!9E!9QE`n+&9LGkKj3M4L0 z_ZnQnsN7i{hC%ZAuICegf{D~6-^7|B8R<9(7<@(KTHNk3now3FSM!>Ys_)*1s&6wF zz`2-))@88KqqFv2vJ&B4j|p>YF4roWf-whgDfM-0U-bj{FSOo*1XZ*21P*WG9llD5 z;#_sx?R%yo+WqwTsSbk9*yjias}jptg~{&>zsK_*o+Ub0j9^m5(#A)(PIzsrG0P9^32>sN1C%3x)?tE1h5jQ`1~tIi9>bE{v^1f1&c$rM_ku$<4W^TcT29? zS3L%+NiNh3?!>im@~)6ggbbN3Ytm#)Kr1HBv(Dvy$^)H{JvSiHKyXut30cDA_dIF|eTGiP)P=J+9|Kf(ci_00 zpQbg(rP#uxZsyK-BeXE7>}>NKmAS$<_7vU`s8 z&^Lf)l8UGdre*4#CfLC_GtlNBM1#Q)0AK=;MlXAM4$v~nttrqaYixU#8RR$;oo5I9 zbm#8h%m;#bzQQ_CEnTB}4oMd>@!tWCmOlq}Lj{g3gdzX`I2=&@%jEMF0CXTIxRT<^}{R{Hzq*dD`B+`3fKJ>|($8IWv-C@#({<^rod{ zV$eSx3tPz=s(tw7Jom7!Zcy&$l)~B@=|>miCvV>T>nQK01dQOTY}y!q&2#=b{h~bc z{5h?3eM-Bm0K$8Bko0#Px$dw@s_OE7x#teklL&b@sdiTnC|y$7GH#&Rt1pfznrzJ~ zD8m;Eb3WKTr=(k1?Ens_hoe)-r&h>oLcHPa}Rahd|XC#lM=bOub>H&4ajjebdN zjvbTmcI9d`N%wswzKQEvce_KTL@p)CTlo?f5p%JB2RLA#^+ifp9$!O3FwASz=_s<9 zQu1~y-y4CWigGIYipxy?1xMG*I1wAl3f+A$Je%U*n|jV}brOXy!@mPO*d)=KEN#nq zQayzjA zvubSuEl@nfwVwzmKQ&&}gKuk-r7xk;b!>c3EA0}7D^FV-Xq_6hTk>Fo0{O07N!i{v zEodm{(cf+57p!}Mj&121W&$vJV%Y@rtj*nhK=_~ z9v;vgOeK%p?1_dTRq+hRXByYUY(IM>I%DUQQ~Q&=+qwmcgex{twi|5>@@(tp`Qrq^6lv|N4W2uaj^8Pnidxz@F9bDG?F~bW1HVL zhMG)J{?Z4|!gh6KyYGN9LqNz8q&S#ROX*>Q<~q$hHLn5us(T)^6hgY1V;GD+5p^= zyv>~M;CPD~9d2YCtY{g21I5+m?sM=|fR2{KLSmt(B(tec(J;i2S+PZ<_z4X+B#95O z1_)FP>~H(G6^(Sg8L=}5!wBGE^Hnxy@#cHdjZ8=ImJ@(XPqV$mWQL4{Bw7{e#^wUg z!_~2G*VC1e!8_W23G_Yf_t1=P+^E8J3@!Ps+2m#H0?TnMglLzuuB@*F)Bj2*k0Y81% z^#^cSa0a@ zHA2p9YO4Rm{OZ3#i^)uh|pJv z<4-CU$KTJs4~QC#dt7YzSc#f2sBEMB34Sj`P7Om5L?&l9N_jt&P4KlJugRA{n zO@brp2%b~*GlOm6xOKABpq!BxZEbPEQWI}m{%8xZ{yEl3Uq`yJ81UTAPsPFPw+7TN zkT)uC6G?FvERBYfUK})gL~u!QX_QGA4JFs>PUlhd^*};&_k0pO9HR)G3v0=)xL`L_H-aHIm92l#s z7EVbM%K-?g*obON983_6(4`|vNuX~t0jjMV90->qRxru(phr1zEbU7+;VtQsnS^I) zj3n%>CR`jop?PUSAjAUb-l&nh+&_js!2Q{MwVtKXL^iWY&KXb6+($BFYU~SIpRy$F zo>|KbBP4u4wBSJ!eUltq@Pxx7DY=tvGFxFn(tF0t6cb3TAmcADLX;jrKX|Zxs|=y- z7Fs-4!cCzqqQyt2L3$ij&;2piXD+r(6qf+!-drt!%+vb z+4oz^?A+S%23VF654PK4o`KAKll8{tk{~Eekf*lFcfcKUQ$g)vFBVBFlU*;%nZ_@| zbvP70RP}-0e{=vk-XE<7>X|SGK6+@>znGVs<^kU8=JBH(7BrTNDzE7oM`eZ_^>yjDhBTZ5)rE4oS=+s;34lES>{_eNN$63Ht!xYop5 z4js zkOk=?4hz@5gFZ2wf++ZcN<^@;AeU1>hB#S74y_)w!x|a)9e{{aJmBlmqQUbMICt`~ z(UlCr^Gy(m!MWp85*K`#!iU(oJ0SL#4$J9`O1jUHVH=0j#!yj|tg_pBD|$Sv^+}8^ z*iYr|TZRd3`GA;pLp%k2GQXFQ9vkrLlkG|FZywrV?*t6gT&cc^sVfJ7YEAYOJFE4sJ;WMz4AJO|T$(-Z0Aldo$w&#vih52|mNOf3 zumYo|x%m#WLtzEq2vJV8y1s$&UoA7*juzR#&dNJTAtiB#K#Q)EVoFVcKE@KVz=d)^es& z>c_FN7)?Ps{EgtGIv6U?4c;`-&X}c!rKL5}Bt3fDMry$6P-U|678fB)j8#QJx-|>{ zEXit%{zMl_(1J=}9;%80h0{lZhX)CzD0Hy<&#Q%5b>FxA-P?7Y{C1TyOuIHRDRqtQ zQ{XSdhsAS~j=O9716)?bR*q{`H09Wq`PJY2hc>4E_IW~P6vJtW)KY^_*n_~0b%v#` zuLUG3=Pv_|d2!26we0pYUYST~vpUKRvILmB?+h8N+2 z>+8ZIQJLYcwXPRRV z1|g=lXm;Lsv%jvVx5?tbW_84SND(r3diCojkFT=l} zFLysVZ9Bs2U!dAFSMwRX1WRo-nSq_+HKh*$Nx`@d*yeVm+n!w(uddV(0}-JupUF{L zW87!;0%9(FqgFqAt5x!VkjLuVLlm&JHdOf61fQ2Ly7Ii`?#aAUp*?JYk7 zOhI_*@-;9LTA?Ct$Xg@u>qY2B;+JD0!}|P^E{66c-$1k<>7(+f+bWkl~p|~kjF9Cx22J{|7?WL z)PgfPOxRQu6aA7!HZzkj`lH$aJP@}3U4T}qx)1oyu+VfNm5}gikCmkN+stntd zj+y9=AnsE1+GxCJx&H`P)}8OSeu&Tsp2@wTFjJ*E51731)J zW?HT3UPSXM$mq421CA|1m}&FD>bEq{0bZ*VRi%*7z+8>VXlwaVWGkwe=gRHO-JJc6 zxCR|TQ%Z~YaV!4g;#4>P{%}`4IBa*g5W5g2H_99uZ5=evX#wJ$*0dVy3^5TL+otzo z)^)Eltr1C==p#Kzf_eS3JR9Z*IzCE;u1$Z)UcRK9-LT)8SthtQXtN+^oAXOk()oq# zmRsKrrG8nn%gVk90TK08z08u<@fDh|2q~WCAS%M3BJXI8T&M9{&VX``2%NzI0+;EI zXF2IZ@~0hW@l$c;Sif(kcR_bhcPRo=?$XLRb>8N$7oes-TVt7}eX*Pp^_U=G46VCI z1=7DlR-8;Jkmv5!R)}@;y-OFei1k80hnSsbTSnr9hT`{%yS)FHdte5_2^^C8V-WOT zS(VN&^*U4czs1Yxm2ZoktL9g{{=yPi{MV`fC`oAL9sPRwRIszNvmI2t(TIQW*WrJh z3`zkEppc_0e=@e8rDaDSU4F6qufg!*qv;OwrvDB9&txBdIeI}k(Rd}&-S3y_*WE{# z^X+d^F8t~9NYBh8#Dq4Pdn$&+n;lpo_?E;ZJw+Z;xR)Qve-WhTJqXe#es~H7& z(o{%xaX;X4pfFHV_KPHEDRf049nN7$m6J8Mm2)hG`yr-H&mK3A!Hc~Yh$|s#ZXfhj zN|Bn5KS4T=vScyBh&(3I~pmnO9c^-b#Hq_1i(KkfSd$|eNtDm8YR z;-PbgI3-~eGBs?(wxcDNMgqDG_1_I|3RzjTP0{Eg8xvv$KLTsat0%9>T+#JK0VB#f z(Mpdk{KRqlNzcM&v`C6`_zXaTI95^z6pRr0?57s%o&TlS12R8L`z`!i9M-WKZX~E9 zOwSc_ZM$}7zq0tV^)ofeh!T06$rvNL{;;$)J6SbsOoJV~Kl_wjY(Y~#-5P+m z&QtSBYbOlB>3gV2rgnu1p_wPDM`ARsTOr9FgW=Q-_6_@EWxBveyloh$bl#IcH?#n69q+!Vh{{8023HZt$I}m z-Cj&zvb>e7qKZz>aCAgq(5H+4YOMq;fxbFQ5a!b(RDzNcM)||ID(vnJDy$OLXntbu z%{}j?jA+2&Hq`+?JE5>E_jo~jjZcm%YY%U3my!iKXxUj)5(f)EM2Pd$7G-e7d!a9! zoP)mIng6sg(O-sH8lux0RjVMKJFsB-4)9$S9GjYc_|+>KkciF+l^gY7ne(h(YIakF zkJH@*zk5RhlHoZk_7mC7iNnIEhs?Fj^@HtFqymVmDvcEc9c@*?W8q>ScV1QsqCwNW z9kOIvqUlSiwm|#lj?tKI;YIra9Z_RCF#II75>=VCFn8?(p}>WU+D*&s3Qd=~bnE@i zC`q33WRqj1_)Tjx6N6+ZADKIpN`5IPX0FbInqAWKHWl(FpZ?OWkXI-r)z=nmf(H{e z{#T>w|4B`{0-&?=KbSFW_tQ~u%50^+Ea&LhB(QZ;tS_nvijpbe>u1lBTDwnaYFKEK zOnE;fZB0a03P=1#WhhWYjv7pI<4y3DH@ zcpmg9Q2Lshl_8{Hl6TH*Lv^4m$lxkm;=X`Xn~S8>3WGe2E%lw#T!t@i;>s)D1e<+J zIIk+odt0l=FvP-gyy4H*%Gd8hSjQZsTUC%EeaY7CVNH4i>Y()#vl&VUTe0HD6IXDz)u$viK+$)JYjPpJ&q&s{>D5Tp z;ea*V#W`$r`HK>3rzB-u+s0tOxjM3(nG`DLQ2{#C;-?u9Zi^{ODzU=pp_YsQlgPZ* z6LaPSv)>C{6bgF(iG>}wrx_+`7NdUGlRo){h5(SCdu@ZDtJ(LL;r+Qk%^-5TF!GL> z5)BvrK!{iQ*I!p~|I1M4YalT)j%laLPkv^y8D=PaXKLsyjT&(P+yp8-g9RmcLxTDH zRK_>YWD{nu{j1yccb{Re&bY;H8n7mR^J#EjLj-YoEcXXzG&wJVDcP#P_lw_NHfObs zG%AvM?Cy}OZ9X+#u=D+rQ{l4*BD;>4>Ojr2%c>GSA%iuQz!@o^h*-x$zX$hPfQz&W zIm$r>mR>6+4{~qK`4+DIvb*@3etTADKIsy)P6^i(&ncpA?tc1gZVK?WfJq|&G%ue9 zdo3b>plO3*PPuN6oEeW@^5Nk>y2auP1;M&l;moVY)BB$`3p9^3kMMTyYDfvcD^b!k zbeU-+7sdGuQ*oaVd?f^XY(wuk*-A7j=Fu~^;os|G^ESM9`CF9iRY@E2)o2-TElp8NV7;Siy-`FNzxofLi{IpP=u4tRd z(P@q^WSyqK(nvX(W8FlzR|)zwMwmer0PHqG>JdtDijk#^dqAs8tRk2RYuKam41i8; zuWDA(6tLd}qdIxn&2S&TR*HGmn9Hm=N|R7hJ}d~BIq_!$?qcv)Jp7-Y8E|;<>*@cL zn3$O8?5X&x;yd8K4*%0+z%Ngr&K`jNld=7O7m5BVvi`e@$A*Qcs?+Ox&fxTyS9T_w ze32}};m?UWp1Yd46LKqlgFlR~%$8j0tFY9@UKMo!GNnm;-uc9OmsN7<*l_VR_Juw! zt6|FqK|ik3IRM#6vwys)0{f=X3br37O&by9!y!N3WSEV5Ucsv9*P%Miz2^#!c$v5J zvI%iFZ20LM-B*hLGH^>urlC%DFEfkA2Zn-`Kr;wB|APjW#1eZB(4vkQOhv;sYqBTO z%~-Y4lwoC=_a?hG?hy!Eh6m%dF!Oy8U{4nXt@&3CGPZH4b64sk9#QE(_rJlIS*KQv zNhp!*chOrqZvIH|_hhB04$ zM21N#S)!H^oTrS3+W6J1?7YC=(Rf8{Lo06{7yf=KLdtE#4$Y^GJtyb^dq(SNh!^^N zL#lQ*#ABGoac!#leLXBOfE>tBN$xe@rnNs@!I!M1F~Nv$8}{Dqb!y(W5|hVpm2$GS zy10N059i)FZkN@IU!)q`j+c#Y(Tx(QMzaluNQ}!qvOE*(I=&yY_ol7HC{K{qBq{ae z@(=t=;q0Q~s}O3$1BGP3np1q9s-&T=I&UV9(!-7Q-uBM`CfvgN8Y-yq*nw_J)r#3Q zn_w)f>>+?3F65RYr5zgccz99`H5xncu8CDNCAh#gWh_Q(B(|ueT;Woo2$E0V@a}bf zX#Y^Ru88_Zzp71ZyFkmXM)*#7w^cCNFz09(9Qd-gB3NV-83@U9ESW3a=zRB9UI&mE=O8-VdQPtOoK-D&H zO4t!Cz)@m#GO+X8C-z?*#)nSO;a7~N%%zXoq)k>bNn$r&A(nYt5vOwlKbkcN=Q??iL#nsRW(dD|gIXy;ZKbIICa`%qRr^iZ%FB)DRmHt^}Rc zK@-oHvBnI;t*~M6b#?mXq#u_l6ekIz(6|yb><3L0AF_QVm9_IFEApg%yUdou5?*9L z17#Q>bN6g{drhh3-xqY}kG2b}Ka9zyTx9Ng8o5U9_XCTA1bpr2Q6jbom5gFH8g1Bl z?z0T+luH2eNQGV!B9U=N2-5thHvTr2MG-P3l%n%0V9hDMEHzXm8C0`9P{h9N-V}~$K$0DCMSTMx}2}gUGmGsb=zpK zwv9Jv(WP^gszA3mEt5LridBKcQSs%`sGe`xG3^G}t+|XI6xGHB9-d;W_dgO-AJM-` zlr8!YeRWcEk(bh$z_iN|1xn#a*`dGa7n87%gJb?SjTU@JZf3RIm(+i3waVJmxOUjD zIteN%hlaMYPiK#~0QcOGO6NS)^X$ALmrgv!eZv8U98{lU{cZj{Dq`^?2^3~y-*B@A z58w0P-P!fr+03RduozWaT`VrkM{5r3T4T$%3B>pLJK1KS37?SjQ}-WwcL zxLGmk%t;V`+bZeR#pPmUygZUb2Qoc%fpNuTlS&nva1b)5yCqQuTLko^lKhL@>;ELS zv+9(?Bjmr;A%k9{fU%?7Oy1Ka5L#hPN5&hz1i!{#{4WQ&9MwnW=_^|u1ZR>XA=Us}9KW`W5{8^bMH@3AgB=LQU#AArUE|G!`@ksBe^1CZ5&H5x3MqbI?3B zK5K>)i|NwEeMc;Z9E+~WpdkIfBzrj_;tPip5t zl6z@U!*n^*4LlPVTXkZNA+al5J-byq$^2|f=^Z75YRVgFaUKJuEvirgKIHg8D6B*u zRy523EULD+)saHH?3L?b?Cwgpe#|?rAQv=i`OAbt=j=@BVeSrz7v_1Wz7%;<6-^DF z5gwLz7CgrIiSnR!MT%3=gqX-hc~UecU#V1*mn*ou~g=ytBB; zqH%Nv7si!X!fnIvfV8JU!_#u>PWcB-Iwxl3XElFa`b!%B59WqGu5TNa<)2glb%kj{ zaaMt$HLHgz=ID)>mV_||ceX6>f}EHUGSIQg=WNn={{-9j``6{a#PT089TNE<$?{CV z$bXMYezXo9brL_y_=rZa8NmPD`2N6?b{?Uq^v^SoxwhT@r0jjnv3>VqhoCjlj>AFs zqpaP!I7N3Gm-O*ns+C>r=7%gh%yC*B?D5mXc{YfT2Cccnb-47WSO(uj@+pIYkRAzg zdOy&4gwNl22+0P25KkGUqsgJO=scN}G^9%;#SVRJsmJD|K zX+=A%a=>vZA?ErJJctpu1w>% z@n_Dx*ovcAD&H{QebV#O;OQx^{v10hjt$P*;!vR!>=rBoz|WJbEUmZ+46e#F-6&f@ zL@VzaAS5e4Jj|!|;sY58>=K4m89W$`>DNWrY^Spe>{rqUZ4R;tGD zEZF)TyQ}&Z!2k~?hIduLILYje*)>vfc2#0Csm$9L6^>25CdUksy-&2!s^8enbV6^A ze|r`S#$jk!N`2g`@!<*6;jTe`*nl}8pNQv^r5fRA{a{}*@$~TYI67jT^D0@d81!9F zPRBcqmusKp@lAjbi5|BqoEFO6MFconZjM6k>YRJ2rI~z^ut-!k--4ZwuYg0Z7nhK2 zmL26sEy%I38b?r1FGDkpU?Gn2^uTu3rOJn#Ja`mUeQ@+RZBBjsTD1E67$w1n2NZ7` z6qEa=6yM&_)^&55hSzVl`SfZYYSASQ)Ny4ySn`7ONf^}WclQJoGUNjhhsGnJf~s&( zv|=m!gQ@|#kCfa#cVOK!lZhXdqR^qn-Y@?2UUxJbxRH?4GJoiR14DCfpK0jDKyl?E?0!7jww+lfSi;;La-Gp zb2olcDU?~N--6#7CMC~PN{W)$Q&=14TQ^n08>f&x2vy?%+U%B5-g4um0n}HjCmXLz zxo(QRz0c}RNHSCz+Q2|A>~)HB)b@OAE==_H4*xn591Tn>Q-95P%qZG$+KmqqD3 z3g^WI2JHfg_sad_&I(?Ij&v^_+Bsivrjq0*$vP2v-f|h1)mm{(L80}B1?E7r;Fwj-UlgY)lrrHc0&oq>-2kWzwFMVyV{H{k{qbvP2$QyeM5ioso)CAy;^bVM)sRv ze{J3H%N)0|x!bJXZn33Bio^U`twSz2+z-l{32*L3G0{>j-d^scU2fZ#2M9p{CcISV z#eXwUM+KMAmwY0eZri;;=5!#H)5u22a4=b`%knl}0;sb)3r--xs6ps@FS%i(j4OZQ z6DV&5X-F~*(yI)=lI-_{e%%L7&M43K4B?n{U7%0iBP=G_A#V7Uy*`;;=MvcT-s|y=3d`Jb$g<8UL z{7ktr&+8y>&A|LOyis8jzM;si8)v4xR_jitFXh)WLcli*{F2Ar+zhL#7$9+n0PrQ+ zf}Szvc^E%$ZZ0#P=2Ggy`(QxjrjMBt$8t&InBvAN5eE;`=_C4GIhs2dbAAk}|q@d2sYP>B8*nH+j)@qsuwUu9|hB$R-d0n~Wo%s{~1?R?7o zk?Z`DFX2*mzgW^Rp~R}|D;0Oqwh`%^`s&@0xI?P;hP(P?4r`}RO$#3$5Ae({l#IIO ze%wzV(~?##=j8kjXj5r97NTOqwzw`y?*nV)a@n@HJUIQ=9iQQc^}z;vPhzs*KJVB& zcJ*AhTHqmTtYLWcx1X0>niw0?*WgMs)o`~JI#LaRMD_R|Gl+fcnkG1GJJN$q?iW|~ z;^}~rY2r^P_i;mfFv&^*V4>kizP|YN)2K@Ov~G50RzK#AO77_V)jijC*4;AK9(WWl zuS`$Z%IJpLNvwbV+>bnyKlPVuvk9THWxpfLCKitWMw;vX?HQrA&b}d#TGbc*HRDI$ z7XHm!Uu}N5MsY%uRarA)!rY^d4i9YFu3T6Mi6Shyuu%VnvwCvJE_*qU+SL4S5R#MA zMY`;_zj5WAkwG|jC3ayUPFE;8DfZ!E{zY|Vkw^6`%B%pY)I>_h_4Fm4uaF%7CNGdj z_MMG+xm#-+;?g7ZNg0Zpg2V?BSku0<=bl=*UdcW6&@g#h8m#VpIStf~7*4*UW~VMx z+)$FCH>-cE;^SX0_)8A|Z2{qCi^~o%ivbOD+hD zm=@DzK~rK_sn-GUm4H?cA%`}AZBs9jb0S`SesJ-GLY0d&JE_2GZgp_sAH7id|KPA* z?7P~9g87_4a(pbmu2m@CUEMuESF7APTYF@|*&g z9GojV_8Xe@CtdS{6Jp`mq>ixjX|m*o3&oM-JVQ&!TvYfVUF8T>N~yM)G6Fi{wNkfn zTj^O0Xn;sc9O6@hFp=Y-qy%p(H$7gaaoSN|HHjOrT{q%QZs*??UzPio)rtW2D z6W>{oS8<&`U9(%jwdHOcy@U{Q&|`A5U*l=c?YRrh;cU;-Jg`T=VIRH4n=j3AyQol+ zRu(vQF&ev(g!e`QLh>8#{y@9_K`vN$&i1E1T?z4(tTs!I}#asIP}v90Rx+2J(YmJ4D%AJ@fJ z>l!bZ;>E@CFu>T_H}8ZFo!Ei8aAvY9yZww_gpHz11>9T;03HyuL{Lzdax6>orb&M zX6q*47wn!IhJ#wI6tCzO)fA;tDsU2gnNnwYpr;s5^gDv*C;RY&5bkJT9G{Kr_h=Xr>Nx2!E_MOQ!dNr=F+2V z=PYU5?KB~x<+P1wB_5QgC@N29XMb`P4w3i`&65|Kp|YzV;eW3-|NH&I7X&1pIUR+h z?Zk$lI`$bZ1Du`g=0hu%>_1jLDacrc#2@Dr8!x0dD0CNu+boDcZ@4KCA?hez+VSvP ztbIn|zZ^TC?a2$So14{I5bc(N$CPI_@B#@{ZKHda!U>VoM?7^7!RnxpK7A2Flv$iu z8x1-y#pF{!AMFHF8fRSd2Gud?E71uz67~K4&?!f^d0bV?B#A;mecjy9MmmGY5Vc@* zh&*gLOUmPwPCef$VrE8F4h(4(uy*-k#~ylh6`$s=ID=2B z?3fS7j#f|)Kk*$MuX5fOb@(@j>d1I&z$<)K*-@f{T++R93|B3mhu#V_jPRHP8Wr_E zXU9*@iI3S+!nk^LI*BT?PPG?}3Bku_TIrMSX@(A=*;_H;MY9lLKUT)| z%wu14!;9~L|Kd(Fg!Z6MrAGL1n;EK#hi!RGb@M7!0>?k@$^?CRIwUuz1=11Y+h%}n z2u@|Es5sN!SObdGm~He^;|YE95ozL!`Sv!2EGuFh693v~oy?mhbJT`_{Dlap%HnMi zz;028(6~lY53enCx5$S3k+NY9Fb1`fQq)sjUHeLyhS$MjbwZ<6{n{q}Jt=yYrv4B` z{En@qmizFMx;`!5HIBE>h0Egx#0n&!=1v-TkJT z>E}6|4}fQ1Z0s(nZnYU}o_h0T9eA?bC#ncY`g;S-|A#B+pP0Bm+R$m^!2t@ztcxa6 z=WkQ|bsu!gx@!LV^Dk-qZ=Vc+j^f|zHh)lIzq85xVH*F9DdZ2P<8M@Q|7vXhJ8{g5 z#^&r0m7v8zNpN}D3-H^SK-hP{w(&sYVdQs!ezSOfj@-A@B!TJ;VJ>`f0-|*u1fZs) zv5St))zz8b;y}==_%hCSKv4`_oqMS}3ir`qf#P7y(iIEgiF5LIG1?6BBajW;!Zy`# zycBT7WzC>i`U%!yE?jn!A^fuvT@LPeTU}pRFPB_Tc33zu!80A^4ct;%CGaj6d0fI$ zFU+kJ5Q*a>E36}TZeh?qx=yc%tuC2x0lW`Hf3y_;(YxA>u6rtbh-Q0hwx_dQCB(d% z1HMA@`YmUXpK157a1sU!)eK*6fH6!c&%BmTAHAeMxE1OZEJElM$a480`&~8CX2VLr zX@HxEK<}=m?{5{IS4ufoY)s6LF0Dn|@Vz%7Vw=G&r9si|N+)U)VZa6;N~p=a?KmYB z9gev%gijJ2b6_({SX-PYlnh)tWa%LB<=hptW1AZgaPIH=Y&7e?j&C%4MxiT}=DGUd ztQaod>?ZdX95k2J)ET|>vP6sN@x*As%xwO7){0J8q)5BR zvjN&{$dD%@GDn1EP7i$zWjzddC47z=re;ARd{C(Qb)rq8IKxUHRAhXO4{wvFxliFD z`9@ui{BIjaVcM}9+2ZkBMZe$mT%|v)SB~3x%S&1eS~5Hn;}~{#Yw$>T5?oVEum1ob zG{-Lfoa;&VkhWL=6CP%6axbi)cGVEya7#>U@VyeA$@`4|i@Em>hqLd$MMv+wM6aWl z1i=W=dkZ4k=q=hXN@9dWZ-dF`U5FBbsL_MbyC4V#qe~)M@*p9y?>z5&&i?)0>p5rd z{m;41e}>C-&;9M+wbo~?TO}b(^BKYf3gX(L$Hwn*-E@nrzd^K2Bg9@`;+Bq?Hk#NY zq<{GGi3Z6nl+sHN?9<{EsT098X>SOV=@8cM+PYUz`SBfzq0Q;8Yb+L@BZBC#UJ=MP zl*e=aQevhc`rR;w!qWVftzLEW~wu)VUn7pQrE9_XY z^+X+-YHYy${f!Y!csspVgP*$%!n9R&Ap55z7YBC(=)2443?A7Kj(uwCBRXybgzpW1 zoWM@7F)stj*{onvfekP?9F+jlEb6ydObXxCar+iAs9VP#@gQTH_L+&6{V+%=vTgJ- zVpO)dG|fJeiXC`;&i)8I!Im0lBJ_}TCOT^f&J-coQs5`Dt^PM#8Z6hWt_oKt&gOCi zTII7saERp*Fm^^6|BM~c=UqUp@{2++MHS=c{az+F1w!r&I;c9tHaTYN;f$JW^UE~j z$T2w-ksaI&TcA#^KpBWKA!URY)8D(r6eOs-?mzWKkmhGZ^&4tvdV)D%f_IB8lRt&n z8XF6^n8>#9uT85Pt@+#H$IkG31w-#!sSs7m5PzBr0` z>TtXRv3`8IfmhwOrxw(E2xtodx4*9Bze^|nWBm->^#1(3>ty(hxr^cFYl>H%?$nf` zWsmA>GecxoqG<2Xm@$`&JVIW54?C`$5rRV8=oi}s^6vF{m>Af z`zlX}C$9@>_aZEU38}^>B0C6c*53NHNA8XC{t_WI#asYnsDFgaPud+M9+oF7O)AYO z5YBI#9b9gMYRt&!^r|?4++`h+nXTGvLPTt<+k{(Re1pWSIW6k{Rc^tb#i^zhK29X$ntb~i%!i1T_1ze#Pb=qw9Uts7V~5>N3} zsY&kGgp2MdFLOK|)7&90NG9TK7>K6{6zdC9izF9IOzDMU6} zuyD%PIz$QPNRaInpClu7(FV{ouZjr&G|ir*7(iwNO|!pVTQ70;v_-zyDK@Yu%fkj- zKu6bQ@#YQtm6OP*m8AagH+;OBF4}wI72-HWcnsxyjNCWXPto**BQD6WsTLkFuIvHg z+O*HRpRgzvzgQD5I#7{wqvi_+F?)I%ubvL@8I`J}t>KIgN0�Ifc)Wr2de+rBtf% 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

l(3n9>2X zBoOdYfSu9m*L#&(?K)d;zC(w*aL6k8l=^-Ix3Ju5ci|y3&?O&f@ulw0dV)8$afCf3 zQ)P?!?rzS>(L`P(+G1_-bXECTq?o`!a?MQHLc$qwqRYZPW>{z z@PC7oB|PCl=T;Ka{F`BRNA)?Pmm62jPEN`@e(H6!llN2WX!a4mT8Q4+*_YLouq`1z zx#r4D{Fm%p>yInPo5#;O-#)Od@_%-1ZR|Gs&`u!WU;ZIB;*O^y^ACXIS}gigsU&;M zVJV#}N&??+#nrek$9bROVkGS{(L^a#rLy?>p^!sR$%Q|*?2{g~5G)^wJSq~_iJNTss z2%fNg^13aTvTN^Q-Lc*RE%ZGL@KSnpG;~{yAt*|( z_5A@1Yor5@?gwX_f#)FaKtZD4$hrQ{;&M!pEfL1AVdCNDbd++jmYAJb6);;2`7y?6 zIajc@M#_@15?c?-nnA(4rL-0s;p7#WuoA!k2_Re`QV_il_g(L|0XQ_S1Jytn;*hX* zyY~i45`ZY&{n>^Z1S~kdGU_T-S{TVxN_3*>81;7gA@%V}vN5?9Fxf3h%rm11P+*Vz z7ngAKd&Df%OLy~5tm?*3Kw)76R}6)s37;TtWjdN$sgF?w2?vzu?iz{0NQe`iR-`tU zJhuXCuDjTFg(L)Vo!RjuAje{6Yg#-@dw?--gPA2kLJ+y6{i$ZfnWI8Qpd1 z-4hRC4(V`fr!?S{BW-6w&9uflVn28#ozI)E5BE;MfLBjh3zwG+jhvt+M*TA|K?o{F zmZ))~OcEStr}jHE>`XQ6r8hvaCZnFpn+X}zNMY0$lzRCnL=F8=tcV}(U~e|ApK6st zsgwhuIldL<syoav#Z9DfOl%x8po(x4wrl1{p!AS!JkT#8Z+4{a znYsb%81s}YF|vVt_*@=&QL}OX5m}AL$O0)Ahc zXYRyFG2bS{&osgGi2uSeiX@e|!4uHE^igXD6UouB9ydEMrcEH_3D{hxT(g3kT>t<9 z6fLyfPlMv4z1ECw%sob!d0#H+{C^4}r7(GLD{#>%5HF5Kq>DC~KkK)C1;AD8dQe7E zH^vrJG&!xeNnjyUDhSjofF5+knPLIYUP31m0YIru!qLb)!fQ_2z+Vq%#hgAc+_|f* zxg6mXi9_@CsD`Q;=-iEk9Q?Vwgqy0(CaKn_pBkIi^I@tg?dE_}U?gq?SLJ+hLqLWG zNJ}{pwo_t9-zW^Af+^c|az73=9>u_j)h|obpP=l8!Hef~sq)KjT}Y)vP3L4t7n77A zjt8S6gy7&z!B_yW?NOBppB0?jX5BTWger{tv zv~2kUs>yDlxOM_3e>(Y+tWDb?%K?u!gwi%Xz_uUU1{(ang_!5Xz5KJ-eEZEqYDS$bzJUd%CIP z1MU0ED55<^>3b8PlLXWEv_U(JLyF^ns8PE3e z%01EfA zt2_;g=yINe}B|-8eAuTt*~H*c-ej`_**8U{)ng zCtuj*ivznxgv z+{zc713XbTvWQf_(BM!UavU@73A;9>F~BQ_Ww}&5^rM&<+oBU*r~kI&MCU$By{7bF zi)%-x+S+^_Tmy^;Uj3$v5DsVI5+}m>(ulQFGA$o26kaa@7os~eOT}{OXW+vEMq&R+ zN8h$5C2WkiBgK>L!9^cVbWcVqkRamVE}m9yAM3Vc9cnIQ48wg~9`Q!Gls++UQ{%Si zlgItDE^Y=x-{BBVZZHEf6neP<_I~QYgY{K@=tuvRQz=S+n1;<(y$Bqkzb)ZBmA(GR zngEkJ`thph{Ko~V5ri<8)(L2BetDC1xbR_w@(;!h@q` zoKt>G`bdafj7lc4&s|KJDK2hC=zDPYebYOaJBew(AP)&;R*~uuwQvE8MmQEey>!Hm z+7_U&txheG4=UYL#CPKcMDav$WXnbZrCzIjM%-bUDU~xrl_k@_nBe zN9fQv1iXr)k+F8vh+uLH7g8zXc#=Z0tqWm0adUwixER(jAzCX2b_LLn3|$bmuXrg@ zNHJrsJ5Ecj-{iFawL7B504f-iOc$=WrT~`JnH1P=p1C*h;dp-_lS<%w9Q;(F(ZbZ{ ztDo%-ns)ivhhRzi5mBVafB>jJh{sFj$Q2Q=u zjpFvBU(t)@$Nd4|zd5x|gL-i&PYoMIiS~AyTF&g+eExiU9kwmHZ)*!P0RWEXxoPrq z#{=&LGWV)$aFxx?xC7o3`OV4n@&R)qrWMZi*6+Fd-e7SdL|EbFD$pDMDvGMFL1*-PP|aYwManx zP;&`XJpa~IEc;P-)>%NeHJu3lZB*u`ab4isMuIh4olfp z>gBzt-{6`Jxo4;EWEN_N&0+J+LM#HMth9UXDdP5s16GPqH^3LELe}PspNs{+WOtAp zE(2wtfa^p}41YL7mdhSbRJZOMAXW&Gvbq}#FsB)u4A4v#RKYh}k<}nA6-Z8)$odXA*=u5_z^*glrVAY^9~?6 zF&3Fy;f$SVXLJSLk}Yx;*Jr}u1^-j?Br1S^7C_jOD4_Yi&s^c+^7VTX`4Tb5WM)0F zrdT+75zTO_T?Q*9q_2i^UEkmCLa0;=lV%CNd_9_%)s2s&|JNO!&v&xyS(Z?7eRu!k zrzOW~J2Gv!6J=n9*6B05`Oq8c+Z^tn-7pCLM?V*J+?ImeR=reRIm4?2n)g<LnmRESj=SRxS@Lk`3-7c9ixZzl>F8V77(uy&|(&3dR^l-(ENufINjyDsSi{|1VR z%`rg87=P%H!sQ4bKSX~J{Z64@{=>;6W=nu{3{0rs1QYX?pP3>SCekS9+dDu2hw_XQ z*(DM=7xywEO*@{MPgKe2ZJ2b8&zq_(^IXqD)HxGm-P>j!&TMz^S0$;)mQ(#-Z(ZWQ zLwtEH&hR?#zsmX1R4Z15D1rui^Hm7fsMBD`DNadFv?djyNA}bO(D!%f!UHj6YAmrG zIaj{oGNgI3HZDp8`y+B{@__9y4kUx9A{JC#gc`MvbW8cFL#MEZ2NMmvwH8qR?4g{V zmk?+96ex<7=wyzu!u;ui$vP?|3jtBl>FVl`Y@ui@{I)2tjw8z)yJa|+hK(*x5uWZ3 z0Oipz-$0m2)@}B+i(2`RW+IXv^D+9BBj<~D@ILoj`a|(o>VPkgjAhYaZ%m0l07$=` z%jDeq1Iig#lBck--(rgL(HgfCjN6f~+AY*syY){~gb6TtjZ!|_zpYEK*!)C-uU?kr zQtNHX%{T+OH@7FM0@&`zMD^G8s0_NNID%AQrd6X8f4$h+rqvJp0fcL-lEMYMG5Jqu z%VOeNmInJ|-BKA49->kp4E=LT6r9O)-f|8d3T8(Qfl*~(WpKFl)AAL##QRmHwKH3E zX}SZdvjxz3It2!^&^|{Z_e0*_=ge;NnoqSvTIUW%(Oe(mNBwY8o4}KH_>uw0g5kbf zX4^`DU=`uIh%IKKGZlkPR3tQbC0Y{j@mu zds>dFlsvB74_xA2!P#Pm2I*1OpyV^R|CK|6%$O zPqu|yelrzC0uA4U&4`;pFnreak-aop{R4ADlVFJKZJ4Z>%wA@q;Ih@35X_Fiwxm5m zIRt%+!KkCJo3dMo-iGueh1=S zfpa^(axffM)jpAr$oIH#N5!xkp{$Ils;EDN7iFBOUyTQ}Z#7G0v;-%D5O>o55JgxGk z>;V!&6NFbNE6(_i+PbOGKNsdGJl+yMJ z7qCUCKJ4-^$jAk)f?t=6rb|=(%M1#UN-jLu!g=y7t+^_MkF>pt12LBueEd%kT&aVT zx%C(``o`3rejl)Y3d|$3p#h69e%9*msC^$FYeN#SDi)cC*azb*`$o}E_Ya_qe%?A< zPbre0?<&4DP&9%0_;ym3x>xQdk*HqMD6(^Q~m=U#+HIeXsfZ4)41qR5 zoHDAG7yZ!_;j;cB<;Q;j%7dA&^&M%ky@*srHlZ*rX6k`?a@e0fFEPI_aPu@g5zyeY zIh1zBm5&6z1R@I%P9=*&NgD3`59$|u++vXrnj95TILf1o6BIddj|<=0H^e-4j2n1v zRG)~Gcpmu4Mc|SYxW~qG+W7N*+4-OJ=?rJeAD-20q%ozI&!997yVCU zzE;_!BjUPcfbi8-!4`t7EBe$f09!nG$T5MyEsm;HRN=T2OqJY_iqQp5GqYM+TWnY;HV<7 zls&Hlo9EyXnEW(gnP{*o^(LZv%}@g0_^6*ZaPaHB1lp?=`EQ-$oKuG@V*rmu@%Z&A zC|q$-${i?!h3V2F#ZkM(qPVlRSNbNRgCa|bQsykptwW+((4`Y>7DBc)VUpvl1=Ovm zIB=Fl^R1(j)K+E2*mEnmscXoobJ{-w0Z7z^PFVWk&F)3X0#Jn=`H5Pz9YIvfWc^S~ zc;!HvmymzumxI2YQ@XEW`d80Y*vP`UdXqw-&r>7(2oN!f*3(^C%PeLV*R}?7$*=8* z>6Z`M_>?HeW08WB4GaeUyJqx#9Qp!#q1@NpqgZ3G7&N-3GZa7RsG`&o1m@e`x_F@^ zbA-Py4Mv8OAO=&fm+KZUd3iz<=&9JLnf5{*yhb=9@Llm@Ewof>TUS}sY$@GpJg&+c zWs0b(&}&eqfL|Fa8@rq8P1D4kYINdLJugdYNNnru*8(t&00%eD6J4GxTIJ0Z6=QX2 z!THMbt5jHIP6)anJ7S%0vbWuV1JX~(h0C>V-`l?BVXgGjH&KI1-f zXxpF@q9U@PgNR>-i+7u0-oXW`IegA!zBd+m-@45%3QQFEWr&|_$;ZLQd9|W!h{l!o zBdMUVdBg%ab33Z!N13BR6{>P`aG*zd8*(FC0G@)fCgtx!;KTHC{!}Zut~Rf_}sbL$id_fYb_OQ0p6 z`snn&Zc6SWC5HxU;{hIhvYZQqoDkahO_T{hmIp}|K%pQwQ&i;vG;rM#o7bK z!aPwii|^Asrv^i{f3{ox@5ZEAGhrY6q8f=+EN&L~wyV0(8bqO8Ux| z)VcA+jbNHG2di;HtKXBmrHO@xG1{I4SB*3AT*lEG637rHZ~}f!(ZqFoZs6f1@I)6n z2Xuyw{6+A!6RA00uPhrblu_H5jY@msYIO%%8NUHy3@rQzU|~atQZ8rMc&AbfhR2#! z2j6!j!}b)N~t!Qa8TU1$N}MBrTp-F|hQg<6Z4Q2m2u=uX48V^f|j<=K|s;pHL& zu`vCpHPsr}2)vtH_lHuX7B-}7H@oo_XAbsNDp92BBxJLzJ^hH|LdY8t8RZnw@jWU2 z?ekgxwY8A62t`nlfFOSixl|fpdZ?bw(!DN{;%s0lAA2KBb3ql?MiEz$$;d1PlMfHA zN*hSC|FP{V*^nnf-W3e{1A{7HX$oRPj8aq}Hp$6^wu6z|+4=MH-t+5y7A%qBG!olC z1Yagtbf|Vb^}4Z>ieLsaWebUpj7O_zq;CI!kK!YFv~N*Rr;IllHi~o+KjLbKC^Rcfo)N(?@+Ggn6p_g@+kw>$ED~*J zRKYuH!&vUld_H zG-WQ3@rSRNpKE^ijdxt;;F+*k?5-u;(h^QixWmTI%Qlre687Quprj?4Re}(fDn0jd zos9v_BWi3K5CgVc&7-g5TRLja5 z$5U}Bs+`A7Hx;$wC;=N`4OkpPtemNqv(iARHI91t36JftO0={+0BBC9GuMM1HcsYU z-o5e=S$xsVjNcL77$py36*5+^i)!#&OPSUNdip7rzDLy{kB;{q%@P_oHrwF1)u`@i zzZ?omO=AL$Wi!fX%*R<|;dXLLO5Kno-5O-Q=R_%7zCNRIEoEw~+zUIrJh}CSLe|%k zqk2pb-D+KYWy;+y zMjPRch_?mUmGY?&p-bUPb`4a!<{h2`h_WH0%-VG$m$pbhq=n*45BagC zbAN;<>$FK3_fs`jMWKEDg>~JE9SdAS3xJ>${HcCN5q8a|7JkdNI>HoI9XpEo*m9ex zTvb-pc=t@~zQG76p$byC#>Aiwy@-{R@cbYwjcbl)tYR9@U)v>wVAa!6eeuYBvE0&y zA1Ner;Nsleyx#6-ge(PNOI>kki22Vom{=-8q^pU_&GhAdxLUeITD9<_TX^}jc5v*U zT9}F_jsr<8Oo_-~q+_Z4n^Z5}S*ci`#YS_p8+y~*@H?5(JXbwOWR7#& z-rFKAlw;3Vi4GPkErSYfGhrr6=*LY_{b|`-TH!8saQ<^G{u-uQ8dk>^-o;KMHb;_a z-xwp4Gut~8 zB8n+iv3zL(^R^W{MfWdeadYM7jyX$-Zy#{Etzc`EU;`O0t6mGq*tpwdD*@eFkN#98 zb#d8hUHQ6+K-Cba*+*#gg;RZf?EJ3OVKxK0GJ&nRQ zb38nLzftZuh7tHEyroA@D%v-c!hqxctPIz!wn+!oR8Pj@-V|?0tNYMIRkTob0FhFr zAQ4_7k>kw%Gsi}%C2N{yGA>Tm`qhR^eT2GEEe%heii`BKVz)wspl5lIdCt9o4I3~^v4aU{>Umg z7;UNG-`<$?o{-Xp0&k+T!bHu%Mi~S)nHnIBUu-Vr6K7QO(QLLpQ*4U>k5UIa{IPr!pr>FpFZJ z3MMNvur6#wu3M?i(N6ia#uQqF_zy<3VAEL47&AZ2SiHW-U2{FVp4)l12f*~|g^tb< zyQvyZmbVoFDgq8T>&*U&MRgIB_m$~ACFalYU;RCfwdz*<3@wq%MtsMn>_ikl1^%Wv3STb zzjasJsJ0EYTc3_mHmeJ{m$WL54Ia36DP9Ob#ZHW?$eyN|u9{QwU?5DuHOI9C_M-V5 z6P6?f<7o>-%(5AtIwnFj(~u&3{baH{=5NLtnJ76~ks|ovs&a>Zs$3ifFarbtrNgMM z$bN!sh5+FTbBTv8@Ks?DReHS*0Rr(&NM06{^w02~49t#zk|*vUE;n`eo^Wu-xa zU>rd|3fjnC)55H&!Qk=0K1$PQn_$E+BP!f+! zFl%)N<&^=7!Q9q3KC0OhjUtNK5Jh3pl7Wfzg4Wmw_<&=wQZwH+oGS{BWYu9*)f|`O zPJ`>hT_x>@2~L@eGP&@_ocD)12D48zOC~fp65`S`eIGVMv0VAob~TKwX=M%QfLl5Vm`*h(Km?islae@=vmGEZ2-F z(G=FD_O@><5ShWpQMC(IZKU0m17>4^AS5Lb!V^N|?^W`e=Nd(A(-|I-D?;s}sNeuT z8zgskHg;^HNCm=%BLesnO zp9enxs?*F#7vp60uGM`_l)bHzUR|OYD{3AKZcHsMv#F)2a#yqYZM3l+ zjgxKv3+ae_Y#L3cCE-nFS#{6xscdp1xbvYk}D zfackJvs2ysr|pn@&kmX7BNwEq>Ch{b6qJV(wFYoBHq?;JHk(ZiTau1WN7Kwh4G(7e}9(MSeJ#6 zV44kOp)J7=pRG0ikS#xT<8>fPdn8uuW-%_E9!rY!mL@YbRPCmwP;h|#19+d#xB^@) z3wJj9Gq>oqJ~fwE3ZOA2pw=s#Y};c~x1vs41=P}c`VL0-xi%Zp#o3(FteVfuX$#v; zd~WeTg}n-k%W7aT9(nH~o1rqGbmD`RSi=(p!nOB%3PY(qX0z6^TRTVdr5XGK*iNt2 zuDIk^8+4#Dg}9=KQ=cC!fE3hhO63%9#+*0HJF-}k#IR8tMlM?XKTYw!?O4gvP7-}5 z-qO!3bOML#b5jWOPwNxV3MK-%mbYoitnCG1?y&p=7DVxLTn{Eszez^?#4_J<&3F|3;hqA>o~XSSAnfw{M*|0kOFU{uvyQRxQuI=#z^m< zLH>QW8vBjRO>pC8oTeC@__QCIpy`RFfu*tI;^^BLDu&SmU8W$d#a9zc6lCFTZe=T( zPj4#}hzabH=~kmn>qWR3EfZF-G#PmNc`UD2P_*p&OFDzZ6`yIjH*H!M_qd zh`R#Ojy6LQ*eSACC1ZEISZa^l6&Q@0uSF*c`^6W+Dd6eCi{2-k3*wQ{rW|qKXj-3{ zeyy>zMA8#v%9XOGgDxw4pR^M0TFJTY5@j6meoK|yqeg*ZH$7%bJ<7U+(EMY95UQ!WAGVBH zJUtp2bu+{9oaBUa0)Ey^RD7LM#-pkOjZv7)yc5sjQ#A3OOQ2^BGQJzRiCQ;9qifyC zGy~&5*fmECl8~EyaavP`maz3;6s%gEPmRS7Iv<#BLLW4zBG%gD#>aWB`D!BrgK28o zg*H2O`E)E~o%{J4y|-;8&5Z-ncH{tZgf+~^eX=7@oJ9U(_|`U}9*`~7euwcaH&()2 z`A+fq9tAk+n-2iaj~Ii5ASdA<0_)*;g+KCSfNawX-dN8>Y0uN`DjtO@>y?1py}SBGK&8kYuC;A)xK`0tB|ybV zO_F9}Xp8^DU zX~t+}m7tz1>N4lor0dS8w?HN<(zRws_yard0~T+93-ujw9+i;FS5&Fw{OrtNE|`_0gz34nz!qeJX$Tcmp? zho=Ji4t3$v?kmKJZn(oz4CwhNt9A$7x3)x0mhkzX7|!~YhNoLCWzth-mFm5e!INbz z0@%=Ytftq4mR{}44cdWliOUi^K~>iqlf{_{l1PmOjRk|oB^j&k5W1g=3yrbquceBc zUH3LUPmGO)2j8^I8=B6oS+lNdVWg)@wN}%{qlvNiY@e`Xe9j zJlsLC8%`#FF)_IWfrEClC5yWw+W7Z0#r%@$%X3>d0WM(flGI>NEEey{TD$uUMq937 zrBYLrBCQ)OBo;hb)UBavHx*Yad=sJAcb6iwW4h`%}GZe@dNWRdB4w|}=xP1wnb$UPr6Hi0W0 zaewL2BKInnsSK>ia<_tYlhYY@C%ZMWDaI7PyzsuagR|mSbbIv@4UDEM{hXQT9pUgy zAM}lD4?b^Dk^(G=^Fl*}b$sNov#ZR{!ZjEs>2GvD)^4~maCfKGnvDQR`J()i1-xk8 zf)2&J?@!~SHd00O{deEhbi$m(ymvR?UkBgDmIbt}q!ul|2w^r~66cQH?~A(Y9e*tu z6Yi9gA1{>Vym{Jo2uc;r`o_s8L8FAQu|4vi@9A{T`+-hjAk)MBH@xJV{irxkfr*&hF?BCD- z4I(P63W)H(mo2{f`YYo5I-oIsOoNgzK9gxSQ7Ufk*osZiZf4Lj#Y!#kiIDoUHzs`^ zABWr54Tiov6U3=Ye0kKqR3S0(AWQ$~r1W}WAs%U^&vH5z3v4Rld%f`lCwKA1iWDVF z=fL&H!t`1?DREVUZVIFDNy@w`IyQZ$6hBnd^O!#Iy?O{XN?URHcA{T4$i6&{{!f_c zB5U)FhzD+(9s(b{v3^MX7;CvsRf$F!z<*TDAh6N7a9SJnQMLtwzIn2Ih+;VJn1v6? zZHSg^?8FjPe;kpHzCu&H+w=Xt@?Ku7DTRT&0prP>rOocRvTB8iKvTm&%TwvL-l5#d z{q`ja7C7Sl+5Y3_D&P`pZv2`|T7kL-d^i=@!`X#8HAA;8b3Sx&T*6IFl-0M!zup>N zRUSjG?%2b?(xyxXqib(^-syF|9c|1WF``RI9p41zi0-NO*G_bbtDz>L;&E+k_1;dQ zl6bn(bDZdw)_M2T?0;Vlw`Yv7!Ff|Q-eOTDcD$GwB8JnNS2Z7biF7>Txch*((!6RV zwdNA_VDc&OVz;RPluR?xDI+zm0hXxvAoWh8hF}@0*2uO3*UbNY=LLg%I&Q8}ySwTRevRJygAU>7pq*Sm z8UU&*J{@FkRGc|u9FKEa1?zt_;K5xs`11S}6G>g8$}iKeH~o>~>ty5%Rc1X_MQtmn zG)a?Ln>9y>trDEe%OO|$5%t_oLr0vYAuR+JQ{ykN2`-^ZqIBPEduqOQ-E?8j?50-s z+jLR{q83^eFgl~iRK^@dPYBxm%G!uh$8!U_C=+B(Ik0UQ*hcdFj^oO%fNg^mih_O3 zKJsBHAmAa*_y-d63_3bMP8&lP2{%iUeRGQXG`t*&$7S`Mu4e@g9IIBgbq>!OdRx5S zg48-Ue&_EY#Ult%BVEu%T{E(^MQjL)=il3#k?@O7yG?a7>DW$uvSFM)>D~Xf$S~Wg=^G*-b*TMOSvP}D^-V$OaL`Pd!va``0 z>)Tg4t59P~>2^-w=L-nj!HF8Ye?UrgVLlt0c&vdC2n5c!4)F6dCFcyf4gONwl(NUH z{Z#Q>e1a^yhOL>X!VCD@c(R&q^--iy8zg~tkIllZSjY_=I))0YrVKt$d#h;*ckgN; zE7L#K@a$qxQ3kOYT8Bk-BetNuvEDV&iu*%p=kZ}$xa>fGOVWGQKJFJSnYnXmv#zKC zm9&%3Ii}w95T#MiGQ)K;Y-}s_lHMZp6_i*G_^>D^U;Ce%+Vz z=a$-ON>)U`MD|JZHGclqHjOvlV}qOsITE8Y^PHrz^y}sSE1j$N$|4b!!7v^^^o-dr z(U!lk@GgsM^sdfttn*?f(#stZh!t&*wZDLp`+)2~MMXh+FRl~{40b#H!e7o-U+bYT zv{*H|6A=p{+i2vB3Ae`(M>xgB5o?j(PI$U7wTkOQPV%s#sh zy|;e=sk+O+={|fgnHfr$+6y;ZbW&0Q0!R)jPJiTC=&4E+D{CUx`{$kT1NDpIzT76@ z<73QAW4ShuI;bp<_svc5f)bH56LiOKs$SN)g<^2$G2*Qg>O^ESZlv@WdQAv+mZ8;A#BCilluaz$&$` zox6s6z=xZ}HjBgAu6F{0wj@$8sUaPmHx5&;?G(~7N0)2#@6|WH{HLup>4Cc~9S5W6 zt(ppOQOOL~vzfTUaV!m#8Muq7m;L!ZH;8P{B}i6h=(tYsm1gRx96J`CG+lbmLMnJ> zM3v~xW4!CTw^({=qU;OTy)#r4ouVF(Q?KvpAF`a{>O`bV<|hi;7!e_gF;lZk*bj(e zgaXvY_xo?-wyzvUsX_|mf}-T#KeQ{8lp)kB)QiH2m?Ir!Kgwi!SoAMh_zrM*VX=D` z#2f=s^hw(V|I^i~=IH&~n6fL{9o=;C65^SI&H$J?KcBL8CAC1L7co(M`0)?$_+DR$ zAzLwmHZEMidP)n$HIO5klkr&>gSW;0)cN$j@led8>u%aCY{8eO-=5J%_A**5+mwNV zc1a|{fOCrut063ye*f>_pGSOJ_-NcEVG8iiXK!{3`3!GOYSpn*Cng=%MZm1g=IQGG z23q0jSgIVu3Q8@SxO3`oEue0APMIB-*-cRK7x2!mo$-F!YvSnhcGAxV69o0NG#}Mh1719*bf!Jz@WiRVe*6B^A+|_`7Li+eqZ8N6!9|hQI z^27yhDi^G%2{6Y}$>n@hul0V;2De$i6A0*wfJpin)(B48eNY z^(kqp#Vzae;ahzYS%&00FR>CJjKI3#JpC+15hg&euO~poR|hU@x8{7_*6MZMqLnQ) zgHMiYk^VH8pn*U`P$jvqY`}Lzsdi*7A%V7tZWje^gaM?<2=gA%=`~hjgxSBb^3*le zwF!}wC9|4d9&5Xr?8Zb{{TV4@M+=$G&b|@D>;iaI2AG*5uoX6*m{&CWyg#v_9uCK4 zSRO2u|6cpS!!CjW)a=B>NY@jy8p?2PnU5#2w#ua3Ih?sU+EHb-UGBhqyr# zjD~rA?O~z_;F901A?*a84tcH93}vXW4YhCJH#T=K2_wv@F6NPInA z5BXJu8?`AzGWN~k<_tFbKXq}ZVtcKNL?09nsVv>&{eB!>1V)S?Js%9B|t0( zT*g|L^vusmQ22%~-?9?i{?(6BqrYqyeJE1*qSOCi+$I_uOZm9U&ZNPw?f2AyP<)?H zUD1sa_ux`eT{i?5NMGaR3uJcWr4VuY`RB&7CR}{hleMdnLnTJa;AM^5YTo8TJx{D* ze5lFnvfbau!BS59mh^*LO;`=EX>^>@HJ_U_A^JRVn3b-rA-?4^K8;s);v>7XC~x!7 zum0ZOiM!f-P3{*G*g1xVv*+rdu4f%_eyr>9>CEOmhf#!W2b*bB#AO?zCuMi@+b3T- z7k;wgq$lC#O|=FN*45xYFMIdXi$VPp-I}q&x|MC;jnO(RVIV!jR@ukC)0?Gt5oc`(?Zo17a8adr~z}CCFW_4wQQjb z4D(^}dGUSIQsLERYCQ%2QUkVDUXjCUjr-Dua5gLYv!;aO<>XSK6~W4Bn&CNW$8#l-YgWuxXra(itG$N7`2ba z#_k9cBXV)+PQ0GeO3UhP^WJg3K!g?ic!ULE7@(qyu(V-kqYBqNV-S{I_H#XWT#TVl zh3Q!xy^G&!uJ%E0lfG`6PeG2QY*6RFw;keZG>=>TCgTR8$9sS#sYUY+c8|I^;o+Jw zt!x$(52fu{uS3VV2O{vuu+iicw~cN5_LHvM9j4@3%?vK9D5*);i@p(M4_uRbc=mt= z{>*{%9QUdj6;Z`Jb0)|cm$q^+z@g0^nt(aNgRs7rZaT+bjZ)!B8QB-ob;~e}g>0qb z_?Arg!F>vwME+kppm1Vrt~n%+6S}A%K7`{m^YIG^bS0fjB%790KK8fW`nH z6ifFH(1E20b|zXJUlve+!;k<1@Fnvxs6kC3pEXuD&U`P^k5* z0**JGL6qwYtdOS^RIIRFqGGmiy4c~+iMY}4agah&UZJ}o;M?r-DXHw6*q{F^Pnkrj zWuuF$@+aAr?7ntOk>zk{ktKv#*@oKBEJXa&WGdbM3|N?_(XlLx*w>>nPkkD3F?(ftq{g&zN7jlgq4NRQ|lQZtqQxv%f)Zs~$=y+7zh0t8*_GX;j zShT~FYM~Ha4XW>qgO%gb5yY7`ItE`^cH+WRW`!6=m|DDH9-O>;@eaLnVX9VtUAXC| zi%Ku^2Q=R2;)JDqR*MBuV=v5O)hceh+*VV$sx5;^L@4)|9bSBUDnZ9fT+5(M&Tt$H zrw_FGY%{Gel0Im+!90eFJyhu5z5YX*rL@;}Tg@rSpc40d!h4YU!G(4=>jG<-$)R#{kg~Jo_ZaDM~%KIw1j&WTx>o(!I+&H@OodB`qUyemO?9@}`U;e+= zmCt8@r~HRMKm8OHG5=fg5k7vLBfx1BiU-r`+O$6ac}{SJGTi1};_T$9YvF^y?V%zQDMXd5HNh)Uu(1 zC5v9TNf5lSFREwJl2uzDRTN|WFla~$6m1t2tx6hy{8x#0_id7O>k}`~Lj$&&!SOL2 z-TrspOhMM5>=Kb_KN=RbEo_FZTux`+hod|Bp8E>VMO&DXDB(sCMH0~BJ?v>kj~@n9 z6{k2`MJz{m>on5>CT7O<(#}lrr40R9@oPOY5$$9hvj|R25wkVLyx|QaEIZF|BzXc< zJ9>I4SoN;&PJ?;GrIcSP7Ux$s1jV9bXrVzZ~#^zcKcJoi_y_b2Dg7z}$=p zoBQ@Yn|N<#dP$yDb73JTN93s&(G_Q_?6ltT-x4{%lR~|HStI7>`Izs3Wcf^+61_Kl z_za{QLn=8l>iLc_dKEi&bY_DfrPV({@M#@RS){$VzpRNqpD~#i{^66`>{6K{b!Wf4 z9yULGFyp}=W>9q9NskwU)xh63`HM+6F4Wb8Jm<6u{T z8?yj&;VaQ5x5{g7d6?m^SDmluUfwcu+nFkgYb+cdo5D7^_9bJsMbwROtsbz}^9;SQ zauy?Bgmh#~Wz6>@=Z84awD)8B46o^uW~{H6Gl>31m>6GPQ1%cXUXp(&8b}g4my=oW zvXRpEAOmOs(g4DE?bdqI9xmU z5ZlL@r4JbQgnJpxPa)D_{d%kNW(r4}=DIyCeq0MCp1T2NWq}^7uScc*FuyeF7&Yfe zQ`szLjRNn|g2^dT$}~3uW_W4)QX_|M%N?M=Uk948^-WmAauWUrjRFXtrz=5|k5KVs zX(=l65)ObT0xv&#lhYj=t`kmRh3XhgpojlIi&ex!f`6m)-z?lQQxNGq90LgDwTaN_ zujP|(ncp7J%EA2y=zH}*!_XuH06{=(FfKMW4mJpc4FmuISY#|9sL%rp!wX#uA&0RF zE2V;;dN$4q+Q7YgvDriv48kdt(@L72`D|07zO##pHS}HlmxlrR9}nY4u;t77#%6Xw z>iq1-_sZ*xCLwYX(6@Jn=R$6F^wlFZ%*dv8a>VfhLY^wb_(Nr@<*V0?avM|c`d7oU zR(G_ue|n$NersQpscxaR_M1r^|uRC{8B`@(ZOLX+PaPG?MWG>4t%EJb-*_iz6JRzf818$Q%La2m|iYJc4y zwS4cyk&R^p0aw0FIyyUye7&yY7bcjDT9ovEH4(6H@*EJ?bU`xM9^-!0^g*;=ezJ|N zWW0AJ?6l&fx!XTxfVS6s(yl+t;f#Ny_UuY73m#AebV+)kEJy^b+_|N;Uc0Czz}2zu zgjeK;Yb2ZZOj}dFtW9|pod7bHn!g-;D4C7!TfsGITz$X#&a_|`@fLOEY-ViUdG?2D`Aqg)cg2@ikgCWon*-#A+{&q*mmDcKPw zO*dcH5b8U${R5EMZBHO;Gt@H<9KG4ub+RM%Bq3pc#;x+C9#rQG zv4#kKc%A7`LgGjS&*!EHr>Ld^&%2*X+Pjo(%ayyTHY4``e7zDInyUk z-hVjb^pTUwolf|MN3R%3+rktE&;-B@U;{>a+>@722!l$HJFE&ELUTL#>!}SB zSru|Vd%k$luOe#xgLLKHd$0G42)%l)g|P`nAOk^ED%~&}_X5NR5G;LJt1_o(R43cJ zp%7JHmS%{#`1OPCTZ~$BwcDIOo7n>15e^<31ce1tn57l?AO$>%0h6VIIom%7_#0w) zN4Z39&TdIbvki!xd`D+WB?RkcLj0*1kwLZM+(N?H%Vz5qtFPZyjP50dL@t_{i_b`F zva5(Sa+rs3hj>7b9`i#U{(^ZXyACCk)GNQZyr2U|u=u?gO!krs3mBMBC=hp=jvtV^$r07^RGB3w);y$s6q@~%ehh1{0Oo`97 zjfkHbI}iOP-3W81-Jp5DZuW|Y^Bu#rv`7=u>+j4~-jMY2YM$Ag_H%@2ZpEgZBkQLb2sO!qD1dEXT*>BlnTk#wh)l@Kk<+#c)D3g;K5y^xIY0K$P4*E0 zK?f%T)3B2ESyi$lCD|0G+u3;{H97VBo^8ppE%3zn2ROB=2-W@E_!2b~ZaQaJl%L+; zb`veGwp^8LY}Xae0Z=f!}qUU@(Xih#ef5@ z(uwWje}Iu&Kq!~1H>^5_ji!W^9z>WTRsw5aTc|C@q;Ox=~PvX zIik5amF%2n&guK`c@k^v?Wc6Z$w)fM_Q*bvN!&C^DzOb}W@*R<1Nl8YN2&~p2U zWW|Wxc+IBoxd3yuG9bSodZdN8RsZUc4<#z}^Ibqpo?70vIoT%oaL43%?{rSS>i%^ey5^V2*A6KwhL9N7nZI1fr)WT?j<{b zaxD^JP&7{kXnKcdf7zMLD;w+Guh&nDMLTxbeti^b#fRBz6mS75(&Se6g{}=Wk(2Xy z5S2*e{E=kI&0Cj5eljSDPl+fx=RLOE(K>^HCyXr5r{u$SqG4&wDw~&iYH`%t7UVCZ z_knvt7J1>6`7!u-w9q6X84X!y`Kz_t8FpH{H5!OZZX@Og#G^f~#c9AXE+k}5B}Nyk zVMW)8WxfnN8m`A-fn||L)Y{KsD%AobHlDNiew!Za8DB2-;g~<|+_Yu%r@{~HJ z{j40jP$1wvZ>j~+7~pLwmcmb7hgvpau9zqGPF-iyH0B-19XTSdK)p3C+nzo@B1b*s z%+Oaqwa7$#+;AK`URY-ro%=v2gBSp595|pg0?b;~4}Sx`g5<&;u6TxRhYon9Rw7)< zkt03Kg13-f&HnvJ9`=fei5ZuNvKJ^};Y&`JL*7R*4wOvQ{RePhqPtDkLBYwW&!5lj zfD}+fcKPJv_3Iz6(9IXIGg=|%kLB^vNTR>bz>lu88YO~P^RwzVb&;p%yl24pp+~%v zC`*gQnYooL@_0oxo8DTQ&++xE79_VVz>503OZ_$q(@cdZ}IiD_dK>?9R2@tk5`!!<;dby7XP(K-rr`*xFamWndF@B`8me1bAxd+YjD zcY*R=`7bf<6sX4+Nq$le=y#|0IV_lD_5em5BAs(W!{A-X#hxOJWgo|{k{fcXrhN$mS zb(^a#n23%ZL#xy5g3sbd91S>p7#pLoAj~~m7aAmY6SZTzVlFuuyx7r2xfa z(AhsUJbJ&{9y8+97xn=^%j4(}#LhUQE?O3>$)~iSuBVA#nkv103LtLtu35?4oc{Mej1q@IuBh&~rGe*R}1jz<_5x zv%?!-*;VnMm$NUUb#z%I&Azyuwl_VqHJ05N`*xQUw;4W(F1wt z{%WTIq!z$1>l;9E{zwdEU8?n2}G0DmeNaiKyHXb-f z_nI4ToopY~*8g-BC^sX)7^ckluta`mXHMfh4h{1B!fXTy;SF3W zVL#*!`=UD~G+dAoW_T#c-!H$wDvkYK%qP%9Gqx|dk&rw^&?etOVf^9W?8J+F)6|Tm z65D~J?*YE|WNx3gsz^GYyqWkLqi!+h<5m1Hdx>8l!!r~zpKG7e=M}li9}>-3x_p#i z@>PQVAApVb@e3>*um??%2lOnq;_MBz*d$G=?oKfl9ysi%?c%$x-#o9T?nQfmB9fhv zJeM(!9~%c1p^#r)M+_kYR6z-dA!_9~#QIm?OGe1d$$K5H)p7D2-}ocS)NF!dk2nd{ ziV8qQw74-!!pFI(m2(E{5MLv=8Nv4gX|{vixS~1`Hk!jH`r%vz2y}d<0#A!pjK{UY zXZc}n>9OYcB@vWY{(=rz2(=3;UP+JX0(({+Pl>}o1;6@x`$ZoIa0Pwlj$+uR=-I{O z=w^E*eP@thC0@6#WonA~I{z6Q^>&0lh|Pf0>&-M}#q$=4JaZtaA2O+S4UUN>2C_B-;M;B5Lx&UyE(<5er&tEz{a z{6Uqv9~vxAUW2%g`gBP!m6>S+x4DXZ5XjUrNK#O8)(9CG0>{@VTc~bxh2c zcc*z@>vw^Vo&0oE)b5|vF)?~?anim1a zHd75%YEF`xVU5OuzeZ+7H_Sh$UfnYDT)gU&EDZ_*^RvOqhzD2o%o(yhdXNI8jR|VX~Xq1BUsu$99d_esu{1 z&5+)igEU1P7QopiitEd6&%OJQa_*yG(hC$E0N=e zyq9knHCeIO$8>sWwM4;36={B`_@dxTC|Ve7lzne}95ZF-If;u!rxr$Gi4Oiu?zU+LT~|CY_2rg&D9*kVqJ_E3(?PJ zR#Evq&8?tvqEisgRTL{sM5Cg6UfxrB6jLqze`-4Ka5ne<|0fc}2#KIUM6A$3(O6L$ zX-c$4)o5w;P%CPbQnh-TL}=`-c4M?C+8S-m)?Nn{lu}f1tXf5Bb)0X``F(zW<)8b? zbzkrMzOL8v`Fyig8TrGHPq3n6d@ghJkE@6i;o2Cc69#>~zUe@8Z3uETK z?-pJmFdQ*HENjjOQ6u^>5$Z0$Fo`$T{0w8Y|enZB--qk*unRR z!TdW`vVR`&s&QC37vLiXaS4K}y=U0I!Q1&09l4kc zx6eiuQ=*q=>W9{UYrO541X1QG>IC&9nOk=Fp*GqkegA6$B{Ie9*kr!b%c{J=iOfSe zdV|juXq^0%&iG@_-%H!?idCSlDH#mQK!JVpy0|v38PWg^_mXI_O2TBJS(#D>EWsjR zr4f6hjP%|rjQbrE#^cLCn!&Jg3CuZO@J?0n^9$7gG~dNnFGZ4fHTbz59LBueLeB#% z1M`;kyUnz$Ch3rreVa>X(hsdZ+%y{1&_+z=q)ZOsjrljAz~gJCUso}pe1bI;WZycS zzcgA=TKFs6uQ((MtGR2!f%I%L-i7ww=uR`kQToQS{pyfWc~93B`C-03B7RuJ_tpUGnqOM{SP*U^9CZ(t8}%UzlIJ|YS3pS# ziFv%Aw155~!1#c%o=LBmmO9cjtYXooB1Fy~fwkHhAhV9RpZ@k4HYr0%N@%Bm>`!8{ z07=Qmt~tH>Y0~*=UO-DgBgbMKepxb2hCpgn!iOgsWhtt)@b`{3nu`w$&3iZ+xr2UW zN>$dORYyo8dzRFgvx9u+mVx!+{{V#U>)B?~SA3^!%+$Q}+V98IIG=q>3aG)A^OGH zq!J9d#o^ARAlF+4`MwiB9dv3&PK%qvn6NJEUvmD_6Vzt538JM>HmdypGcPc&7p5{+ zbFUbQ{l20&-=tR$udaVo^w2VT&!qF1Ssu!?FlvjC3M>UfDXW`$ht7;?_0CpXrI_Ta z*R@{GT0Q^z^A)iby7xmG>}nV$z@x-f!4fL9S$L~6wF-eH1HshtQ%Yq&^2BZaEvNr zw0#=gw8CJRvALK{>KZs@KxNmi~dh2-w0B%zu>JD(xXz( z$(h@;eVwhMV!`LR?L+%L%`pefBmzdS`onAC9TpdW58#6t7YF@f{Jrm z)8nyJ4bdicZrudEB}M^!1lo4V)ooMI%qz$PbF0WD^&C`5)>w>Y=(Nsh?uDcx7h(Vf zky_H43OAo$07VbEfhnBATN-)J2G)18A&n@WEPpAuC9*Is`awz=@#$9-hXY7?g|Ldi z^+30Y{EfS;fIWhEhnm+IIHK5Lu_RM(gb=*BhC4BwDmtKo6dC6n9cqGPsSS_D?$-N& zg9P7bi7WG4%*ggrpNz8y`}eS7j;KH}8rJiYp&%B#MzBbopI%btM|kx372t>`bplll z4txRzKwn9%{1dT8SH}8rjkmFSzZSItiWk|RTcjh)0m0XlOKcK|YXUA_ik&E4XQCup z3M!%0Ii8#l^I%5f)&pHP0HP(&sTS0$(9kb=(Wi*FbxpKOR&xASNWJA3My-lWpnO;%t0z+oX#Bs1#MnWxbo#_rY5Txj~X_o2}WRj#G?52yj;9$d}C8{L=y|N|`&bMpaoL4zf zsxx7}jD8EgaCJE>`U0JiE zNrC7ITt^g9r{n=u8bk#Hky1|KivzH;#$fU$6EdY&_bU0iti?IRtS|bY>4;uh&kM4I z%3S=v9;AZLxST0xyCv*xDYZZC8~`*++N7->?f6D`bSgRZ%Je|rvR(TtFz<;tF5`JWrZ#X|VVf@~eP2JZas5w3cid5ll42_}4!6*l zzgO?P$naOOH$^5zvGr~|xf`H-kC z_O})@`)Sh;%MQ>_4MSm>5P+f=H$f{kaw*#EL zG9z+Yo;R4`EJS`U)b<=-YgC`6|QSwq6fp3;gdQ_F4 zjWyn%Q5|?W*@@-8&7yCbxr*gFv*ZgKB`_SJ&JD+&d|;fD#-V;6xpdq(+pgZM5W1Aa z$mjppzvhS$5urbNdQTvCvq0HV)O>S{=v^BPSk(s!Ofp>IvygX~O}PO$-OE5Br02b~ z&ZrA0pxHp8F@Dor~HdbM*Ar!7~rBH$z&*=Ij%3|z?*)8I!t;V z?(LV)mc=9+3-a;-q!>5drBnZe4*W+Tlo>bt(!&SyBK?=Qo79+`Yw-5^V1haZV5SF% zL@o1CFT^mdTwEeikTdEJ^{d1dxajLQAz5?y5$W1^CjExF$OlX(s+6|E7miJN{aS&X z!vJFWowd6jvk9axKX#P>fn^W?lJwoeGG>Y+oHAMM?^_`N7`ssktlb|LI=yJC@Ojve zX3n#7=Ewa-yc)H6;<_7^vM&6j9^c(b1HMmaC0Mpiic}^Cw^{C>nz%mcr}@Zo?;c#I z^k@@`2)ovi65*9{{J0inURE(E$YX0@D`%&khJA!{zLSzM6mXnx=-IQbH0O&g9dxO2 zf)c2V7bb#-uT^bU57lkrW$g2uDOKpJUdr8D!PFQ;*}45E@8^*6b3hDa<|WA6^pj=; zw7{S|F*KwmO)WqjAK&60erf~#<9Lr8ET#9Phq{hW-AU!n^8g5q%J>AE&3zzN9&Bm( zOR%g(p>WV^a^^V>FG{^XEvJy+GaW?N?UhykqURz4@JnCcF?9bhX**5y{B9r}0zrOR z`3Ha-i4dP?gniOJJ}KQr*7PFH+kvVxa&1158XjOdhj--W7Ck|Q1#54jCsop-u za1S9TKZn_D9`1J4>zqQxtv5EQIMk2J`Ix?fc;>{OR)YG5N@}3=iU`8N0sb@qU{a)q zkb9~mi0<&cvYZ*Iq^4sYurd*9D4ids36(|+dcR0n9lkQ+NG@w5WYdlTF|8S(b7uH5 zgr+S(Toy1#PeFwv0%;pV56zV`Guh}?dCCBA? zm^~Ho*Ft&Pg)pB*9NtzToFDbsS#8E1H>4UP(yg2YFgJ6~QWZ4~Q!YCV@}QK|f|2Vv zJV6`FvKTsfbj@`2z=Xx4c{-WeuEAS2IG$h;5f*a81}s#|Qyo?%!1kXq+$FjVjIwZ~_vaK@<3a+Ntei)3slh-AFF)#1jL;*Jmh`z#;MHRE+HVtf0Cn9XjRcQ7)(8MKm|sUySkj zb`pQj&Lu5sdbF9xJU7dGcuRk{MqlN|#w{BzIssJ%=y!(6$GZLHiPU|p<53Hr$=BH+ zKJ1pb3se=5OpvNOY8?s!u|*NLT*r6lx$;$BooCjX_j6LL_MXh^US@rh`|h-3EnLd^ z&L9Di*Pk93e%#z6-6b6O>f0*HehOa0WM*rfOaJope!;!jts=GsVa&?(`?KkHso+!y z?1Ga;U5st!f`*694H8GeM&)UJ#AU^JEXmqH0e&UKkM}}{Sz#I882z79!*tSTpKY&fVCeObYeTMbEN2oJifxN=Juwykw!YU$DD$0 z8o5XwpaH#y?Ezqi)zA@Urm*vwjEhV-y>9zaFWJE6=i-1gY(wy%^2UkYt5Bi4XL2R8EZ$u)*(0f?2-{0DSk;wG;B`z@E+O z_Uxxl%t8p~S4z(-j@rB+&jarV(5KLLg(7_^%ZhUv{;JMZrxk#Pb6&L^aZ6-*=B)I2 zT>jZx=)r{SmoHuU+`#wp@RP56y+2kaFT6?FW^vF@y%@c1a>AZ)!`vf$R~_o-&;oOI zX&q{nv;N*~dq+96;fd?goe?SvGPVcU<3Y)~0+uD~K08_8uH6LKVLk^j0;fK{{V!N8 z))j5>&mV@jRc{&Z8Ro_GVq^S$Y-3QA9FN|{2*yr9e5nt&HeE8uwlyVVvPU%Yd!+!J zqhs6_$-6faz?(}h(#V;ir_dktCobd?XY-)N1y%-Q9Z;ZuGVFFD<(ry_OGzS+busF0 zAO`!Y61~f`(9IEP!9IK|Y=t~5wyfQT=~G#`7m76$$D$N63N?=paEh6Gg!2;Mzr`v) zQ^r%`!??e0J&5G5s-e+w3YL~lT>!G*vsR27Xj_~cx!N)F3f%xD!MEl4VcQ!3o?ts1 zK`IV0Ky?|Ax7{{C=yqHkOua>>2KZB>x(N>D5c z#`4$BNQ;R)D_5?4@E>UV->|A`bi94g;NOqxV z@t(VhG<5?~=ygZdr>-oE zk#Ld7CD+GeE$FMYzy3{G4TNu1a-WoRdJp1#(`?L0Q7Fc_2ylO&UW>OlQuAtXeBHYZ zli@!0^*Vc@At1*pUVc3zG}Td^M9Q7twtP`r`}W=vXo?*a-tO+GF*#-UK(hYz=-jhh zNzzSu=|fXDF^Ig(-LFL>(kS6!Q`3x&D~rY};X?E1rOo3N6k#4(7I5T$80gZSod0ZE zA;L~;&JxC7G&rQ6YDv@Fbj?}H!t|PqC2xZW{s5{X==k%9Y&wL3iIHUk@$3nRhV*sW z$LG%29^{&~Y<3MPec2#q<@^-Ql0dND!_EqM_PTAGR2n4tuxsl?Z8kXBq#Y zW06QAyTUV1@$|X$q1B^%$(m69PzCERlJUh^yn26rS-70@n`w*}saX$Td;$dYR3_yZ z8CWFwuc#aZ*X{f+W3wxa9rRXF11Dtgjqq*9Eg!!(5(a5`6SpbqP`<=t9)r)&i}^AC z``<8(`3CS`;a-!=7uZ>_(k+MGik}{Giczn!y2x|KTT;OZ01gmBLY6 zK03aH-nV0EKsTM-%W7XLxdaQq=QScNMo_C|{Tf)Z^SI8_FeJ0rFa1tdG~BZ$_p7WMI38 z#0%$_A47SxdXt9w^%U1q>%zojp?F~% za-gwP%s0)8Kx6^As~5>{`1UoxEhF0V%6?^M$_CY|FdPR)ca zT{N$jA7ZIdBAaKj6sTr@`vi4Yh*cQLJcz;-A@!W`9sJHJsc6YdbT{m`bDnc0loBWP zer4%<(ZHVA-U4=EWGNZ3a^5Q$Z-FvN890APTXVsWBRhgpIVKhDKpelL0wG4Vp;$~j zc7j*o#?9w|8>I3rl6NoY@TaJr4bJ(ss64y{|8^zO@a>5|G1ld;r0WuOc|Zcx@VC>FcrZUgh>D1*1JOJEmR`0!vxSM~RZH<7%bVwNf^-%!ipH2}N4)*aG ztg1ks!YHnD#s_P?ug|zWkmW*Ee#lo7*2rtJ1I{;%E05h@<|YE?3V0n(YfTL<^EJy6 T3y`wVJDf_>-+kP5o0I($%$KKJ|l{&)BDnw>o}bLPx@&YV3vJNwzw!P80Ls;HodAOHmg08ro#oQ?n<00OvO zM7W5Ec<~C-Wuz-;C|9qdpy8rpf;%oX4n7X}qb8#zB_^dM<7cF!W8|0M<>Hmll$Y1E zv#^Va>4N&R3{KwwCP*%z8!Q~u1$Y=}1dw>X zeW3#YG!)DQSh&++;4%zY>MG1tFv)B9V1hW9h?Ur#lYqDzi#V9&O9;(Ab?;S`*rAel zWhd1#PgV|eZZYCt742fjr=vUtRO9vBd4y6fIDi4aCBG2KdGJsuh5mE&bIMPX&&d}Y zz7*iMJZA!){+K58IoDT(|4%aHBeDD>EZFQ%jsGbG-?r=Lv$}-lxrxK(ISM_l<9NA* zq{8NJe|*#oz##6q88m3G6d0`-##%P17G4prp|P30pc#4{tw>+i1f6#`-RB|V)0h8I zn6nr{q%4UD4LtQyOoHp~z#i9@Tj-rv^!EXMtm|+}mnZdscDRRF+62Jupl1(tUFo%A zu(XM>uImGrpJ2WE$CGp}U!K$fpq>dbxP?On`A&iYevy1p0F%_NHx{_Aqs@YKAFGSm z%8$=tD^RD&v-S)<7rw_08a?71PTOe+teQ^H)4sm+SLt6)#t-&Qa3rmVJ!pbdCE1MJ z)O*KjE|VB?i6Ez+O`WC4bjdXCG4;zWUKs}H*Xr&sxa{6nZpdXVb>Lh*1(>?2*TR@o zjpdxvjT4t)i}dhy$~t~P8xC?Q#VTZYfPZn0XJ$-41Y<1LG-RFab}EgWVel)T5C%{J zVy?aSUN2U!gp3Pe!Cjta0a~$uI)YcNFf7e=EC5st*w!Zm+W%$pD}5|LoA~l%D-4ZJ z9Wel0PAc|6t)en>g~7T7_mH}uYW2CIiTu>7_RIP7jbik-E{K&TUhRw~eFdYbt(NLO zP@7moGz%*+por;RWgXoNZ0=xiR|$%iJ*|cJ_djtPFzJiFH9h7bHSn4*&!#J*6tOQ< zAzWJ7ec?eGY&So1=!XoxZRtFPa&MZj1Zmq`Xdi0bA3y~Z%SZ)NVAFw_YU9s{E@M%b z-r#&44qSF++=Y6^2THBYa@iLPfb#WaaBY4a2uFXb`97SO?vsBi;TFR)v9rFsjCD(= zjs*+2-rT4J(1U6$oI{O}XFp^Kz+HX;jx+@Opy!bm8#_V1`TCj@uRtiP@hhEb;72CE z3MSgQBx7$>6Xy+OG2Qw=CjS z@q_!=Y5sLk?;245d~@f=Jph$z#sOdT%JJpT2Q~5OeeKNyCRc1<{r^31TEo7wkudS6 z0+euyDdVva{k!? zK*&(~K`?=gl(ynCB5&KHxMr+L0C?oMwe`Z;`)Mo%b6$uBfY| zDzQlt6kO}mdk0E?rOFkXb1J^?vMT_v?kw!istmY8`Y7-q3+GaJhk0`|J*gSaEKNWn zW$&@~T3M)R;#wd80Am431oT}u_56KNR{$p78vC}rfT+LYqofl`)mS^oC@{9 zDir|0Os`J{Ubws)@AaPHxmCLz7WN2RV-wzr+QQ}z0%G5?&eN*Cz30cuIh(aNlQ$J; z(eCg$kP8)tRl4|Y2$zf7UmI3myPjq6$`~i=nCvB==-?vR>RO~RX;O9&Ttrh^q-x-P zap;>KGB!PAH%A1DjR2hh2FPJxT;dDy|DY;=QADIjkoRd&<& zo+8=GL?ZX9dB;Ie)mj~u!fQV|Vu8xk##m|wi;7mTh+A7Cf72BJ=5OHIZ~2Gg_CQ=w zWD11lI_*Z}6?#E!!SG=@lhi-xER-%eK$stcAppS&TesF~w{}PXsgIqGP(hV@PWjID z46+}Mg{FXVu;LLg|DW548PhJnjV5gDf`a6zKZ)Fa1z_`lEYpuw&luyTIi?_K&h`o2 zT&zg|falp00vDZ7P$$pQ03yhPfVPD7(#)Ln^YgC*_@?p1TOMczcbWbTeiZ|pwwq_B z=%?Ffg<)s*^Y9RV&Oi8X@V|jUvGV2t{_Wrb&-sVWA^8K@1V8QA-*)~w@VDjr^;}T1 z*C;W$2p{{P>$Ml`kK(7SFfJni06MMx9+$ao&(z4t1h?MsxCq}EtsewNq9)ur$n#3>(c^GdEHX@6-QtYv zEcA(ES;dXmo*>U73RRs7o*XM7na7=eDxB?%OuFWFNn1Z#T6CHd< zmYk7Tz^Xa`E#fzw8q_~!Y>|-(}PVhtA$={-FD8SPBS?P=$o~k-Y%aV1pq^{ z#x)CLNw)I6&0Vee9gscoDC)jurT$#p6WP8O9ki1GG_B-T$=2vIwJQ6?<7;vD@sOep zhimb@SUgbvnuIM5AGWvHK18g(jA&=u!(^!I2CjzPQP}@M-KIu?~J*AKNce z)s-09I+ky@?_B0q+`6TTMkncyqfs|+LCOw$d%t$jK$ga)wsvYodvn47F1J4&#%K3A zaku_f+hnQqBBxl5>lHJ*&Jsyq#bQYpC-bDY7i*^+6m6Z}KF7K4+Rz^7aHv+X(aH1k zh-ScM{@MF)|?C31PIR*5Qg#jq#_hWUQdt2m_ zY~vl|ANM|_N3X|RtG3vN=XwS8TB+E9BWA77;bWA=E)}~|Qjy;D(!~Tqs_@DL7$Hag z>B(bqtvn?j+>w-qW8|CEDb6nI8WSAo{C(J5Hi>e&!#i0u)hvT#L^{sqLy%_as(=L! zdg9G^lQU=m?1z{I$#vX3`xrR!Op63~a*hj$%8-Uj&ZE?~6$?ZL%aGX^w`FW^zLqRU zoPRml;~)D4y`MjFKCb><=A%)FaZ&J{7~@MgDF6zizVe$ z5;i1;`5lm{)tc;q>I<9qC{i6A5;w=%`h~4-`P>&sWd`H`gLQ+L$6u~lKcD$$Q=p#l{A}9qP2iQkX~P5Ozw6cX z`aq&iq&PZk@{E_37 zqx;m-GUbjhfA4?_8HxDr2pzC~ba=sfBVDCje)AaU^Nb6+7Dw8( z92@EVZo6o4O)B!5ao!*;7xR?PyuSRSSq;rQD?PzU=~7;$WK^k%^XT?=I4H;>Vu?JZD$>;h5>-7`*=@ERN5=Kq}hm9ad<6^sv`eJ!LR+4E`oU*->$*mi)A+qQO87rjRT!XP>Dkm2D&ibROKQu9`->lY5^$8W9USIOTy5!f0JkhnwOFwaiDO`4FV%|&KmWtlvYS?)75 zQlM+K&uO|8y_e8SGJ+)8&&t|QF#kO!-=m>u#M}4^u9+WpOVkF48Lqy&ixd9BFc$8o zd7=1fq+1(oxgYjzzVjg}JN2qLH0SM0a(*2{slPdLt!1aD6KiM+} z!<$qd$97ULEQ@y1y?)^rTn^~J%WS|p)ZWi?y<=Al&hd2Gw#4QGh(aXGk3(uhO*Ogk zxf)ti_t^91Pk~O{15fZ`&0TJ#5mV`MXQ*Fay1zd~QsU`GyWOq>QfUNT+lo?##9WJI zZrWQahq!v1OUy}T-CV*aA#IRSlj17}jq|#_-g)8^T=pp=Hyt0(C+Rx*CVU0j-+%J0 zYRa&ZtIaqaWeKQDk1am5dA>+`0OM-6pFck$*uYcJzyN0naEcVN!dHdH9TzB(OV zP5Y#%t8OH9qm-WO&kF(dzHEL;E9jXZ)^(l#=MFt%y_~M!!t?WJ zd`fZH|2v(|KVw@c~11cWq)&BA_ z!;Fgw$oR4p>cIk%<*;P$gem(ixr~S%aj0yvG?wPvEWveZe{jn-7n@8OOW*Lzkl0r6 zy&;~FI2%pjjhb1VfWh0}(?u3`$s$bV;l$V68JTvF@Be=95wAug0k9mta`5C11_6}* zDu-%uuSe(gRCU%|lTdttbOnc_HuLs={r7st1bQWjk$YP^>x{Mu67^g|Mam7cC>?M zKJcyYH|13He0x^)#>)ZrlMbfog%yMf2`AUaQWhs6$G+`3za_Hb{?@w5VMf1*IAkSz zGkIxBr;S6C8xhgg;n=FOF89A9-T7Gi4*jnp{fr7i)jQguEVh(AI9M!eeSTy;t}8oY zQj$dnJ{D1l8GuOB#kUtXkR|7KlV|R0I-UZyf)18Dc~*M1UcF>T70eoQ0+rAcQjBDY zk27_X_Bc1}aSy*EG0Z^gPqF<@u0Kxt*^c6@@}Hn;lAJk-eI#1PmBp?ej%wbvd^yJ< zwyVNlzR!1Kehk-YuBw>=lyH^|0`|?b|v_@7U3;R-Bvj_&+t-z-TPfGeC@w8IJ3pTdE0ole8*d+xkh5$ zd|iJHj6a(GC$I-EC(KKiJLOhZ8@%|H7LVb5Y@-6BfJVNKl@?m5+X=$p4~0Mdk4gpr zj0^hwf^V<4k*!+opPnC-lTUaf_9fKTD0(IqGGr8Wl%X>)nP-*W!~ z<=yu}L1*UGSE7D8G45G)VR=?8oyQn6p=~BgJwL5tIad}>X6jB8TW>mtImfjAu2O4W zCfGZwF(9d^UHe|YodZ*=LVC^Rgdel}WUu@BhWh|Pkw*O3*9V^_RUTW4#=V^8s=D#C zG2d2KbcFM}bKqY%eZisMUTmOlQ5Ib2LYJt!%F&T3=h2CH?5b$Ois49}u$8M^*V_9a z&+tpJKXCL7x!$Z5^nCwnBfs@?C`jdXzYshdA649<4Bhl0g0C3DrH+H9iqXclga;+q z;%wQ?r)gy)XNTiU^#>oumvMTB%3D13T!(UYBozDT-Ps;l`K+_oIQCc9ULJZ1ue7jz z3W$<*=%*caN<>tvMYn`o-dJr<@J`mXo@a{DEopy@6y+Bj{Z*}>PX0SSMAq4(W8aYf z*kBmhXM40z1D*@C`hTJQ<>tu~ ziUzcYb9JUqV!I?YaV+Rqe^O^C!IvM`tXfUN`8^JNz6ai)0(bC`;090b{6 zY)bmXTw|zsq4gjw&Kke=*WX;goxH zB^1(Qb>{oxQFx!|`3 z8)-F+BQWau#5;S|uAeXbe`3AupHb4U%APN`{c^RAeO9dn5bqvZ?BF^AP^|k6!iSd4m$pA2SOu#GdiaRd2hQ9nf?Vh;5xqiMU-4aaulTJ_iMXo1N z!zTZL+yFgG^B&od4Obe_po!M_K(f?6AhR~N0>2GJ|DZUP?y{1-R)P_-1L&yy+VOVt5@S`*VB z&pH$TY41?FCWWUmxSrad!WL0Zl804OHgSjH%@eKp)R+|Of_{5u<(bAj?OEq0iRl~B zAupEIqO)Bs=`_u?-;BsS<76XeTYx|>Uy^5!AY0~8TIEpLz$Rv*ou^-UT$T}N<@#T2 zCh(nh{x_@twytl-KUDGtVMBXaoM!Kp0m@J|R5uqyxXA9&xFd1sOJ*U!kAZ2@C{S-0s#GzA&L9Uyp1JZr4EA1 zJUcf}qEQo{rADfwYZDde`Vn0rDw4Jy=?n}1`vJVior`O#y{?F)D-_Xle#@~F&kaw3 z_SmZ>rf)it`sX>XL$y2Hxl7wb#a0wzgQnG(;-A*OdbF@C0MwSJNptKPFh8(??P#wA zUwPZglRq%9kRA?uRQPeG+JKdGrhs>Vb?5;0k_MfbaxZcj_BK26t;LNC<=;Z`XDHvo z2_#MsA@*|a-5;M>e1n|byEGrrTUOz)xeLhc*&2{HZhID3^$p{0R#T^_FRCNu@~Uf@ z&&mum(+b?nk)oR?TfTGY;{_x?p~>Z!(V1Jp66<_5fTd%b21$7@-Kg*)bB#sM*&=$2 z=>kjIr&4S;kjS&}@6YcA(B9X3FCTj+$qszGaXRXTtf!rX+~b`Z$Ie%*elW?VQ8#Fx z7ArV(Ag!iRE#G-j=xDcWGJiwQ%>{tQLtJitn=$MuL1~AeN-#6fu3(3U)6Ys+F>LR& zFwm8LzufHDG-f(m$`-*nKBv&KgK|BDPr)Hu;S}Jt!0WZlLf6}PJU2!haKp!K7rP?I zEW^4eWJg6{0f6zbJ)0~1>$XjwP@gZ8NfLD$`L5rxrnvUuTOv%TjYXSTF!-|J2*J0h ze+A_?NcLA$^P7464;Y^Bw1rVT0pMGYCis+eoj%~NRiE$F2z=Xda4dOpxq;!TPGX%E zRxj!b6v+1%yNmZzpn6vxuRRX+Nc>&tPO;e4~51$!y~2u-D63%RD1C z^oo-|zr&96wH^^q=00|G=QKLD-T;P0SHw1)l;BFNxhCO}8D%!RCW2A6wLF>ub`qy+ z8KJFZq|5pj7h_I=+~`X7-tKAeUnKt4?K{2^i>LVjQF3Xv#}%~frI<|fq`T{k+?-d46}yd$GM6p-=j%ob#s(0xi;&B6JKI>slr z1?Nb$cnL|d8zNzc;vCK*H$$`EUoLRctH?1s-@=KOc`q8^dxt1rq)kq;u~-EcdSd{N z2Oev2bH`mV+NQiH(rJgTDDIJUM@ZD+Hg|I5_Qdm|NZZWV>=|`DjdG>M2u@-fU)R4C zpzqukfc5d9O+v$%fs=%=im%FDp@VGcn_e$~^qe6mRZ?OT9soflsH=t2ff_bezT{j! zDDk121m`h;+Li|fA3gzmp+WbdiOfe8gBfQ;y zZ^)l}kd;}PLT!B;nd#;h5A4OgcLANF^R~SfHDj%C;}NPeP0GM~f#Ks=S^r&HtbXwW zMNyCh4|;3SS?KHj=4*D&c3s35g~*q|CcrXU0xaB*62ndkvgYK)(I6bhuxCOPsT6KL zcngm*AfBm4UeIw02w0jGTHT|86|UT>?c^9N`#8vg@@OF@YFy>DdVv)}a-ww62T=_j z*4tLu%KMA`<=6BfsOq>t?qJ2^i#?3S)hwxM`^?G&)^^4B^g&TxEEB+Zwe#)t7)3(K zvI$H)*|Q?B66eYl5FFaSNbb}`NW+z{p)cT?b}z)X-LbFTxVwT`nT2E4ebn&7de`F@ z!3#r)*t?<}T0<2zY09kRDl^AAGqL8uHu-zKOH%Pg_+P;0*@XB3V_=+V`X`;9^ux{t3?kM0%t-_Tps4m;Yp z4^5q^?O>Z%@TjYa^DULlvbjWOiyIYIp7`5f z5!Q272}8A4Qp`GxSwDy?tTKX?=v+WuaOtX!>)b_A*yV&8dFc(V$K>FDRk5(Tp z6TYo%o^o+YQCM=~vC;?yEN?i!W7Tz^<7RXA+{V>!Dn-Wc&`fIJnglFFG_ncyH6P+` zCAy*y*Q%i4HWm8cW$uC}+geWc9Adja8)4YB-&5X(I0jP?z@^^{&sZjb#A#jXZXKTc?6`)&-0vR z1^I5p#$E*@7ii8#_=D%?B7m{qynT0IL$%Tc3Us@<%*+e+?srpL9^k=?&EXte$k~gq zxr*RXZdsGDzYx4~6kmwTUcPBoC{;1BfM=pQ=Za*tthque;pQ?%jmakA#;NDF%REU` zg#c>#7FLe~I;`4$=mJMfRP9+Iik_YZmu#bT0LjEUl;3M*Zj7KA1@(xcY-F}+o+}n= zKseW?zv6cP-M5t;WJ}~MAG0N5&4YHD-$=Kxl>^{Y)wfq8KHGtuyi6%)nkXS&;}ygm z&yZ*~C-dO&k7iz=O=vyvWM*FHc+)Fu>Z6Q*x8O}kN%JXC;2ims@{U;ml1=^{y9$&d zm(aJbQ>)EA+K8QV?KK}YDN%O!dsAAZA35SgN58Bu-a#@oqbvk*kc6g^v(zYgTlu#6 z=s3@#BS&J8BBI8~I+GMmuDY*;ZBa4T!0FObXQg36Y@*!E!J8#Z zS~oVtuwnq}mE!~@SEUf!k|%QQs36PU1JFRg(~d4AT{07vBF!OwF*e&k zM4Wb6%6vLPW7d-_rp7x~GZV?tA_zAi+u>ZY1kJj*Z36dMr+VHxwI-z1xa8p0?c3n{ z$2_>I#h&rBONmlt-ryg1K;0l>#g`qz4baX6z=^Th!o32qggun`_5+^TYGGE`mSKtw zP8O*xN6;)F4FmkGNRpkp4bUSb)V)ZrSOTPDQA(&k&d{qm>!g^3)q`f`tRVnFnh?^` z7O$IW@KxD_yg^vZw4tY5RlQFwiMD|R!5tJx6T54g!NeOk7hI~=_m%3TNxIL%7iOG~ z4^S*gx8J8t@)BbmL0hsx_ zhWht1`785(JC*cTa{v9jzN@CcpUq!a0#Dj9=>F%$G@oBr{=)nMA(K})!o_JC#fv#{ z;!eyul-H~<%CWlJu!vib3SYI9=w9!jV{bB1nvQM~4yFDK#qcVHL zmZ$HS$@jL)gUf4;xH&X94qi-EXL-kF1=;wEi3$zrw;OV+P0*?ivnOegDS`4%IhhC8 zOu4BS9A2eghX&sfER*vudbgLSKLNfEnLoC<`1oU3k|srC-(j3Jk!R67m)S6-qEy}i zb^)qdaoBjJw7(~BjSN!y-_!KZTz_F4UQtiXD8(4LN;n7aA-0e)yvbO~hjH(|M^tn6 z5ZANP>=);69w8&BA`Ent_YWc1<68*6e4?rYrCtDCq<38h?7wG1T%Ai8R$+D%bTUP{ z&3|i4{+9;K-wMRfGXM5={%5oPR}#K64+DRRJvnfP&#*Tlc{Px%U32kQ4uO{U-aY`b!}W=lg~p(ne4V|u!%+85uJzu-i5l`D z5wLt=W9Tpzcva}#DKIZls)k`y&>QB+1J&*%;odi=uVB>%lflvux*$QtE{BvORV(@$ z8T8ZJV@=8d`IbGAT%|Xzbn_%^!{sz)#(FfaR%RhrWgWyo4{i3gr{TQqiM37oA|8_6 z<4vx72f&ICQZf5Hzms^oy$nSy^@d8c?igh?8Ic+gkPyqN2#K|5Iv85!@k_=}@_vnD z@6mOWR@LYxl3|LC2TdpZ?V+-ZHX2Db`YbVb=+xGZ_#{uP7d(Z4F6Nlr6VZy9yZvEi zW_H)mi(*k4nIx*uCwry4IdIqZXPoYD1JE3SRyem|^K4PKFMS06i1m+m;CIFm(!Kul z3*^N)uf}JFV(1bq*6M_5*R*>i#GSit7Wml4!5Gvf|DN|x8kUr zY-2ST5Be+{p_;0YX-Ds{#RV|lUcb33urFzUbzF9WEG(BQUo{7u5s8V;-nuw71%Go% ze)Cn@D3W*pOGu@qSysCUn@yqEvt7Tc;7KUuA{kNZcHhWud&aG>*hbF>LtJ|m_)45m zS#9e_lU^?l3$Njcuha63E`O2&fR(vsOVTZQgo(XcC7e@tWN@P_e0x~L5xf}0sj<>F zyoA^|FfN?^Mcd5ya4`Q)Wfb)deNWq-Fqki%1qE%KgUk$%b@+Vk-_ zNr7fM>UjI%kCN>V&QGk?xx6U{&TgxI*q}r!egDK%+IO_;2iE^ciqHSTbKid!pzqE^ z{gWd7{I%sDlImM?^bZO0x!UhoqJLJPe~r+u;QyU_k6$VAHz$8*wZz|C<1e%S*9iSG zJ^=8q5&9K`{xw3s0?@xk=vM$b|L0+Qhk^RsnjimH@~@Qoo0HGReE^-*`3qp~_eTHb z+J2Qia)2w;Cdw=D6Ik5fjXEs!1z0FJIB2K~(BRjwfV0nBK|#Z#p<`S{#Ux;2M7ec` z@1ZL(12ezW{cAkDgtzI1NXduYPQR7)y4s|&Jjyu$OAlh9F zF+3_B>3@!?c;X(fg;;}ra;5fyB!(x!xcW`aXl$&40vuM(4$r}eYR8i>o95OfM!xj0 z3x(Kmm$Sr7l@PU$&84voKgDh=Bc+G&mn`J; z3tCX|d!S4$jy{Tf3Y743H%V=H7BG~j+OnDp3kse8_}f_;z3)sys9jzWPuhqllJy4D z#q4ah3|hO5(fHqLcbs36V-X?gGpNQ!H_}Dj#SYEnd%n~xVa=+$G`4{V(I~;eP4FCC z^j~}dvE0YGONBi{-#`)bTvtz)EGmEGLD`#1F;UNDn`~0a#T6- z{Qz7mnaH)NyJj7QPeo$9balz3i484zgC)r#Zt4ay5KxBi-`u0j8aSj5OnE45BrhDE z^*oERpzZyl@tcvsLFLH6BEkY935Ix8iA$$Iewj~1Uej@1&?WQYq9EpS^zx`N0}G1+ zjBr(BOBsqh` zUY!Dma(qWN@YmsAao9?}6nV#d1kFXsEkDY4h9j3VgwMl`p)f{LROTAR%+tm6(4C z;|m>1z2V9*h@ohY?|grc`zf$OftkW79`&qIMOl&Cq~{Fa{aZa@*QNbEecT zOYCOZKE{%p6_uOj)he}_K9M-MSBhuVsa~;3dk~rnj*Hhr_GI#SR2y0crcX93XBK3~ z?e`e+tSWPbN?Dioo4HFA>+oNfO?pjPQA^K_8y2{)P|O#uOg?GRILspnp`$(QPja}q z(6GP&nP$^K5d7%)2E!*8{uCHa!kj;O+gjxrAqd!;G*hNpo~~-H-}I}W$2SO3N*{GkT6oE zk7(D4F9qT^+AJHscG*RrnqA&F1#I}e(o<*U4jQ*T=HVJHika z(Tm^F?qteBBkQ#w%KCs&(aD|aqxMIpBNVPvVB}5Gq|0$8;R(x={r!Pla`2(!pz29l z*_h*_LzkZ2!#s0*^8@Dzo7L&nQ$TWLt@@=??c$*m_+6s1V{Y@x-HqK-plJ03W@J6= zF}?qlJ_rgbYx)nnCnr23JSVu{no9t8+-=-mj7s-qw*lE9P_BAVu4)Sw+Vz7=<_VB( z+`70YF;+-g?^qW=1`FWs$q3K#sbDYe*;tnG*W-=aSQ)AScir9fOet&ohsUF!>`9e3M5bp$8a5x8|{(EpIl;tcYy z`ic?$*8EvFgZq5KJP7~iE|mfcNl{jYiMb$HUVs<6dflwIpDDGVgwZb}+f-cJ$QVaf zX*jC!yTtB(rtm}sTklg~H29)~It1-#V|4+2f)CyF3bCQlFBJSPw||Mh1@nJV`ukAQ zS}dt-)W5fKHU7HUiAE|_wZKeJ@Cv>9vwQh(ZLw(UNC$PQE=OqnOZpdyU)Bjthi);l zp4xDyZ6ULBWm2#0L*5e!4Ns|@(C-%tXy-esT2Eqs=<%`6Zgce{-KA3dBOh1Zh*O!P zy`u&~YD&ADkxP^%6k6CbTzUUOJZn;|PA)693qCL*xPzdf z*;|g6kA+gri*!aQ?U=!z!rhl;W(h5mq^M`3!iZfm$)q4?o6pth!>byR-Vu z5sh6%pc4>PlZU4rS`e@h+5Fw^8X1%`tvnsE0PyZV+6jM@?Zb zhRVH-?}ReqLEeZ{g@<>QK7rM8&empq`E8&u=i&@{LRQP2CvB!o_1?$zqdS-U4SgZ1 z*hWfq3REMerK+Z-FO>Bn?DYii(Q^`O;^dWw-(&I(-~AXPY0&=gVL1QZ;|REqF-3Om z<`4I7f}Mp$?Cl|Ja+8>yO)qpvKq+B4JVv17U8sgUI_U$eF&wnaJUDKTTbfR#sy2J& zblx>n;&w(tgkg^UIfSRcjtnYY&B)El!>;NgI;PE_2i#dayb=9(ybZ#{_eONfG@aI0 z1X3t<=dLR&sM|k}AB?&3mfvAUq(kEFQeO(cz!FBdmR^L`(^Ly{rKrqcNZ>6RZi&#k zOH{3Sw=cEwg_$S83=l~;SRzZz4QJea8{c?wF;vfP zF40RRs>t<1VC5sXVyC(Xsgw5Wh`CKac&;Oiv>g6JI#771VR; zS1=^)EGJI&B^Hm4X1Hb>UK2lH2&X;;$nVzI$hA@nySatVt_EgQR;HiP>h8Q@Imq13 ziCxPjDJjj?aL~Dghb%a39o&kaB921R3!xO1iJL}I$QB%Lb&wZ*F8E@H3YEw%zCUXK z@|3^(TDS&5iBLztxK%hFD_4b(2i*4f}}6A?E_iau^Z8GMtm2>L}2lR#3aEV zFU87Wn3uThcy@9dS!qy$JvKZTAbHSHc%xfsA<8CGl-yXd&+uxdcDWX1HH9l0ZdZf1 z#3xgvlK&Q~M3Y=$<`iJo3ZS`(^W?(VGv54q(~nWU!*ssXrrMmnyD85q51*X^a@;=0 z)HMxj=^{=$;T51yK9i}a+B(_v;Tg=O{O)zy?V#tYA5*5rtX^M8tsf-3z&_g?% z_8}>^y3Uv=osM@c&%SQqWoh|Sd-M8+L7AfFrHG5y@Es3{lg)4iWv*e}dnTa=k!fOZ z(NShgzT+>m=b0fYx_Gtz!Me3`T`Ouy(~F^FW{eRe`D>ZmJ^DoB$rjs`S{;u3SGGg^ z)GBd23@#HA`Jzzf*6Y`gt!q9D-i~;`&6@F8J;$-t%J4R>nCSQzt&E-@y9Mo)D~AFi zmAHdX40y@~ss%-fpACyvNSBqAH_4Aftd^-7yGeEfJH2ysD_KTJ%!J*jjFdpow2KS7 zm$x$pCXq26f_cnmUtre&uJ1SeUYBjfutQ!r-1E-lD6G@$WX-w_dE1`TkjyFj6lY)x zt5lwWkKLFGHL&bl;TBIWKhU+SZcLK&L$-|%BM)heL>5!6-M@x>!AKFqLCr`nZV$r{ zg+L)gO=*dlfwK+#%59Fw&9s+vdo1yb*~FLwtP)>0Ax8R8zXHhCl7zzyQ1hZ0WQX4%qzrjkqJT_7A#m?uyX}wd`dh1Oe zPoLbBFvn98bbGuFheMPh10MH7x(bzA3q~__Rn>SLWsN}21X3e{5+nYL;&QnpBI~qS z5YXJg^rpVnT&j8~a*#Vkege6;Cw^wZVC38Vc4$(CrXspCZNx!R6Us}#$33M{3Noaq+-Ys6AzN9+8m+jt~JgQ^nLMm|hf3GA3yh-6b) zNLm_w$o4XePw{|e5(PT%choeb6DVC(CE0hejXkCBzy&2g%+1okHLA9nVw8)?@(v>p zP4x{95-rIb(xp$IdLHBZWSYUKg--mrv?7`?VUnq+jG-rba-DyFZ}lUCheX>jl~9I;Q=+06s2&LQ70uU8k5vtYIok&Q;wF(tSd9@Hbs8@nsk+)VL*;j zD%taH?1h9=03uNfJSr_NX&^Py?e8t(^ovk6w#TTj*;Om39UR$jzp)}S_pIsSok&sT zo@EON3iF$=QgpxBCneKcfrk(yZ^0nZ_9U^)vLQ`xEP{pW=bvE9hO$!fY|M4BA*#Oh!GdKgA;A=u=;5m=^`fh ziAQIN1t*uzFTTaDIRA-;G+ArYc^MCxAC>TW9 zz_L*&+vRY!#J6GOom*(NlC@UA?ZJ{%l{w5{XFtsDgI$%^IVg1e;33pT znD6i%_u#+5+6e=@=@g(nT<{+yR0X<2YuSaZlq*Hc#7*;rC+c4Y;=Yx1sOe74 z>dTP~~jKu$gKO%3+Q(#ZDyH;B5L=x7hL&a&~sz#rc z9nrHCV+0j}G}OI?_80;@l7Tg2o11B+Y0WQsz|RP^ywkR>8boUz>{SS*9m%kvw5gd| zI;2!N1)PXVAlqrZirm3Sw5g$5*1~}vI!bq;>n~uI?&ww@Fr*>Cdok`s8R|sXKjZ8$ zG&Lj5uu6X77U|t=XeBGECjMak^}TyhDhg?d))wYfk;EJ)b<|q4y4cDM!&>T%F7Gwh zQ%-cxg*Bc?W_#%RC`8k;M2A?+C=B%?Ra1yrF})yW<>8eq6Pt|6Vcm^~0mbDq2QfR> z)do}|O`JswUW}Mt#0V_7Eh@VUzVGzZr6y!Q{8+$6Mhja*{M|-H95X}X+#}nEY`bYV zMrX|)V{plGA5I~n#w}@FeGr{T5>2UE((ERIfHc?An}!`aS#q&0$CS1h(wkEznjC6g zr4WvN3OG89pu`UApJ1FENY1HlSMG&7Qm?#x>V450$+@mZ>RE)W=^%l9Ufjj1>RJbO=#JwJFO4; z=Jzp^YFBHJjOezQ-LHR=!{(()siH2b5I_3%sMXmmQy~`XTDo*!!E0q0PL$!&YE@i# zVXS7t+jBc650#x#m34O=y(s6&9%xwH5IZ64kZ8phA(gBO6hHQ&Bxx>DTnXG`VAXn zbQ`g;C)9@hO1BG!h=kryw~mn?#~a6|=Dr6u$ZAIU6;;CtMTAkQ6lQ(QPy@uvJiupL zEm>hW1rT?q91FZUA!bw; zvBgG*dA9@!8hdEWS$kuctXZ`wz5G^c4lflRu9qwxPfn+IJ1oj_=kKJ4U#*}N72acz z^wK@42mA4O$a1C`?KjZ8pt|(M2N61La4$wsB2?a+K38<~D)VLe!2TNTq02^d z9^8Zk-%lw;*GdhkH7u=|cG#m%=NRL(7e(`4E>kF{D&O_&h!|_{c5x=;)YL^ZBKOs!cN{v}%gt}@eYT2?@sw6D zR$9H#WoWnJz-aBv7OjH++efT;_Y!UR?IF91La8IK0!{(HwxBFIMx*lEM;Ld>db9R3 z=nLy!nBC&NoD)n^y!r{9jB8!@q^CHF!`}I|Afonpr1-Oqo1q6ep|Qsg=X+-eLO8KB zXajn;k(hD}>?MpGX-Lsvv~~)x=+?KZ)teP78QIYXXO42(*c@rhQk(_sZJ0jRy$S25 z5X;>$Pi@APPBbGmW)n!ONGdtuYfqOpu7YuYa7}_XC$(7JRE4BfH0eo_f0o>64(i16 z3^=~W6lulWZhOmR$SgD16bCC~p%f7(UU(SBm#N4eA}6SB{Irx%eS(Y!(h&53f9xVL zoPY+c59*kNN06sM)|*sYbci*HFEQdAmp^`_0WbQi0d&1tj7;_-O{-$qGC?znxDAO<3%JH=x*1L~@|bK7>`RJ>H((-3SLulM>ZT3MjG8qU%_U-;2FI`8$&0x>8_f#)>$8G!5eFgguP1LGtOsA1JkUsE_;vZR3 zzb@+uJdCjQFk4s?gS?N`W@`d;F%!pLZjb>N=0hO0f>M%};ss)?N$$ghC&~CgyVv8*v@VSx_&%$|yz8}^GJ2qcg{}9{*g`#K zu)o}kIJi!nqR9JJGJ;8P;kcG*J$)5x4ypFL*c{8P;Wbe#l?aHljhscPF!M6q&6B3+ z?jgZSX|suytSbQuWK90?{h+;esiNhLbkIhlH1nyw)7+XwNF%laN$4JVa2rQ;wZL-S zf{tJZrEeCcfb)sU=<;QWxM;LNM`J6-XLqC>(FV;+m#-3+uI*4ur$9<%YYJg$QNrw1 z{B{DRH^NIGlxs#GTSfcBG@`CfrOs0Ans8pkO@1DN9?7Pg-q*d9x~}F6Y3?OueEV{@ zFD->bU>5c^dS+{T%`?duM$PN9swYeziVH77z3ped6x1*1DPAJ%5{#a@_?z2I@I+mvCx&)^~>@#SL01;=73xXw~$e#dH}rw!N=)A zG2*LqOR$0AS%Pz`F3Xg3pvTIttS=j}Xu`ZphOO=0IzYoJ&}CZ{HPlSfUdR0*uY$u} z4pobsNox^-1YJ{qkI037B8gsU?MTKL{^L6r-=>f6FrMw}MYvQlU)j1szj4BVKYjaz z0VRFyjZ8G>J8!0-58hU61+2xYIrY0MPb+W3H3Xz zi?ZYp1EDHbB6<9HZ3fP;-Jvy-vo#o2+kK;FF3V^R;UzTeNPhP_ptqBIxzMJ~Cee=6 z(ZHs#RV0TR?AFPO)oKjt_NAkYx?y$V4M+gl$V1RiGxQdV|Dnbunjd#g8%2>%d65PI zCYEZuiCX{EgdJ6(nqrWsR3`UJm>9))(azqRW=L?lDLQU4!^2h?0+=GUn3@*x9~BQ5 zxg*VcmAO|A)s7kM&YZu)=$tcWiNgPOdXAAUVOOR4>IESs(5vjNRJ~`ol2%?BH)1Tg zp0P4lJFty6hlKEFjr+`|` zAx-J>dQgkGa(fWErK|(hV3=;ipf2c34|q`Gb+C4LXm;+3AWyB<_GfA8QmcrF24yFD-WbBB67+u>7dPBr3^Cpr z+S?sFH_iABBaW%YawPf?;T&U?LnGqgWb8$`C5N3Dn`IW`u#$@Op0I|y6(qO@`jJXA zFH<5u5E;pM@^*y{PUaU=gi_tcD2%*vSza5Fe8v;s*tdb#R zo(Q9+mkNm`xkRvedp(MpQEK_j4?g@z%<7&AA<5BJm9F-$Qm(DRa#@y_P!?XE|bg zcOalX6GCUIHr2pp=3de=yG!`Yq@74xaI_JxL(7pnwtY9{_wk8hi|Deo_(HvhX3v^_ zoFTst!=oQ0gW8M;_w^zu z?K%!O8m5zJ+P*FGmxF#mJdAv}b>Vouv=zQ#oARjuiONmr>Rca11I<4I9sRte<&f4s z_4BLYOp5l-#oEhNQ%89K47IV=Wri=UNvrtVtyG)*r}yS!>x+?^#O9k%rFd+#G+G_n zvA3(p{xsKr2(f>gGBf(@r(fFkNj^7{t=o8by6Zub-nm@{3r*woR-Sbh7G5y;&QXv{ zF)RB;nA9=tw+rmn01ky;l>>_(WCSrgav3mk%0-nyLf3T41WhCWyzg}@LkepwD{Iq0 zPdB1_ZA3J?QDf`3z3aD!xa#+-HGa^{y;RQomDy7o9-i0GUK@B5I%LgqjKI1-cg#t) z+Q7~xdv^tzKLHiS3Dh#WrG^`d5NvJj4oXQfQ(}v!U5*@!ka@{Nq|qY(+lTY!qYcHk^%}imE=#c!cFI)cOg=b#h>uTfZ>&ZfhnN|19lNnBT>928`k^J`?|38+8 za7%J?mHUnV{3FiGBbDJxXctnAqq#&Wi*Zb`x>26M@c)@_ znrg3p>7Ss=HUFd)oTy|Ej&czRTB*AQMF+EDZj>hsxuJj6`Y2`+0 zN`dANP+Fo!Ar`YM`o%YQYheY8(oI?`EKS?-o!lRrB2AvSCDvs%=eI^WCDrMR1C6q# z7FKawVPzujQ7A&LaF5_ed|Ropa-&Wi;nnPY2y|K=3VVm$59;bVxNQ65mj(glev~ z@Np&=oL|pa2#iCZsxd2HB!56R=RA4vQNT}^kHJ6f%9q@5Ao4o5glnP}Ju1H%AUb$7 zRRy;&pNj7=ZTm+#$7h{qT0MOF#pkus>5=VO@=>}*mD1QMkuy2}4*hcOnQu=O7G;Hg zgHoD`g%@9=Y;k`=mFY3};l{34IeA(%f5)}-o0h^@lBk~P_9t4D;>YNF2w%=h7Nky` z3Q$AmSFEhZ=7Klkey(Y$Q1Iz06InO@l+07E_?{uG z&1s@VOPK!MX(k78PDlR=>U z8T${Q>q)r+ty}nbD4O2E&)XV~pSM8zfPCy(x%9NG^fUaj6x<77q3yNWx_WjO?X`7x z_a@kKLBH))u8xz>CuZc}Y%i;&TBf6c&6c(3{tk0{TEQ>u@7Hs}P; z?F-B`j3eCr1%zvA#5%Arjf<1KrgBJ z9O6@}GJ3f069;7yP7g9=5#<_a$w&v^q))WJ=(-y_!K-W`k(bXuSBlWIn^@C|cJ&|% zs%SEpww}(zF;cZ+%%I*3rk2X7ZCjIRUm>)a37=)>SPl_?6rnz2Sd%ODd^Q!$6AZVs z@0Gyr3A;faI_vJFg{HeZH1zU=OJgxF!37NolbHAY#mWhV%EPqpzg-9q`C9ioy?ph+ ze{m0(`|$?C_tU@+2BUefY@()ap`bRaF|PR`O^>|p7>@6Q6@oBpQKn0z#m}p~Iqpuh z@Yx%|&=zTEH&v#gyiTd!*; z-{cM;;s`5HmndFiOh=jfs12Q;W)Al`HV-d?Q|MFU0{!nd3RPu0zWB>Te6c^&Ny0K- zxth7gf>e1ww@k(V4=^wG`7k5219N<7W;u0f(Vti`yB@X}Og>(V;a*su1LX{n{nRhx zp)ND+-tkqG0D}yJxT0KOYxMC-6^Y*DPZFfwJ+%U%6?mJ#do>@S#I+|o;tJTca`!ug zdC!TFZO1dU5x%uWL;k*8W&^i&*Rkm#vPfzGDy*R+V{^>!4}tPrho~pE993L zseS0NV`{a|4YP`0PrlO2r0?i@Ud&irqTJdgSbi_?5{|o7w=!I_I}q(cEHm8?^p{I^ z=JYoMEf*`K;YAF=^w|4gJN@z9Z9Q0BXl!badv8$E>t(63;*IqoxFmYb2-qhSTAhzG z-lbA@u8$!2SPdISkL0JSjSUCdU zGD~Q^GIej3?56ESkK3N1lod}2)H45m>)(?2FX;q%6^0p6v-5)%E^cex5gRO*dF&H6 z`GZ?}R+G4L{nLBrxBR>R>nQYhzyWWsSZ32ix`4m9LX!KGM1*drrmj2Is<9&4&|Bku8Cm5Dr*=XsC7I zakj+B)@SN+&1Pjh?Ym&V8H-p`YJmxWcJasHyYd?DKNy#97tFN|!UOD>iupcJ?{k9Z zPFC$L0*i%Q;llmR3cU=PHT$k<$iNU#pHA)FGF?H`vA^i;RR(i#O1MtD@f)=;WiwAd zqseRDgq29g5Vb>aCtnq~A3#h|P{?)FF-SUY&C>oPt(=2^W~KTyO9m6W4R0#SmD|=4 z%CwtVAcb5v#bzpVlxU9wLH5kditLVCqJ6LQ0_VB zH7_W!Hk($YOw{WI6Hy*3;NTN+Inn8|%b>P{(DwcdMFvZS+nEBR?L;iJ*y@^gxUKOB znffM&_G^PNIqAet$X}ii;^=r+`Cv1!j2f4!*wHYT?)zGNdb<^qD34;rFwwT{Vq;&N z&GufTt|ca)ZX`|>%l6!Wwf&kKe38^b#62*mlCB}}xq)D?P@i7IUh6>_xM%H)Z1cjr z04?rfB>B&2yh4N&^!g%SATHU!Dc$0MQyl_RUq8N^IaQdukj~IeBb1}Lsy1VVWpdRE z_L>W^jMp^UL<*O&2PSJ;7e9i`@W;2{Wr96x?MmIbhxz-uBO!y=@WEGw04UwJ!f8d-b5UUTL3hwG*Y0}4!I zJD`cQXuhS%!ZO;tEEqr-YD;JOaRY}Br-PS^2qw~<%P1LOoX~S~%UpNLEnTKk4Vm0n z9AXggRh(+*{ievp8zGz;!%?t0wGCn6+SnkBAJMV)PKk9f_nY;FouLoGjrPmabffSv zQ)~|G^qHY?U32$v9?ym7e1AQz2hxvr*+t!fj`2qf>fJh%3Vb0R4~tPuh#M#g2-ptB zpDBI`raKXwr_$4{_K{mVK1mA6<)?l2Ht4vBeQIIA*E6v}S&k5_+g#8khgYl12}r0Z zsJ({a4d9yB4nmx93=Zhe{D351O`smxW=@4|^)$CDcIyXZp#{<`z(0S_84;<>!S`-B zCR;#p7GAmu0v7IW@L*N_N=MNkb!Vi?k z#g)f}f54o>hT2<4N7>BIet20E6jBV?ns1+*|NPJAGa#LO$){3_WBgxkuK7JhSp%pF z{pL+yZCVt2`qZt_CcfQf+Vc~X4mr?qXuU1hbgOM zo8aYqD3%`=2#M!VK?5c7kwT@g^P$|iLX@R@Y=%uSBUl7J>E%9cyVLYn`L)=rLQf?$ z=#?-bYb=gXiO=VqAQYZgo-@-lyvuB}*0h-naAl%viF=`S!5sUXu&3AkvXX=?WweQg z2?5!4U3+y_yxOvRZq?jbqRdga^W-9$JJ8$QVaXUOO`i7$?<$8H z2h9wvo6BAOP59R5>(Hz?FHL=50_f&O)=a66>j9C4%;U`Ld`mc9|LfEoe!Bp$<{IAJ zH{{w;1VV(a{3b~$aYl24UFAE3zkcUSA*Z-wvx-c8!NY+0G7p)LIROi;2v5f-Sz;Y^ zk>Af3e09=kVhQF4PoTR=sG9qc%jWb%F!v21?%CIa0|^m&+Sa#kU8p$+x5^?7oui^v zm*ztVi?-B;+*$fH|FbdCm6|4J>s&Q1g(1f8W0w|?H?WsfyYBl7iM*!;igf!zpF2hu zRh_r!FgKduSh7b?zB~`-qHOt0+qfN+NHvy|LIF*UY|!fXMxh+IQKpU&lK=n-D*{yV zZ=D<$;w)bKN+wj*^zK+2z2!93hhM4f$1yNgyTG@V+m&kg{Iy_|+Hr2`+&vkqVR8y_1Eiu!n~1~yYlb1{w<0Bl1}_2)ez1OZDeG$`uOOR&y|d)g|}V1 zZ>Z6!2SA3t2Q+@)d$;?uGxBQnz9?FMWf=`UkK8>e{f7lJ{C1(Oc7Hfi?!V<~u59dV zb9Uri>c_XgsGL4OxVn6!{nq~pe_jg?$v*x7{5#Gczx!_Y_dMP2fzj_ce-EuC(5DYh zFe`~cl*IF8+{M5H(k3<%hIx<%Azsz*ll*btE=2sET6!Ly^*+u&-xmEjgQ~pRdyTnE z$8}niDGxThUw~M6%!8Vny+>~vVVgcD&VK3mSCUt(q!>^992pRwyC*eE&fli(?F(Ah z>Ee3u(9^vqmo)DwTsq!j#U}D8*^rc2EHIjgH%7A<$wLASL$qr6^Wub_Y0HsFru=E+ z(m*!@lzADccO~gnJT06r*){*`&G^)$?zM-uVTAfxUgI2$#M7kF810+Ip4D~cV}&xK zeI#zS^%<2^=kv0FS!ii)J6hjxOzw~_+295dW6; z?Qt%EqKR)uEU$2U0zHj1#0rc(XcBmhKH=cmxlQ<(1V!x%qO`$kKZCz6BrKg)9xe&#m(D%PZ+J)!klhe|>b@+{m^QM{18H4U z+cHbE^z4bOpRNjXofg6SFW+7z#0SPhNzMK1hh_}4Z2*LN!-K<_U{_Z%)NOe~{fZIu z)mVXedPINc@cJ+AQ8umLvD80XqW|GD99Q^*BNiUCTNxzCuhln(s9M#gpw-3TNQ~~H52()Z`U@pZ}w=bIM6niHg}RtE7=^QXlmqswe`R0IKkopQM4u2 zK>DVlw6+qP<;9p+f|v?}DsdH<`cFPC5Ie1_YAapo2Hx6e1yJdE%dfvKn?12!3X%7s zMsogQ+gsVCx5BEXg^#ck^Aho9=Cc9jcgbo(yL<+K8b@Q_0s3wNtSPJqZC6KsceKQEkm& zKVlIc4}7{&7i!iVs>ztjCyvjRzHPpPwS{mC_gco^4~>m_0eLEZ-k3@0A4uv)#a~$a zj@UJfZfkC-Y(pj5pcSq2>rv?w%t-}>QUj4YhH4$Yww|5b1{Y3`o8!9oEN4oE6W(r# zy{(hy_Vaj9H;{Mf+vS;&-;-aL{UT+E1PVEE> z$y6?{yei4|LYd7ozY{YSFxc!WX)ZhRtrlwNU5+VEgP6GGXFUoa>uU6hQ8O}QI zA#UaQtEtt^2^%e@occ)7+y%Bgs>^aI>%+lcq6k@C{%fv`dHhGONdG{me_C?H?>RJv z83|efjd}v1>ba`fW8xk^?VDb@#lmAE&pg&L$$d$vwl?q}nTH^d zny#9+8Jiz4G#h@NLwr_*KK*n+RW-^rVHRjo-_Dc`A@*PtWq~|wOvB#v#2KOG+|L;7c=U$vRTi0bwTz7!Xv+Q+>s5Fe+)sg{!8UM}79T4&2} z(=bxfyyh5I^6kPAPDGsUS^mJ_Nd6vBU}2u!qq(#QMR{iX51*;1oE{4a{AXa0+h32Bo%gC(Dv@)iVr>im_b>kz!hfa-Po+yc+09RY z|Aa9ANw@!?W&f4leFvof-(K$9JHzWYCJ%-K2ESb>KLqF80TeVX@5ohCNHty;-A4Rt zq)YV~zkwkgIHMJ$=-}K>;uj)5Qf{2TggTkIcYG+&|AROBaiRT#6#LpP)6zpL>T`Ci zZfMM(%cGDVH5S61&@$5(mplt{o=m{y+n#+0eQW-N{Mqx-N`9$u$#bJ#-*y-Cr)3#x zGR@@md(W}&eaHT z_~h+H2SaI7_1evxxg-k5T@r-5BcOA340{`WC1Ydf)3T4uIBr$jar+u@q+_Q*h$ro% zWR<}+PM-+EM1GXP_%l^_U~P0W&KmZNp;<{@2$831wmTxzz7FJNtvIH1TF5OEIb`UH zUnrWKnhwpfg;2=l_E-O7jDH{N|2?ly-H~dS43CvuAD_O;t?uwZL)u_&q43K}}@#-+FXeD<= z&w8pwim0!v>lw|?C}6^KZy|H3KUZwRRY1=bzd7oPE!`^Zhp-0-v1N z{wB)T$0vt>;7tMRhsB<4>Qbs||JzUg@TBq@*DLYg&!2W8$L679ezW&C2|1&lss%F< zI<-{kZtOB+B+Ps!CV#OFxC)i zz37UuvJI0ev$X6lvJ~tgeES_^iaQomo-a7H}~> z%9y=Mfn)vf(UqSEd7PEqrkYd;;&zSH2c_ZK>)w=QeWy+%q%Cxiyqa{Ce(t2i>lu@N zYty)2+WcjhBrIWCru`vaxq>%Zuaq<_Bvah7w49m9w~=cjXufCI9l49)a38uygE(jO=hMR9lzI58I4|>rU&8+rh@09E|prEt?UdBuAcn8F#U5x zZBP3290NYAm9bfdby+*M!G==P02`4+05fuNdNC-2-ARxf;9OhRMd%3v}I3wo{6#$Pt{ z$v)z3$_M9o4wJG%vYq0d@cly*=L8_2_AXw1Z3$Rt?+Hk(FL7)t_!tOvg&6FL|8Rp} zOMaM>SG5s$6KDQj;D1u__AvN&=J>oE?`(qY2MwHQ%kKHt>*4X*!u{WR5d^s!C|9}q zYFz+>SYK*UZ19F<8$MC!?jrT+NY2nn?qkxA3SIxmw-TEf9CjMWqc++_L0_J6$B+;pM*@_CmQ@a@5_f=4GrgI#4pu-ErvH^Up za}0?zhpuSTNnQ{bu6^Xpq!CKeG|a$~FT!aAeKU7GcitB|?&0nWC23ktOPMp8309dE z_ofQbUG374fC)Yd@v>D3IwwI^3n6siS1&8wu14XF0|jKl+zw1o$w2k)!>EHw zMdaNo*&n85Pn>afFRW>#PgbUl)03?}79kwgG*M`VNC85uA}G5PI&Kc!p1B|61O?Tn z&BXRHW9X|ilfn`{_}plf^lsrZCwmUK3jBhD5dGYy1$7r;Qhh?MyJp(D&5r9v*r$QL z2gb<$j>8gp2kqjK9L-ox%~9K1-!42O+A=nv?H7cx_o~AwWdSXdvJ?lHBw<0;bh-Lm z?K-AmOd%-KSp1fOeRi<~oHtXdYp{~XiT16A=GGDN!C`HQcoIjP4h5=FG5?o#CnmHp zpa^+}Cq1-#*4T&c(l@UD(2FxSxlY@_?e`>S6w|&pm3Zr3{>0d%blQxeg1Bj$S&`t0 z`VT7kwe1rU874|QQ899)>usdaHN(NQqv~AxM7mddv$5&sm-=xfIaDbUOlFH z)1dumll9_E9?g|&8Y!@sB^UeoEX9Aq1=m=)8H(>{sP%OwyZNuvXhYUwNW+q+lz>GztKt9m9-$6;S4Y2pa!}Sx%2 zQ=JgKiwVB=AV#wBctV16_3AUDvDgZGm%Zl-J)LRw$&bH+=vE`*S=#Ub*C&u z?H0DZTB)jb?63c&(rR)lL8oKsQS9z%Veq`-s6e)HknL4}oq+`ER@WGsi?=9$(Fk6& zpH1}?rkK0_YssSrww13J=lB&y$mF({C8D`^NsQBrQ4%I6CRd(W+`;{5so)60qUVJ5 zYl|g1tWcMhyC2Cd;n%{+P;r6*CM`i%@NQuqQnRUl@llIBce^}Yo5a+#&dLpLy&HlK zVRG6|y?Lmk%SNy-M)wzkr^R~M9b(kVUxo8NRQ)Zwp+7S9ZG&0Ln&zM5D}yh6y6(2$Q- zmZbqG9U4%>-_r4=_o8o&inluVB#+h2{h~0!&_UHwEUvW?J%971MBZv_#9Vny_?(`* z?&_MRWZGMoYPYrCiTH&u*yyYkT)Vv_E1`RK%-U_XcXNLf0T zN4|0J=-F05yq2fKt`oE0Qp;mih7TLX3ki=Xl z-}2PizNNaqqX~FJpla1H?=vwa+1PGXlW&VHaH?YB-j{d5A4LZ98?(mp34sd09GK~W zE=J03UbH%!PKoo4I@|i*PB*m%KqB?(eOzpJFc*!?#_MZZAX^O6dACx-G*4mU!UA`p zl=e9~I)M;lH{+|0Q7La}->$mMvZiy7teb&&wWLyoG9fVG7uCxBFx?@srYNb}y{eyA z^rsbe^kWMuVJYDsgLRNr`7+DF<^g;HDjAcC;B*s_3}TsUw7dvt9FR@YFQ~KjRMs2iDm!RVS`M`OJkn67L5(sOFZa}b2g(zGN89E#;-w%YMlKO~ZO(Z3GLHd& zW9uapVq4Q2gmc|3t49m+uI<9@ctg|5rs;7lk6rhiW$)eB9jnd`zGTH+DUICZOzdSZ zIyLlCSZ$)WiWx+BH@OeRzA>7b-pE(*!Yg^@j(^|ejs}Q7L7J}r2@Jp@R}I+{r(%Yh8+F>4L$vt6 z7{!>nVol-d^!Ac;2CNn%gm>+OWDlutdJ;H#piWP4)SsAQvcw`~X!R+(kv!ap%$xW^ zheMXco)=%`Z(?%V?N-WU8*CTDC1RMcGH(-NInoBi84E@j-=o8m0P&qA3DJgFOFR0a zR&Q8}zn+rvj%{|RWSCZzF&bo#j2HlXSk#P*p6auPGHz{Y}puqPoz@a;hr# z+TAnvYI?ZHSXokaW<<7~OW&K_O{X_d4&jD6&^Dhz-Oi|v$^D4>k`4Q&R%a$ zHyxbmjOr74F)T753#pKt%Qwx_heiUI_U*5K;moje4pky!0BQ!`Hu*F#cU_`&r>X5W zBkQNL&w@&}U?3iIU95^E(X-F29D)HSF9w-eo(H0gxD48>e-?Etc?z>L!ro6=&Uqi% z{9#0vCZi|-et%%=?=rhG!u@t|jo!(;4GB#s(k!5DB|Z%$9LLi_8hmAB%KCN(`L|+U z3)s=}ast_WA^oIJFMr&3`}&FY8IJw5{PsSb-Mw}^RW6@g=~Q;#zSN7pu6EwHA4uuP z^QMO_{0W0Tw>x0WPXno^W;(GFK@*^Ph@-?Wq_B_M(a{l=6R#jd;ayk8N~Jm&rML++ z%n|aaLyvHkC=cE87%do~plX{g!SVGWkk2bAl`Br6a#<~b6))d*6C9Yw=3eIlXC zXgVELFST<%Yvj=sTY znxM|Ep2;j4Qt5#WC0+y&w$q|I{G}WTe9ppyZaVhO06KpBxHC9XKbk_1x2=9z&GX~9 z0jSeN(>B6(%O4~*qjWT2@Oogs%rr(7kD6ZTH%;eI?q2oiY{-~O>N5MHZ1FYHSSG%h zNtdMUu~z9@W7czx8Fkrnm{8+3reQ7GKBi}UlA)!6a^>TT83YIznz2>!2qwuFmaklUP1T_fU`KV$Wtbf_kpK=ZA{w7i85F=bO3bM zn(-*j>mqH?rp6)lw+ENqDQu(Xg(NzhHS^yUMrXSM;!KyKKTM;IbLXPHbnKIqpUxBX z1kI~!BI)td^Kk)R^?vN}Mp}wNEQQe}=sxKg0gA^c)tAQ!yrN$q6Q?}jpVlw%88Vxx ze468nl;yc=_M>0(AG=Avw~hOUv$kvd|IQ=Zo0}V|$&vS2r9jo^aoXvvC`4rkO$S@? zR{AGyfhJrps&4YKO`oOy(Mp>hoAB*|f%;;_pS*|jBBAp>;G{d?$bo1N9c_O3mL&OP znhnR>UP%)2yms~x75e>I_xetaItlf}m+m@7g1E?c_*77Z?*W+14YLM>l1LVF)wJv+~FW0bu|iQIhLQwx4}UHO<{%gz2PgbYrP7?NufzN>@A< zA1^3O1(XASeQA-6`u6iT$MYm4`?0s3j5iDOttH}T~W3h4jRW>D=U`OzB7q@;Y`qQ z0r`_%4{R=aW|$FK@6T0hy6~y9JBJHZ{VoTc`3PZFtS=)|H}Z*dMRn#T--~eQ40Wq9 z2ka!Q)H9AHXk%1W>ol2L-N%?wO2a%zqy2hs{KRCKdqw23sLo?b4$p25gUb%Qk2(_d z740%Y!Xz&f>j_`tL z?p7_kjWSlYPtqtv=iBpgr&fWw7jGr~mRP50Uiz?uHofnTRG2X@-c^8Gi~m4DJ3)dV zW7Op=)C%>id~}{njnyuR?lzKfafM1n^66a^we%B@kAJW- zpCb%q>ItH%eymUjFy!>;*Uh4G7ri6I3lR^C;AbDbY_tPGA-Q2TV88V)_1-F%*X zL;&AQJkD(Y9lsqM>qQjZ$Pbjbe1b>F2(w2QBIZQf*Yh%RBUU@CDmH^50>WMr7wmJm zWfbm6)!awczv6EFAXS+0n3{Dh_-8!-%HIjYPNABN23b3lDc^AIu50XFW6MFB^cUXe z*}6H#Iw>XqS9k9R?mk|@u71tnNICqIXN}W7j^#izi?u$JHjoDQ@SH)A_^=ZCDXdkW z=Uw_(TZsRIS$*ZR^&9EEqcB`A;z9fR{a!Znc!k^2&32c7 z776jOJO>lO3(-Nu*R>bZf(k63k<)tJX&aTUl$J`VXqVA2+X)ii8sC7`=P9$+wokJn zOKa1}<}brNq&^U5Eg6WM47M)0B&j-mw^MGd_D@;Z0znQZi2~V%%9jAh|muTE4{9BJ#+!; z%^(*{W$36apDTRJv1R4v^Co!09!9?>mz~v7zsUQ6=e_kTT=MN_YUwX3j`}@xba;it zDFRDgBs#Y_qGZ^FAyY-$Vud!Q2?*nTreA`}C6WB}D&!Mv;NKf%#WN!q#_tzj1Y02k zcFbcXRwMFZV1YN<15If znfDgVX(bQEm&b-rLd!^*J-*MunaOO#fYSl$o9V*@01vJ7?uKQeWvVN4Af;|dA%??V zNDmEoE74ogC?xc%yzB=)_bYga|Ji#yd{>`rRHa7x#^<;L)A!?F_Q=IPvBk`=8vV}f z?!^AM!aqJDO2K)OYMa(Hav(mh0;JQ7fo>F`RftCqCaQ|3rLrePh_vQRk8S;}{{RIu zS?L^_QYZWH@oyKt4i?n6t$o!a29S7m^^?{XDq_@wnnol+k3fT|iyUvxdu={)wMoTOG+ zMk(HPcVXR3Y_nEqH9+){tCwM{K+7@SC4m)d0^(ypTQ51j9(a50d=&E z-yNH=&+#eU#$D+U%S_zx&4x?c310<&+#Ek`msZV|pFb|a5f)$u8ZvB?aLSdsm3eNw z2LKWuUR81V-KdX569-NRCxN3?9}J5a+2Crlu3aXyXu+nfDs`uRAFdm^HY{JX9%V|x zHQ(wp9I8(BLD&wMpJl{)Iu!^KjS$on^Gv3%O#~Y46i_Z1UA6+4=3M3e`pE0JrPPe0 z?%e%7J!3&)023R?7>XPd?mNYxEmC#L!qd!nm|Y|6Vv+RL2K0#K4<-7X@E3ZXeJz4tY%=X zY&I5DybrH@GaFA-yuecE0#@wJek2dCuXHK4kOo%d1FW3t>uWrm=7T0Qr1c7Zxc?A! zx|}>}WcvmD$TEU<0-gc2o=+)6cq>sD*wDXz@JzG`5f8bU%c<3Dw|aLNd9FQ zerzfM5XSoiH9sIK&u#28%Pn>^LBf{1yzun`Toicd?Q#$6yyRQ$$P4Wx-&ji zb?JTE?~KIV>n=wVkH_OS%qq>6f=0!ym)#)G?~7l+ zq+o8mHn|f|{AbM$dR~RX+v_DdJg+xdZ>|o;UGLG9r(;`)qiyeIAaAeTokkuNvpB=J zOLn7>&0k4V%^bkL+?CvNB==}s8IOQT;J8Cff7+@#M@C&CVO{Eqh>fMbC8Dkf{5)Xf zGq>z>h|qEje>Zx)!)bsf`V9T!z7irX*9s_4P7ZTKJ4my8kl!_%Q~R4dQ{F3 zzZB%0lSPBCXGb#BDNkD$CfT4M^Up(41B;VNK>KE0LAYMS)}YtTk6k;y=`mPUIfd)8Hp<#C#M=? zF25D+Fc*~myBIDh7xU5B%#}V#YEqUg^^&E!1_$sbD4a1jdO>8ESnUim$0GbfrJxw< z)ARhX38v^ZQ=jfs6D%l!6_ilWdiUFf%Ra5biMna_Z>Lbz-SxhgO1$QvrOrMQmq-q6z(MGHR|a~< z#Q3FlxE@s(L?j0Wek-R(X0u=%?{T7YDrp7R6Yd6YSq#?8Tnk?v6ge4wz+*~ zFhBOHWWVY4Cocrmpm(@#aj2!@!M8G*IDK**tnfu4u%cXl=>t1je#l3*jHOY;M>39u z5s8|tjXY{+N(sM6a?tCj>)rznb=)u=dR`@D$9ZcuY3rd6Oi9z+m1e6C?pv)>!~NB4 zHZMx|*KRp|I^e9t!ACnK7r7uKg%0g`L(&=e6g@fIYmbM1W(XG!lzik1U4ln}_Gk9h5p zP7f3kLnDxGbGP#H(gA3!Z;vmhjfEaNJ=~ov9z``6t9|~gln9X*x(OtH|Gn%gd{B&# zcEWRd+M1d?4?n<`mVLmMsYBcY3M%Ii1l+$J!9Sa>#a%_tkE*vTh8%nDmXWzeZDnaz z(os<-!37<|IQG6|-9^TE32^WgY7TLXGskvPxWt$aKk`y9xZpNnfoMq(q|=O_ucy&AUs;$zS_$3f&=DMOIA;?Th|hY zVhlh{hnnsyk;4cHM!O@=sd6=Pk``xlk01bo)nT04y@;-FMD0ep(XN>P%A$h!(6 zpf$DbN@45>GBuyF&Q35XGMZYwA|^VKg%9wi@!N&Un+@+BZU#KSPng6J% zuTheo-SrY1;(!H=@?WFy*!x@fN0rvPv{PoH(&jOTW)_EW&$S2pNt#-5QYp*s=JT&B zf8Iahqr1FAqL!|Sf6iDU^*oLotyiop_Wb#0zct92zom5iT_uh)Xx*!}p6lq1p3Bki zTGWreKx_9h9BFCoV|nG$Ch8t|+-sa$YKmIg51#u|Y!$o@2dKU4sq$>@`CHiU)u=W; z#B4K^egEB|+Pg!7ra=Vx7H*hg*7cUCq)6W&VodMW>U{DuM}w_F?c4i4FSj*suarlU zgc9rcEu4uyJhr=AB=F@VVVFcQc`!i2Xk02Ee-<_{CY2MLg)PMjJ`34Mw4CAMN!dsG5tI4D>jufinuQG6qr)BC z)=v8^Hf*TBhsF;gP<#>SDo_R=<@-bC^5z3{IeodaM>CzcZa#rWcyhjHEf$`iByVX} zp#5&k5Phg85ZOsu&ss`UE~E1U>f z^MYzd&jXXemcu-Wsm}5NQ$l8(ZENF|L02#7YC(;o=elxZD_1gfG+2-_omz%44$1J3 zAFrD%oRTJyCe;M%sDd~kE7<}vQ3s13JL-2#WKMr(=V(|ef)&)IlXuk*KkUbnbzb&2 zvJ&&oB4`HwCFc6tp}_R)?9C{%GdRjY0Xu&~DXE<;u)Syfa82W=??LLJZ)H=tMWI3^9i*DD~w&3mvWy(MFZCZ8gOdGKx%_5hyK89r|qU9rp=}&YT>^0 z(&;mrK}8Z%a`{g5-OZO1z-h%*brx!SuFgiMFAUz*U#O2gjO)mdqxy7Hz`BOvjTL6D z^2alAJsiJrs$&9mLW!JI)wy|7DQE#6FZN2{wPglB5BB$V94(B4C-_TG+$_X5%#l9a zeBj*Fha|CzMz7nx42#*{<1(grXUW3{oMpJRzvw*=&V*sn(98 z#U&mfMT=-XceJl&oX$e#C*y40=3 zHFZXqR6b{aN`+q?;wj{F&^WouqKci3LKjKP<2KQO5oW#nTY(MQ!x3hz+9r<}aL0jFDU8 zN^o>J$>eEs)1ite5mZ5%vyoSyISr~v5c4Fbl(_C>!%WscF*bJd8ZldH5WKdG5T-PY zaPLB}8;|H@OIAw_eiqvnzwf0IKYt#n|MW2*_CjKVFy7Dej$mNkq`(q2DDkbDm=#v& z4?&IL0igA{agC=$9xkM4+<&{E17if$gyS5q-;T1qh?z57e3+iWX*jW!qn3-ztDcBM zFtJW2*Z5ia;yZ3a<;*MaABv056>XpGYd+w5OMb*X3W4Ds*`-~~WX#15$sg?b{w|R< zTS&s9o!r@VX^#-)TqhNp)~gZJ}dU$4^yp-MQ9d%eK?%ro<|6sq|Zj8Jzx*7W@yq zjlW7_X!T>?^1UuRn_L zsN#$Ul3P`hdbag6gYOHUf0ZwYkLl6u2}yq$ifts#$ytu%x#|J|zVExc4* zCzCb)_-^?vyH#RYq-CU zDF{Qnx-G$KJ8NZ1@`s}|d(uD4LIUVb&!zEg+jpM)3JV!jO)TNt9qBR+sTTOq zor2`8EinZ$iJR5@ey z)?pO-toi2{nmzGZeA}{Shk?tZ@;fuyi$;a%o^{HdGgB^(UH#v>IOZwdpm$lAig_qsryex%KY2oJQ2|`!k-Uedch-R52Sz8TyBNoyA zistP+N4+QlTgbevYh491N$bKCJzfzPLp^?Z$g>B4IFUqw1sO$@_r=Wee0&!Cu?ed)}WOgIV%{j-k zG`Fo9v6Oc%t=l>s|6z6x?GD%AY%F*l@_zowle{xUDvVT;oHS(l&!Lelk?eO=DK5WZ z0&L`4wp9|^emB%_2!%1kqDMV{tqqN74pJD^^dNFH4-D$e?X>Ts@F#84sX z-q)=s%CSv^LE)IvRq#NMt@kodbBdimz0Q%C72d()HZWrn)B;Q4yArw>wx0J?%A%0=R6$&L1_Zlqq zRy}4>sA#IeC(i}Hl4-O#Tj;jVq-BoC${Ue=(H+ZZ7gd+9p2vUW zLzCy(fMsRrBs*U5A(<6JZsz@N$w7n$SL48%5}xpc6meA--a!pRg;W#nVtOCdUpq!@ z`hpN6AaPs8zIU;2wKjQu+8P-U^m(jQW<@M z-mm6 z#P6u7Ddon&$Cn_@K_4^qB`<3q#s>La|(?i&E z@2c^N5L`8by7y%(=v|=~x>9h2SE##a2IIf4J+|Sq;=rSN5hpG?L*5-DSdX|?bB5|s zS%ha)xU9EB<$M`X7yQ0wKbZhrQ=oJ>d#bc83mzh3=T>|fH4^y=q?JCwLmm2FpnhP> zTHT?0W>QryycC{$h)`>cXO122+a~MxBVaI&5jC!|uc+=XQ1SM3i39h3XB+!j3zcto z-zJUh_MYnuTiSIOm%eU-jljOw6OV5xl$Vn%nZ&y5)I#-maUU<)C!?#yF_=s-{_@xhh3p$u+UAa16e(O!m9fZHh$tt(Nllh5b)$$ceB=5NE3x+&I zN!b~3H0`xhq+jeI|EH1ezFnOCY0GBtv4cl&6)4s8EXn>If+B)J5k#V5|MBZYZQM+Nx9P#?cSnvV zES=xqS5NfMIOAVFF-9svDgEsJkJ-PtcgvCejX;g1JEtKi|q zdwJWZY#*JQgO5%jhZE6#LpjsrUCEe(hJJk+3t`lt{)kYpz{{x1iW4hJ=^G=82yD3N{?HkrLoAt%fU|Km5r$%QXGO=x%J|9LQf@yv)go6*E}xlt7ZaZ_x(W^fn+sD zw*0gjf@D5Wny}Qb-I+kbPJw_zyj}bO2#rl_HBa9b8*p## z@0vMw0u5f#mlXBn~2=UHXsFphThNc79=B`+IndlD@{WQW47`6h+%_pv&wDZ!#c4C<`Yz@!1D}q z6-}qN=Rosi@p5)IOYydsPTgNsOKG|$H+b^uf_&jq>DAIG@UqKrmlkxK^(`CROJfbW&^trsQctQpuO^W z=!6`_2=wlaA)C5SRZpt1V&6Rg2s&YPDOtv9>xxl<34<*OkzJ`;AyW(WoOQJrDn!dv z!xBy1OO^O-3dHk+%I4_(S#yP3P-yWv2E9I+73Ggk1!_n*h060*yeP~n~_HbNXA+xa6Zn6?acDN=kzRtFG2E*6Z7mAlK zmS6s`c2B2&jCOCoG#nR3Vq!#@&N@0(lNj4By zH-#!{PR=as95;I=A-%hN!0~ZpYIs3OGCJ6m+h~fVtJL<7rR~0z?-!uPH-uR6czfUp z+cGxvmhbI)?vQ}}st@13{UWgc`(?BLZPegjJV&6nYIPA{bsf`E={^8vx*=FyGz0aA zUuk2G?S?*cI%>`nIBSRFuUCz5%+=ZB?mDtyzQuj?0GPR^W4iA8W(O?jJvfLydD(s ztpwy%K6w4hIgnSali>@{h%+xip@T)C)1$?Kr;W+x$?DAyfH!Gs*EN%fymCNbAECS> zSB2f`oWEQ1@0#DB@fj(SSK_BCI3+3hid8)0v%hFU_kVZeh;0KJTB@uUQf8|AD#>8S zd1SO*c{_o6&7aLNBq39dgYV9@iz<=~oISN0MY9e1<*Nz!)hIY@eDZqs=x8?JyH}>YE*>*FHkL?uIBJdcS~%Ji z93zFIu8N7nnUgJ8WQIw=?rKfk^gXCI(@^h=X#KZRljX%lDWCLZB|DbFg81T%rzQ+s zylWwG`qFF*((lD-u;UAaCokJRktVgKe#DWD!HH*}JmbLYj(p0Xt5%>IKDxWJ9?#0@ zw!#_>0@l!OH+k%ZeNR=$$Xv`HTvIxxGGRqQt5BJ*8UL0}l)mk(1^YTIgY8=Uofv6e zVLXweP=!E368VUAR^F$w6giBcshwumB)6c^;hgF4D;Bw)$%ssG4D1xYAc+C9R$^&pC+G<8EHJ0M+{(4Co@Q^2R;dWWIsnzk$+C@Z~1Nx zDsAOm=Gz{F3tm>!eKtv*$Kf5Yk6l=jW6O@g>t`vogiD@LoG}U&R$S3G8;R->VC_+t z^y=*85nozBZ=ADf)}VIM45#IxG|SwM07{_e(0#(!c^#W9SJgWPZ2NEMHaAGax%;9W zxroi^J`+$Y%bH_;+mKCoDd4Z!nA9?hyf&0say*oo(jTid#d}g^RPKMZdU33m19B58 z0ofe8sEQXViCv3lAIm0!%Y!m>F{M4TA&S*vzqu#P4stn|Dt&Sr ze#?k&bsRil{Y)+3>WNLKerxMHrp-9XWy7(O-1&K6o=u2&mrMzV7Jp)a4w;!(dO_A3 zBM+?K)aI#gRdg_uzkQ}|ldyKB>+}>fAa5=yz|_$a&;`ncx!XttB#t}X2!;hY-b{;?UN9*F3 zY5uvY@gdW5ITQ-k;oKbApdOWSkDgMMckIY&Mo>i{>_%Z+rh@vqe7dH|Jd(}$nXJ4` z2)(4_Z>pm4r*FBGA65U=wc}f_1cwLv1K=%{(-d!{u50gwY#+~M=ZG%(=B}!TW55mH z#w!%P?Og#$uLMK0q52!vUaRAEu4s70e0AVwM+=`9Ryeqw~u{_qi z>0D=hU9?a6KrgmRdWm7z6Q+Eo?4v**w%R|Pehz>5eR?^jhkTDp%F`)tW$-G;XO|mq z+D_^XpR_YWPQa{S2 zL?Owy94d9h_2fAr%@=$kcBP+g?YZeyOmuWz=3hv(%P_E(l-MKIC9jR?ivtag$scv$`ysYR=Px{ylY-A$lg(p}U^Sx@)=y+XS|Yc8!cs2&08lABqfr6L zte1nk6d1ao_q!6Lrl(FUCp9$uy|NP?%QLYn=w_5csBvg-GsZbZd`B;l$tak9s`|Rv zcW_RhGe42%_Bq9uLV9_8v}7$abe@U%I(khP_@o|2CUzI`p)dEAk5_*G^T%dh!=Id9&L;P>g{ zEAwH0fsD_FZYmUVgYtI^6c8G+{e_v>F^sJ&3b@8n0)bAXobF-==0z^n%yw)OpMliQbhomY(OaUU(a`CF`wYC7QbVnAl{-+Ic> z9PSs%rLQAuMC{xJsk58BRrH7_T~y7J>sFfLtn7&(LSL3JIlAKfN&{iaHEHFJcq?z! zJqhgYFT>MdQUy2nn=(=N6W}!HPAM{0E6i^|GJXtXvdRc_#D6!ltRrrQ zZxh#S1sQNTCodHh=VCsy?k*vq<`FX5wC(Ymy}<#2ot{+-=SMd6m{pq$CJF!P>9zOw zy2p}@N?fqjY*}G3PGj#9MnO<*nJwgvoudpMU7_smmPwgO-dh`=dqG znc1t7rYd#Hxer41xX z<)rkkBTkIWW$7jNMoO?5x;Z8E;N~YXr4)_3>_%y(o1~`UfWK~q+h}N^{H6sqt(%#t zt$p=hkf}wV1nU_$ql0Sjr_kl+1yKfnk#+C4C=>9zhQcq`%Z?OQ1JPG7qml^CnIGp2 zmW4L)$jN#|-|SAwT}c=LG1GjQsDQQ8b`TIr&baVE`?8yvttY6!5g6YO%#*u_?{^*y zJ&mW~=U*R4R;xk{W46>@J^XeHEMhqVdfAg7hcm@T(6#?%5B=ZueEQ27=C83R8hf;! zwD<_d>1Zr?{c>=+z~5N65S}9bMHSiDM}{SK{ufuqUf#=ev^s=eWq|DCZ4 z9H|YE=Uzvn22p3qGFv&nBuwu65!)9U;pS&Fm5yUnYu=u)5$C4YGlf>tkwKE$AXcBq z-OfK74gq3HHE7HJ3`+fLaG{R^L!BzN)FR5V2>+yiDDV#j{(nq?$D^YSH+&5Zajh*; zdz<$5loz4KOl?Db58VJgbigB+N3gJuk&)pM;b0#lJcj-UfWyFydyF-XPEMhc%Pyv@ z1~yJetgeB_rexz#HS&vJqjGTculgt|F7e`}p;G|RIe!9&Gf=W%a{Z9{nTbnYXV(S- zE*JO10ss*P27n|22*TxEcN8XUAWZ*P^0Ts9{4>FnlsWz-6~h<3Ax!@x3rtBxb_|ty z_qNYToDRDP(NRTePSoYhuu|`>wHfV(4_6J=Q9I#0m-ru){uw;t@nv++;HzafuS zDTN<9OzLSe7hq}%R`tbG1)ZqhlPDLL-QOj^)O6#2Cg{`Z8-FPP`rN-|fmZNqaX%}C zKK5JsqZxnA2(9anD*nj(TS3qU{#ytBt^Pln`?n4K`TW1S^Y4`SS=Rr${y%8+v&X+> zgp%~HefjnGKZy3%w*Gtle~ii>rTjwFKMMMF)c#t~A4L0&R{s-3|M$`RjnDpzcK?>^ zH%k7>mj6bTUwP^`3jE0}zh?Olw(=W{6zjea-8^p1zrz~w>biRXtVirMEHZxmeCgz& zKYkDS@_NH*sRQwNrjq-y^Q_sgW z>%s(5v*rZ@;2lgK8dGHR*7smGy@&u)&s&mM< zHm^Q~7Z~IO!{|@8go!`n;bwJ-`Q}Qdg>D@USOl{5TaHB%Rr2Bqau!q&s^4zIP-O)FHC+Y}H)uJTdDxizMfRr~QHt$rYj3G?YDzLEQ94 zx9aP7{0Ii%Cynqn<4oa}Pq5PB_|8V;W9j}NFkoxrkzJr4^u9Uux52g~X>Aq_=3AK@ zyDA@Pw$MXDcQO}u+y+x`&2$|!FVh>n)VMqB1Gc*ZgcZCgQ^umX4#N$^d8co5lR;tB zPFnPfPgWeTpB|OSL6cGoMz(*%#XEfYW%i^kigvrEq@G$zMJVRdlIy z&c#^SCa?~5kl-W7J{;dnUS03?gvo(@Adtc+=RAp zs>|CCXXBK&YhE$K+cjEw8^u`n(3=ueNs-TVR_PdWMp$Mo>?Yh50M2k_BohSXolWA| zqj8LCl1)ZvlUMs=zo0nCPJykuHa@GXji_>Kt|``r)N^Il;}<9E;M$BC&!8$G0_SyJ zByz5ThJ8ZdbE9=i%mz!yshucOoE#`qHg6?1DA0n6D6D$<&U{th9b;=7XL9bbrE2;qDmXP|_nGX8Tn?sJr2O?#?!q!U1X~XyF z9Ys;k3SbeZ6?sv#^WI0vMt0Pff0xmeHMmw2mo>rXNKY!9SE|KjR0a_m zL*q6NYsNus9oLcmI-$19`i z;6BZ_B|gsf`v^c;^t)Amo%`zWMMqO+j(lgTx6y`Q&lySMWtHYJRW{Ei@{_zbIVgD+D10iY`@@a8VCOOd)Y(YxV*{41>=+Dt{; zQRia>0aj7oi?A}*>zLkh->;zFy#C;!IEY<5+d;yKkNxK#BRzN3`%%WhZSE5Ac2N)I zX}S9&Dr85PT^^n|m**JgDV=Y#&TRi!A?ABW`f$PY;&}%A#U!hIKBZ(P&iU%@19aVB zwK)IIeE&dE$~$^4Yojv9GQFHK$Kr}4a!j;w((1UO9}9I$fb@cDKS!>Se}~%SHI=H; zPLzU39v864(#=Cmu`HyrIA(t9L!TFz8S4D@X1?a-vQk(dhnB5-UjW#)<^g)nObmGIp&sBS`>Oh%(@ z%d)bB-p3+@7VsvZNJPr0*KhSsHr1n$qXy7zFs~poTzfq&e1sjnjfUXght=xEhwL26o(my}2Jj(nWy<5mv!|gj8f%@2J$juFTV( zKVODen}7DCuE??7Nv?n0@XuHOP~sn+_-88oe`Qf9x1A2o?8YDrK$IBx^7@;vS8utR zvHC#q#y{_WXz&jY{J)C_lqo}P5PUDm4tz0l<^-XVR>MX6w8Pb#4*0IOXG60h-M(Iz ziT58jPukAfTkp$4KfSiRhdpcSSaskfcA(0FX7Jv4gyu~wGomks9iK_11$@ckjg02@ zMNbX)Wp^e#lLPE|yaU--i=40FvB!$%;(U-pUm59f@j-$p^wQ;&^<-X@v0j0F&rc`i zC>%|TpF#j0Pft`43)tU-5aFnd#=6NK+n%>p)pRJlVp

Nz$H3e1iM<|W+7RwPGN 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'*oO%|KU{0gJ5zZQN-X6u!f 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
5>4pN8XnLB{iF$gk)@w2g3VSN|Hz@_oqJv=X zo+e39i230><@3Yzr<96;iN?LE9$%dj-J3MvxAgV`-%f5SZ2K%`I$n)*vbP<00PY)g z49H8w7iNOXpu*^CdJ<$%vYgOU5r~*sy^6O?3`CwD=L6=q)wf7zRRlh|Mc_&6EPWSV zI3JK3^cEjoDgQ-fqSDI1y?>qBIVEBE-Zt~XdobB$EblgD?j%0{AlTL{6P-nhPBpBo zx45;}S)$0_*9qYj2^DOBi9NtCLbdnnWCMEW3w)}Ng{`qtLKaYrYj*Ldb2)KQd3%2f zR^_l?TqN(E9QH6^xX$E1UZgX#YG#bFQlgRi7EX5BY^S4>c+9zitxPJwF0ZEjfLp~I zDorqPVTqCvV$vPboH!Bx4f;LNdA6k3`7=Emg$BuSKG$|{+xbF?oT9$d29PYP(he}& zM}G9&T_WaH;NlRbdgx^Y9J75v@==RIVToUkijaH?oD%9U+9dE|SVX|tN|h9SUDkl9 zcTTLjekD}IiNZ89t_-yyE2zpQYe1B1PeSIky!ai`0m&Po2R@M^lSM4ac^8LSA@Xxl zipIXG`!5@I4Pz=4_E#f@bO^bDiNl)eQ+ZITuWD|!!xe5*_NgsMCChH=@pQkU01=Nj z&9d&fR-nX;s1fKLn4_hZV+VL?oM5MQeTvc|O0Li*OGXeuk_8PH(WQyhHQHOH7Zp!& zNV5^)y9=BFBHpLhMF(+$J`=OdNKW-yeg&qzDF^$G@Tn^lPx?E{`!B5|#!1ccMIlv1 zpkzx!T+&rGivq3G+E^PMp@v8W&HFSP=>LTtrk>*aG0hX5<7?u_V)ja%qDMuq!x+0~ zx-5Oo@C6zfzYIzstbN>X`M;2`bymEKI%#k9PEPOv9~bZx=cU6lBO`1EQg1pJPI))$ zCDt<<%4k-jK+J@&Z_2A}JMn|9{4)rwni4~vdOS(6N>!g1n`SeN&a5E&ZWeLKP@Vd$ za>izuB&t)i*k0%kV0;L}sLi?`B0Ux3x6y$~#@R*~mkXk!iTLt;6y7P&b4tA)O8KX!&RFZDB6LM@ig=eI?@Nb<+A^GX09sL2 zY`fQQoPi!!o2R84!c}yhu$5>%=`XVb zki#$*TzDVaQ;%n!^OymFa2IY-7o#GhRNrZ2u*I|6$jA8yklS{EDt`Hm1d;3a&^D$o zjr5Zj$)^dJLE8kqNiPSl9@4Q(b|r`rXpT==woQRv%$z6XQ(;t&ksc!e8@QJGXkX1= zS&l*Wds4iev{M->*^gi{0h+#sM{t!huD$dkd%Vr?InsG*b~aw5JbW%CS0S@eVg6qA zZxr$gQ{BJljMU*3*gll%-U`$Y4O1>QcH(u#Mse=xbT7pcm5ZZ@C6@MQq;nFt%}4ia zHi>w}=j@H3*r8fM$9Dh>>Sj}jf%M@LDTFXPDqp)7Bv=lf!uTB%L>^~&Zsnlg7?p&) z9-*lHl41?7#t>aLBBSJJ>Ax>=BZYl#kp9Lo*bd+s0{9Bw;HYFX_VjxE-Y#ktb;-s^ z!_h%)0=zET-d*cPM!zRZ9f*XLgj(U`Dz5m?9smovU0E^tCQYV?v(r>2I7Su%&0U72 z0=quJ3vqheFZf&Pv#m8<8VVvd2Y9pH^jxTDS|Pv*z(wX}>ryT_4OZHRRO~>|iRiS( z?yMnGg8@fN0lVIcVo;mJ_$@MUPC{dUI;CCPK74DiTJz)69l#2g0d*AJXio2ye{3fT zkiLIz3U|Rlh=$;dkq=!;taykm;D=<-kL3vC-5*^w!xOC@CXF}5s{*Lf=Z4*0KMFQq zEXQ-@K|-8M#9aTM!wfD9OJgV@KGPr z^r~9LF(d1-J$35AtozP|dB<5|^V+3jQ#Vo^bFu(-bO%2n-Hcl!p&DxNxhh+7l|P{w zStBmx*fbW~^G(g3K=H7hYxq0D{<`ij(FRj@V0^U1%GZVa24|3_d@)sJxN7vG_yL+n zMc17}78v53@ipnYk)z550r+g*!YqiZl$5tdYZQ<5um#rpT0?IQrZAmHg?;Y>PlJjW z*g{W2eg5nyh^IA*sCS%YuLt(i+1Gc$yxt~oEvm!3A}i+d8Sk`>g~z7S7bExjkwUEc zY(Sa1h%|9A06IEhANmbQy!o8@XUS*%2~iu+^w-t&bMCb}SB3J+8bpZ7TLD zh->B@7No9Tnv=L7+2int5-}oNJw*YQZi|daaEKe{K|2cr() zV|g&jE?*R-B{Kt~Vc8WzIs~#Yt`^j{=&N2;Pj9=oXL^7lqa1Xx`qIzYeJ=N}?lK>I zbCGGuL>eeM)qb!yF4M$L=SFVad{R4i*ecJDTdn?1@Njt+xmtyORZoQd6DcsZv~|tz zz?5^15^!FS!o>M~Jk9xH1ZTe)T_tO)16DX>ibugTGY_I!y%0vXOa zOy>WT?Po>0^zI&vGD+v=KU%mKOng_)yXZq3CY45A-(hdUj_b)`p8YRdY$N$0y}4Z3 zD0lUd{RyD7Y+Lf1&fab972r3{^qzTcDUuk-FkW>M4{ck4=u5ttZBotEqvd{3IH@e* z?NsI@I#ujZP9YJM1zgpcKXEx}=c>cuq+qA$oSdUqeHlQ^P@hgh9aj@b>@hjoy}P+0 zFhUe?=+Hou%4+6{+@L~5n%G;{Jc0r@|EVT*#LemyPgtzOx;muOCVg33Er_OBz@0VvUX9)7n7r7V=K#{Yec|JnizF>bLSDMEEpbL}hq z_bC_s&sTIzPJE|}|IGY*kBjqm#x!rLnQJDmSRgC*a~f=;)h zN?`y)Gs%OsXMaf(}7)*Pv z_}bFJXFCcYN}ia=Y~w9Flq4ZmNV}WIn>`c05trdui<%Q17rV7hQ%`U28}Ad@3#LS+ zMRq^l5aSys&0m+q9S=39Ayoz+ck^vMu!hcYgTX-u#9lybE{T}yAO-NFwl^FT{4}DZ zPv`Ilr`g19mV znd{DPK_SAb8{D9jn(M7ExSY|(S0!ZHK6-m)gp-#PLaBYwPc3InSd6yHAG ztbFJky!VJ}E#kf?5${7~W~JCl!0MV7@_EX={Bb$ZW^}LDW3rIUQl<;8;HO+{$7zd3 zqDuotxw3CgQSC^rYc2sLbMj;dT9~zpKEr!Lvhc3>)l|zW_ldY$LLWAty1Nivns{I~I_zZ=ti+BHdw<|7a0%F7Gb_a@azI+f?`;Elvu3XRv=dw$6jLACcXVzL(3+0G)#zOa4-x$P_nM0&f(gwe*|e{1iTwa6)cAlu(!WY(_N6>m4Y+Uig)tZouNe%3z9q3maURh~wI@INv4DMD z6Ea%j1w3aC7BqC)IOyYwu}kS_47f~ollZrpT~-}Lqqu|>o_TL%3|QObNEP^4WJwjW zXm!pi77qoxh7~@Lo6indI=Cl26c4RS3~!RYHB-2ZrQ3?U`pHK6=kA<&Md#D_K{O5c zryon`qsN!+ECd;qC~`1oNy(>m>aXMa%i5yO^Hs4j--+D6{@UVv#c}9i<@8)DlAQm) zupF&+qtn8F%@r;6AFF5#C?)VXvIy1OuQe_LjL-_xm%a*+BLKnYTkAL{r ze}obI8;4$`PL5(*H&h%Os?y`od!E;?rQHe8i*IzE)~?>Jz#mHY`6#YGfZPED5}%)S z-L!PnmFRq<8dgYQjlggIX#HbOe&FN>HT>WZKe*-(+3;^EFWng< [!NOTE] +> +> If using Docker then remember to bind this directory, for example as `/home/username/containers/filebrowser/branding:/branding` + +For custom icons to be recognized you need to create `img` and `img/icons` directories and place the svg in the `branding/img` directory: + +``` +- filebrowser + - branding + - img + - icons + - logo.svg + - filebrowser.db +``` + +To replace the favicon you need to place this in the `img/icons` directory but also note that some of the other PNG icon types will be required too (see the default logotypes link above) as the browser will normally use the highest resolution option available (at a minimum the 16x16 and 32x32 options). You can use the [Real Favicon Generator](https://realfavicongenerator.net/) to generate these for you from your base image. + +The icons are cached, to make the new ones appear more quickly open developer tools in your browser, then click on the Application tab, then Storage and then 'Clear Site Data'. + +## Authentication Method + +Right now, there are three possible authentication methods. Each one of them has its own capabilities and specification. If you are interested in contributing with one more authentication method, please [check the guidelines](./contributing.md). + +### JSON Auth (default) + +We call it JSON Authentication but it is just the default authentication method and the one that is provided by default if you don't make any changes. It is set by default, but if you've made changes before you can revert to using JSON auth: + +```sh +filebrowser config set --auth.method=json +``` + +This method can also be extended with **reCAPTCHA** verification during login: + +```sh +filebrowser config set --auth.method=json \ + --recaptcha.key site-key \ + --recaptcha.secret private-key +``` + +By default, we use [Google's reCAPTCHA](https://developers.google.com/recaptcha/docs/display) service. If you live in China, or want to use other provider, you can change the host with the following command: + +```sh +filebrowser config set --recaptcha.host https://recaptcha.net +``` + +Where `https://recaptcha.net` is any provider you want. + + +> [!CAUTION] +> +> Note that you **always** need to set the `--auth.method` flag when changing authentication configurations and that it will completely overwrite your current settings. [This is a known issue.](https://github.com/filebrowser/filebrowser/issues/715) + +### Proxy Header + +If you have a reverse proxy you want to use to login your users, you do it via our `proxy` authentication method. To configure this method, your proxy must send an HTTP header containing the username of the logged in user: + +```sh +filebrowser config set --auth.method=proxy --auth.header=X-My-Header +``` + +Where `X-My-Header` is the HTTP header provided by your proxy with the username. + +> [!WARNING] +> +> File Browser will blindly trust the provided header. If the proxy can be bypassed, an attacker could simply attach the header and get admin access. + +### No Authentication + +We also provide a no authentication mechanism for users that want to use File Browser privately such in a home network. By setting this authentication method, the user with **id 1** will be used as the default users. Creating more users won't have any effect. + +```sh +filebrowser config set --auth.method=noauth +``` + +## Command Runner + +The command runner is a feature that enables you to execute any shell command you want before or after a certain event. Right now, these are the events: + +* Copy +* Rename +* Upload +* Delete +* Save + +Also, during the execution of the commands set for those hooks, there will be some environment variables available to help you perform your commands: + +* `FILE` with the full absolute path to the changed file. +* `SCOPE` with the path to user's scope. +* `TRIGGER` with the name of the event. +* `USERNAME` with the user's username. +* `DESTINATION` with the absolute path to the destination. Only used for **copy** and **rename.** + +At this moment, you can edit the commands via the command line interface, using the following commands \(please check the flag `--help` to know more about them\): + +```bash +filebrowser cmds add before_copy "echo $FILE" +filebrowser cmds rm before_copy 0 +filebrowser cmds ls +``` + +Or you can use the web interface to manage them via **Settings** → **Global Settings**. + + +## Shell commands + +Within Filebrowser you can toggle the shell (`< >` icon at the top right) and this will open a shell command window at the bottom of the screen. + +**By default no commands are available as the command list is empty** + +To enable commands these need to either be done on a per-user basis (including for the Admin user). + +You can do this by adding them in Settings > User Management > (edit user) > Commands or to *apply to all new users created from that point forward* they can be set in Settings > Global Settings + +> [!NOTE] +> +> If using a proxy manager then remember to enable websockets support for the Filebrowser proxy + +> [!NOTE] +> +> If using Docker and you want to add a new command that is not in the base image then you will need to build a custom Docker image using `filebrowser/filebrowser` as a base image. For example to add 7z: +> +> ```docker +> FROM filebrowser/filebrowser +> RUN sudo apt install p7zip-full +> ``` diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..0021c9fb --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,91 @@ +# Contributing + +If you're interested in contributing to this project, this is the best place to start. Before contributing to this project, please take a bit of time to read our [Code of Conduct](./code-of-conduct.md). Also, note that this project is open-source and licensed under [Apache License 2.0](../LICENSE). + +## Project Structure + +The backend side of the application is written in [Go](https://golang.org/), while the frontend (located on a subdirectory of the same name) is written in [Vue.js](https://vuejs.org/). Due to the tight coupling required by some features, basic knowledge of both Go and Vue.js is recommended. + +* Learn Go: [https://github.com/golang/go/wiki/Learn](https://github.com/golang/go/wiki/Learn) +* Learn Vue.js: [https://vuejs.org/guide/introduction.html](https://vuejs.org/guide/introduction.html) + +We encourage you to use git to manage your fork. To clone the main repository, just run: + +```bash +git clone https://github.com/filebrowser/filebrowser +``` + +## Build + +### Frontend + +We are using [Node.js](https://nodejs.org/en/) on the frontend to manage the build process. The steps to build it are: + +```bash +# From the root of the repo, go to frontend/ +cd frontend + +# Install the dependencies +pnpm install + +# Build the frontend +pnpm run build +``` + +This will install the dependencies and build the frontend so you can then embed it into the Go app. Although, if you want to play with it, you'll get bored of building it after every change you do. So, you can run the command below to watch for changes: + +```bash +pnpm run dev +``` + +### Backend + +First of all, you need to download the required dependencies. We are using the built-in `go mod` tool for dependency management. To get the modules, run: + +```bash +go mod download +``` + +The magic of File Browser is that the static assets are bundled into the final binary. For that, we use [Go embed.FS](https://golang.org/pkg/embed/). The files from `frontend/dist` will be embedded during the build process. + +To build File Browser is just like any other Go program: + +```bash +go build +``` + +To create a development build use the "dev" tag, this way the content inside the frontend folder will not be embedded in the binary but will be reloaded at every change: + +```bash +go build -tags dev +``` + +## Translations + +Translations are managed on Transifex, which is an online website where everyone can contribute and translate strings for our project. It automatically syncs with the main language file \(in English\) and,, for you to contribute, you just need to: + +1. Go to our Transifex web page: [app.transifex.com/file-browser/file-browser](https://app.transifex.com/file-browser/file-browser/) +2. Click on **Join the project** and pick your language. We'll accept you as soon as possible. If you're language is not on the list, please request it via the interface. + +Translations are automatically pushed to GitHub via an integration. + +## Authentication Provider + +To build a new authentication provider, you need to implement the [Auther interface](https://github.com/filebrowser/filebrowser/blob/master/auth/auth.go), whose method will be called on the login page after the user has submitted their login data. + +```go +// Auther is the authentication interface. +type Auther interface { + // Auth is called to authenticate a request. + Auth(r *http.Request, s *users.Storage, root string) (*users.User, error) +} +``` + +After implementing the interface you should: + +1. Add it to [`auth` directory](https://github.com/filebrowser/filebrowser/blob/master/auth). +2. Add it to the [configuration parser](https://github.com/filebrowser/filebrowser/blob/master/cmd/config.go) for the CLI. +3. Add it to the [`authBackend.Get`](https://github.com/filebrowser/filebrowser/blob/master/storage/bolt/auth.go). + +If you need to add more flags, please update the function `addConfigFlags`. + diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 00000000..5475d080 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,85 @@ +# Installation + +File Browser is a single binary and can be used as a standalone executable. Although, some might prefer to use it with [Docker](https://www.docker.com) or [Caddy](https://caddyserver.com), which is a fantastic web server that enables HTTPS by default. Its installation is quite straightforward independently on which system you want to use. + +## Quick Setup + +The quickest way for beginners to start using File Browser is by opening your terminal and executing the following commands: + +### Brew + +```sh +brew tap filebrowser/tap +brew install filebrowser +filebrowser -r /path/to/your/files +``` + +### Unix + +```sh +curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash +filebrowser -r /path/to/your/files +``` + +### Windows + +```sh +iwr -useb https://raw.githubusercontent.com/filebrowser/get/master/get.ps1 | iex +filebrowser -r /path/to/your/files +``` + +### Configuring + +Done! It will bootstrap a database in which all the configurations and users are stored. Now, you can see on your command line the address in which your instance is running. You just need to go to that URL and use the following credentials: + +* Username: `admin` +* Password: (printed in your console) + +Although this is the fastest way to bootstrap an instance, we recommend you to take a look at other possible options, by checking `config init --help` and `config set --help`, to make the installation as safe and customized as it can be. + +## Docker + +File Browser is available as two different Docker images, which can be found on [Docker Hub](https://hub.docker.com/r/filebrowser/filebrowser). + +### Alpine + +```sh +docker run \ + -v /path/to/srv:/srv \ + -v /path/to/filebrowser.db:/database.db \ + -v /path/to/.filebrowser.json:/.filebrowser.json \ + -u $(id -u):$(id -g) \ + -p 8080:80 \ + filebrowser/filebrowser +``` + +Where: + +- `/path/to/srv` contains the files root directory for File Browser +- `/path/to/filebrowser.db` is the `database.db` +- `/path/to/database` is the `.filebrowser.json` + +> [!Warning] +> +> To use this image correctly, you need to first initialize a File Browser database outside of the Docker image and then start the Docker image with the database mounted. Otherwise, Docker will create an empty directory at the mounting point and fail to start. + +### s6 overlay + +The `s6` image is based on LinuxServer and leverages the [s6-overlay](https://github.com/just-containers/s6-overlay) system for a standard, highly customizable image. It should be used as follows: + +```shell +docker run \ + -v /path/to/srv:/srv \ + -v /path/to/database:/database \ + -v /path/to/config:/config \ + -e PUID=$(id -u) \ + -e PGID=$(id -g) \ + -p 8080:80 \ + filebrowser/filebrowser:s6 +``` + +Where: + +- `/path/to/srv` contains the files root directory for File Browser +- `/path/to/config` contains a `settings.json` file +- `/path/to/database` contains a `filebrowser.db` file diff --git a/SECURITY.md b/docs/security.md similarity index 100% rename from SECURITY.md rename to docs/security.md diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index 5bbaec7f..266ad68b 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -53,7 +53,7 @@
{{ t("settings.documentation") }} @@ -192,7 +192,7 @@ {{ t("settings.documentation") }} diff --git a/transifex.yml b/transifex.yml index a3fc88f1..9e0be9e2 100644 --- a/transifex.yml +++ b/transifex.yml @@ -6,7 +6,7 @@ filters: translation_files_expression: 'frontend/src/i18n/.json' settings: - language_mapping: + language_mapping: sv_SE: sv-se cz-CS: cz_cs pt_BR: pt-br From 4aee14de44bd5ae0381b090cde8ce3f77d9054d7 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 17 Jun 2025 16:30:02 +0200 Subject: [PATCH 24/82] ci: add @hacdias as codeowner --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c6937227..827fbfd1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,4 +2,4 @@ # Unless a later match takes precedence, @o1egl will be requested for # review when someone opens a pull request. -* @o1egl \ No newline at end of file +* @o1egl @hacdias From db671c227b5735e1c2983d4881f884b7ea00737e Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 17 Jun 2025 16:34:04 +0200 Subject: [PATCH 25/82] ci: update gorelease homebrew --- .goreleaser.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 0e0a5d65..a6c26a78 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -188,15 +188,26 @@ docker_manifests: image_templates: - "filebrowser/filebrowser:v{{ .Major }}-amd64-s6" - "filebrowser/filebrowser:v{{ .Major }}-arm64-s6" -brews: + +homebrew_casks: - name: filebrowser repository: owner: filebrowser name: homebrew-tap - directory: Formula - homepage: https://filebrowser.org commit_author: name: FileBrowser Robot email: robot@filebrowser.org + homepage: https://github.com/filebrowser/filebrowser description: File Browser is a create-your-own-cloud-kind of software where you can install it on a server, direct it to a path and then access your files through a nice web interface license: "MIT" + # make the old formula conflict with the cask: + conflicts: + - formula: filebrowser + # if your app/binary isn't signed and notarized, you'll need this: + hooks: + post: + install: | + if system_command("/usr/bin/xattr", args: ["-h"]).exit_status == 0 + # replace 'foo' with the actual binary name + system_command "/usr/bin/xattr", args: ["-dr", "com.apple.quarantine", "#{staged_path}/foo"] + end From 6ebfdcceaa8242c414def0d04a69476d7d243582 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 17 Jun 2025 16:34:37 +0200 Subject: [PATCH 26/82] chore(release): 2.32.2 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ef7bda8..b919cbc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.32.2](https://github.com/filebrowser/filebrowser/compare/v2.32.1...v2.32.2) (2025-06-17) + + +### Features + +* updated for project File Browser ([#5159](https://github.com/filebrowser/filebrowser/issues/5159)) ([c34c0af](https://github.com/filebrowser/filebrowser/commit/c34c0afecf3242b16ad5d5584cd90a6ad323361c)) + ### [2.32.1](https://github.com/filebrowser/filebrowser/compare/v2.32.0...v2.32.1) (2025-06-16) From 1cc539eb8af3890ce6047b88b76757b4ab3c703b Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 17 Jun 2025 16:47:34 +0200 Subject: [PATCH 27/82] ci: fix the post install tap command --- .goreleaser.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index a6c26a78..9b6dc586 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -208,6 +208,5 @@ homebrew_casks: post: install: | if system_command("/usr/bin/xattr", args: ["-h"]).exit_status == 0 - # replace 'foo' with the actual binary name - system_command "/usr/bin/xattr", args: ["-dr", "com.apple.quarantine", "#{staged_path}/foo"] + system_command "/usr/bin/xattr", args: ["-dr", "com.apple.quarantine", "#{staged_path}/filebrowser"] end From 04a13f086fb843865a5f3389c03cb1006bb5b3a1 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 17 Jun 2025 16:47:53 +0200 Subject: [PATCH 28/82] chore(release): 2.32.3 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b919cbc4..260d2c42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.32.3](https://github.com/filebrowser/filebrowser/compare/v2.32.2...v2.32.3) (2025-06-17) + ### [2.32.2](https://github.com/filebrowser/filebrowser/compare/v2.32.1...v2.32.2) (2025-06-17) From 2e26393a022df0eaa9e08727407aba8b997aa728 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 18 Jun 2025 21:53:02 +0200 Subject: [PATCH 29/82] feat: improved docker image volumes and permissions (#5160) --- .dockerignore | 4 +- .goreleaser.yml | 69 ++++++++----------- Dockerfile | 42 +++++++---- Dockerfile.s6 | 30 ++++---- Dockerfile.s6.aarch64 | 30 ++++---- docker/alpine/init.sh | 41 +++++++++++ .../{root => common}/defaults/settings.json | 0 docker/common/healthcheck.sh | 9 +++ docker/root/etc/services.d/filebrowser/run | 3 - .../{root => s6}/custom-cont-init.d/20-config | 5 +- docker/s6/etc/services.d/filebrowser/run | 3 + docs/installation.md | 19 ++--- healthcheck.sh | 5 -- docker_config.json => settings.json | 2 +- 14 files changed, 149 insertions(+), 113 deletions(-) create mode 100755 docker/alpine/init.sh rename docker/{root => common}/defaults/settings.json (100%) create mode 100755 docker/common/healthcheck.sh delete mode 100755 docker/root/etc/services.d/filebrowser/run rename docker/{root => s6}/custom-cont-init.d/20-config (80%) create mode 100755 docker/s6/etc/services.d/filebrowser/run delete mode 100644 healthcheck.sh rename docker_config.json => settings.json (66%) diff --git a/.dockerignore b/.dockerignore index c8e50a27..94ec8d2b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,3 @@ * !docker/* -!healthcheck.sh -!docker_config.json -!filebrowser \ No newline at end of file +!filebrowser diff --git a/.goreleaser.yml b/.goreleaser.yml index 9b6dc586..debf6fa5 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -19,31 +19,30 @@ builds: - freebsd goarch: - amd64 - - 386 + - "386" - arm - arm64 - riscv64 goarm: - - 5 - - 6 - - 7 + - "5" + - "6" + - "7" ignore: - goos: darwin - goarch: 386 + goarch: "386" - goos: freebsd goarch: arm archives: - - - name_template: "{{.Os}}-{{.Arch}}{{if .Arm}}v{{.Arm}}{{end}}-{{ .ProjectName }}" - formats: [ 'tar.gz' ] + - name_template: "{{.Os}}-{{.Arch}}{{if .Arm}}v{{.Arm}}{{end}}-{{ .ProjectName }}" + formats: ["tar.gz"] format_overrides: - goos: windows - formats: [ 'zip' ] + formats: ["zip"] dockers: - - - dockerfile: Dockerfile + # Alpine docker images + - dockerfile: Dockerfile use: buildx build_flag_templates: - "--pull" @@ -59,10 +58,8 @@ dockers: - "filebrowser/filebrowser:{{ .Tag }}-amd64" - "filebrowser/filebrowser:v{{ .Major }}-amd64" extra_files: - - docker_config.json - - healthcheck.sh - - - dockerfile: Dockerfile + - docker + - dockerfile: Dockerfile use: buildx build_flag_templates: - "--pull" @@ -78,10 +75,8 @@ dockers: - "filebrowser/filebrowser:{{ .Tag }}-arm64" - "filebrowser/filebrowser:v{{ .Major }}-arm64" extra_files: - - docker_config.json - - healthcheck.sh - - - dockerfile: Dockerfile + - docker + - dockerfile: Dockerfile use: buildx build_flag_templates: - "--pull" @@ -93,15 +88,13 @@ dockers: - "--platform=linux/arm/v6" goos: linux goarch: arm - goarm: '6' + goarm: "6" image_templates: - "filebrowser/filebrowser:{{ .Tag }}-armv6" - "filebrowser/filebrowser:v{{ .Major }}-armv6" extra_files: - - docker_config.json - - healthcheck.sh - - - dockerfile: Dockerfile + - docker + - dockerfile: Dockerfile use: buildx build_flag_templates: - "--pull" @@ -113,16 +106,15 @@ dockers: - "--platform=linux/arm/v7" goos: linux goarch: arm - goarm: '7' + goarm: "7" image_templates: - "filebrowser/filebrowser:{{ .Tag }}-armv7" - "filebrowser/filebrowser:v{{ .Major }}-armv7" extra_files: - - docker_config.json - - healthcheck.sh -## s6 based docker images - - - dockerfile: Dockerfile.s6 + - docker + + ## s6-overlay docker images + - dockerfile: Dockerfile.s6 use: buildx build_flag_templates: - "--pull" @@ -138,10 +130,8 @@ dockers: - "filebrowser/filebrowser:{{ .Tag }}-amd64-s6" - "filebrowser/filebrowser:v{{ .Major }}-amd64-s6" extra_files: - - docker/root - - healthcheck.sh - - - dockerfile: Dockerfile.s6.aarch64 + - docker + - dockerfile: Dockerfile.s6.aarch64 use: buildx build_flag_templates: - "--pull" @@ -157,8 +147,8 @@ dockers: - "filebrowser/filebrowser:{{ .Tag }}-arm64-s6" - "filebrowser/filebrowser:v{{ .Major }}-arm64-s6" extra_files: - - docker/root - - healthcheck.sh + - docker + docker_manifests: - name_template: "filebrowser/filebrowser:latest" image_templates: @@ -175,7 +165,7 @@ docker_manifests: - "filebrowser/filebrowser:v{{ .Major }}-amd64" - "filebrowser/filebrowser:v{{ .Major }}-arm64" - "filebrowser/filebrowser:v{{ .Major }}-armv7" -## s6 image manifests + ## s6 image manifests - name_template: "filebrowser/filebrowser:s6" image_templates: - "filebrowser/filebrowser:{{ .Tag }}-amd64-s6" @@ -199,11 +189,6 @@ homebrew_casks: email: robot@filebrowser.org homepage: https://github.com/filebrowser/filebrowser description: File Browser is a create-your-own-cloud-kind of software where you can install it on a server, direct it to a path and then access your files through a nice web interface - license: "MIT" - # make the old formula conflict with the cask: - conflicts: - - formula: filebrowser - # if your app/binary isn't signed and notarized, you'll need this: hooks: post: install: | diff --git a/Dockerfile b/Dockerfile index 40a91a06..8ca2518d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,33 @@ -FROM alpine:latest -RUN apk --update add ca-certificates \ - mailcap \ - curl \ - jq +FROM alpine:3.22 -COPY healthcheck.sh /healthcheck.sh -RUN chmod +x /healthcheck.sh # Make the script executable +RUN apk update && \ + apk --no-cache add ca-certificates mailcap curl jq tini -HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \ - CMD /healthcheck.sh || exit 1 +# Make user and create necessary directories +ENV UID=1000 +ENV GID=1000 + +RUN addgroup -g $GID user && \ + adduser -D -u $UID -G user user && \ + mkdir -p /config /database /srv && \ + chown -R user:user /config /database /srv + +# Copy files and set permissions +COPY filebrowser /bin/filebrowser +COPY docker/common/ / +COPY docker/alpine/ / + +RUN chown -R user:user /bin/filebrowser /defaults healthcheck.sh init.sh + +# Define healthcheck script +HEALTHCHECK --start-period=2s --interval=5s --timeout=3s CMD /healthcheck.sh + +# Set the user, volumes and exposed ports +USER user + +VOLUME /srv /config /database -VOLUME /srv EXPOSE 80 -COPY docker_config.json /.filebrowser.json -COPY filebrowser /filebrowser - -ENTRYPOINT [ "/filebrowser" ] \ No newline at end of file +ENTRYPOINT [ "tini", "--", "/init.sh" ] +CMD [ "filebrowser", "--config", "/config/settings.json" ] diff --git a/Dockerfile.s6 b/Dockerfile.s6 index 609a2634..cb34cbd1 100644 --- a/Dockerfile.s6 +++ b/Dockerfile.s6 @@ -1,21 +1,23 @@ -FROM ghcr.io/linuxserver/baseimage-alpine:3.20 +FROM ghcr.io/linuxserver/baseimage-alpine:3.22 -RUN apk --update add ca-certificates \ - mailcap \ - curl \ - jq +RUN apk update && \ + apk --no-cache add ca-certificates mailcap curl jq -COPY healthcheck.sh /healthcheck.sh -RUN chmod +x /healthcheck.sh # Make the script executable +# Make user and create necessary directories +RUN mkdir -p /config /database /srv && \ + chown -R abc:abc /config /database /srv -HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \ - CMD /healthcheck.sh || exit 1 +# Copy files and set permissions +COPY filebrowser /bin/filebrowser +COPY docker/common/ / +COPY docker/s6/ / -# copy local files -COPY docker/root/ / -RUN ln -s /config/settings.json /.filebrowser.json -COPY filebrowser /usr/bin/filebrowser +RUN chown -R abc:abc /bin/filebrowser /defaults healthcheck.sh -# ports and volumes +# Define healthcheck script +HEALTHCHECK --start-period=2s --interval=5s --timeout=3s CMD /healthcheck.sh + +# Set the volumes and exposed ports VOLUME /srv /config /database + EXPOSE 80 diff --git a/Dockerfile.s6.aarch64 b/Dockerfile.s6.aarch64 index 1e62391e..0378d57c 100644 --- a/Dockerfile.s6.aarch64 +++ b/Dockerfile.s6.aarch64 @@ -1,21 +1,23 @@ -FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.20 +FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.22 -RUN apk --update add ca-certificates \ - mailcap \ - curl \ - jq +RUN apk update && \ + apk --no-cache add ca-certificates mailcap curl jq -COPY healthcheck.sh /healthcheck.sh -RUN chmod +x /healthcheck.sh # Make the script executable +# Make user and create necessary directories +RUN mkdir -p /config /database /srv && \ + chown -R abc:abc /config /database /srv -HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \ - CMD /healthcheck.sh || exit 1 +# Copy files and set permissions +COPY filebrowser /bin/filebrowser +COPY docker/common/ / +COPY docker/s6/ / -# copy local files -COPY docker/root/ / -RUN ln -s /config/settings.json /.filebrowser.json -COPY filebrowser /usr/bin/filebrowser +RUN chown -R abc:abc /bin/filebrowser /defaults healthcheck.sh -# ports and volumes +# Define healthcheck script +HEALTHCHECK --start-period=2s --interval=5s --timeout=3s CMD /healthcheck.sh + +# Set the volumes and exposed ports VOLUME /srv /config /database + EXPOSE 80 diff --git a/docker/alpine/init.sh b/docker/alpine/init.sh new file mode 100755 index 00000000..da620b09 --- /dev/null +++ b/docker/alpine/init.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +set -e + +# Backwards compatibility for old Docker image +if [ -f "/.filebrowser.json" ]; then + ln -s /.filebrowser.json /config/settings.json + + echo "" + echo "!!!!!!!!!!!!!!!!!!!!! IMPORTANT INFORMATION !!!!!!!!!!!!!!!!!!!!!" + echo "Symlinking /.filebrowser.json to /config/settings.json for backwards compatibility." + echo "" + echo "The volume mount configuration has changed in the latest release." + echo "Please rename .filebrowser.json to settings.json and mount the parent directory to /config". + echo "Read more on https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md#docker" + echo "" + echo "This workaround will be removed in a future release." + echo "" +fi + +# Backwards compatibility for old Docker image +if [ -f "/database.db" ]; then + ln -s /database.db /database/filebrowser.db + + echo "" + echo "!!!!!!!!!!!!!!!!!!!!! IMPORTANT INFORMATION !!!!!!!!!!!!!!!!!!!!!" + echo "" + echo "The volume mount configuration has changed in the latest release." + echo "Please rename database.db to filebrowser.db and mount the parent directory to /database". + echo "Read more on https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md#docker" + echo "" + echo "This workaround will be removed in a future release." + echo "" +fi + +# Ensure configuration exists +if [ ! -f "/config/settings.json" ]; then + cp -a /defaults/settings.json /config/settings.json +fi + +exec "$@" diff --git a/docker/root/defaults/settings.json b/docker/common/defaults/settings.json similarity index 100% rename from docker/root/defaults/settings.json rename to docker/common/defaults/settings.json diff --git a/docker/common/healthcheck.sh b/docker/common/healthcheck.sh new file mode 100755 index 00000000..e0ab1e65 --- /dev/null +++ b/docker/common/healthcheck.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +PORT=${FB_PORT:-$(jq -r .port /config/settings.json)} +ADDRESS=${FB_ADDRESS:-$(jq -r .address /config/settings.json)} +ADDRESS=${ADDRESS:-localhost} + +curl -f http://$ADDRESS:$PORT/health || exit 1 diff --git a/docker/root/etc/services.d/filebrowser/run b/docker/root/etc/services.d/filebrowser/run deleted file mode 100755 index 1d633757..00000000 --- a/docker/root/etc/services.d/filebrowser/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/with-contenv bash - -exec s6-setuidgid abc filebrowser -c /config/settings.json -d /database/filebrowser.db; \ No newline at end of file diff --git a/docker/root/custom-cont-init.d/20-config b/docker/s6/custom-cont-init.d/20-config similarity index 80% rename from docker/root/custom-cont-init.d/20-config rename to docker/s6/custom-cont-init.d/20-config index 80bec7cd..a4ba52cf 100755 --- a/docker/root/custom-cont-init.d/20-config +++ b/docker/s6/custom-cont-init.d/20-config @@ -1,9 +1,6 @@ #!/usr/bin/with-contenv bash -# make folders -mkdir -p /database - -# copy config +# Ensure configuration exists if [ ! -f "/config/settings.json" ]; then cp -a /defaults/settings.json /config/settings.json fi diff --git a/docker/s6/etc/services.d/filebrowser/run b/docker/s6/etc/services.d/filebrowser/run new file mode 100755 index 00000000..f4f2fb8e --- /dev/null +++ b/docker/s6/etc/services.d/filebrowser/run @@ -0,0 +1,3 @@ +#!/usr/bin/with-contenv bash + +exec s6-setuidgid abc filebrowser -c /config/settings.json; diff --git a/docs/installation.md b/docs/installation.md index 5475d080..0d3c840d 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -46,23 +46,12 @@ File Browser is available as two different Docker images, which can be found on ```sh docker run \ -v /path/to/srv:/srv \ - -v /path/to/filebrowser.db:/database.db \ - -v /path/to/.filebrowser.json:/.filebrowser.json \ - -u $(id -u):$(id -g) \ + -v /path/to/database:/database \ + -v /path/to/config:/config \ -p 8080:80 \ filebrowser/filebrowser ``` -Where: - -- `/path/to/srv` contains the files root directory for File Browser -- `/path/to/filebrowser.db` is the `database.db` -- `/path/to/database` is the `.filebrowser.json` - -> [!Warning] -> -> To use this image correctly, you need to first initialize a File Browser database outside of the Docker image and then start the Docker image with the database mounted. Otherwise, Docker will create an empty directory at the mounting point and fail to start. - ### s6 overlay The `s6` image is based on LinuxServer and leverages the [s6-overlay](https://github.com/just-containers/s6-overlay) system for a standard, highly customizable image. It should be used as follows: @@ -78,8 +67,12 @@ docker run \ filebrowser/filebrowser:s6 ``` +### Notes + Where: - `/path/to/srv` contains the files root directory for File Browser - `/path/to/config` contains a `settings.json` file - `/path/to/database` contains a `filebrowser.db` file + +Both `settings.json` and `filebrowser.db` will automatically be initialized if they don't exist. diff --git a/healthcheck.sh b/healthcheck.sh deleted file mode 100644 index b8b50039..00000000 --- a/healthcheck.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -PORT=${FB_PORT:-$(jq -r .port /.filebrowser.json)} -ADDRESS=${FB_ADDRESS:-$(jq -r .address /.filebrowser.json)} -ADDRESS=${ADDRESS:-localhost} -curl -f http://$ADDRESS:$PORT/health || exit 1 diff --git a/docker_config.json b/settings.json similarity index 66% rename from docker_config.json rename to settings.json index f0fa64a6..e787ef87 100644 --- a/docker_config.json +++ b/settings.json @@ -3,6 +3,6 @@ "baseURL": "", "address": "", "log": "stdout", - "database": "/database.db", + "database": "/database/filebrowser.db", "root": "/srv" } \ No newline at end of file From e9bb3dc243eb64b2a7da1bd17feb26bd83e06216 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 18 Jun 2025 21:58:42 +0200 Subject: [PATCH 30/82] chore(release): 2.33.0 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 260d2c42..64e3ea6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.33.0](https://github.com/filebrowser/filebrowser/compare/v2.32.3...v2.33.0) (2025-06-18) + + +### Features + +* improved docker image volumes and permissions ([#5160](https://github.com/filebrowser/filebrowser/issues/5160)) ([2e26393](https://github.com/filebrowser/filebrowser/commit/2e26393a022df0eaa9e08727407aba8b997aa728)) + ### [2.32.3](https://github.com/filebrowser/filebrowser/compare/v2.32.2...v2.32.3) (2025-06-17) ### [2.32.2](https://github.com/filebrowser/filebrowser/compare/v2.32.1...v2.32.2) (2025-06-17) From a02b2972ebde2a58806ad1377bad46e748b63166 Mon Sep 17 00:00:00 2001 From: contributor Date: Thu, 19 Jun 2025 22:57:57 +0300 Subject: [PATCH 31/82] fix: search uses ctrl+shift+f instead of hijacking browser's ctrl+f (#4638) --- frontend/src/views/files/FileListing.vue | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/files/FileListing.vue b/frontend/src/views/files/FileListing.vue index 8fa48f72..60d74169 100644 --- a/frontend/src/views/files/FileListing.vue +++ b/frontend/src/views/files/FileListing.vue @@ -511,8 +511,11 @@ const keyEvent = (event: KeyboardEvent) => { switch (event.key) { case "f": - event.preventDefault(); - layoutStore.showHover("search"); + case "F": + if (event.shiftKey) { + event.preventDefault(); + layoutStore.showHover("search"); + } break; case "c": case "x": From 33113036cd3fa950c3862c382abe45fd2086af61 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 20 Jun 2025 21:41:46 +0200 Subject: [PATCH 32/82] docs: update security.md --- docs/security.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/security.md b/docs/security.md index a36dee40..490a9bea 100644 --- a/docs/security.md +++ b/docs/security.md @@ -12,7 +12,9 @@ currently being supported with security updates. ## Reporting a Vulnerability -Vulnerabilities should be reported to filebrowser@googlegroups.com - which is a private, maintainer-only group. Maintainers will attempt to respond to/confirm reports within 2-3 days, but if you believe your report to be "critical" to user safety and security, please note as such in the subject. We have tens of thousands of users using our software, and take security vulnerabilities seriously. +Vulnerabilities with critical impact should be reported on the [Security](https://github.com/filebrowser/filebrowser/security) page of this repository, which is a private way of communicating vulnerabilities to maintainers. This project is in maintenance-only mode and it can take a while until someone gets back to you. + +If it is not a critical vulnerability, please open an issue and we will categorize it as a security issue. By giving visibility, we can get more help from the community at fixing such issues. When reporting an issue, where possible, please provide at least: @@ -21,6 +23,4 @@ When reporting an issue, where possible, please provide at least: * Steps to reproduce * Your recommended remediation(s), if any. -The FileBrowser team is a volunteer-only effort, and may reach back out for clarification. - -> Note: Please do not open public issues for security issues, as GitHub does not provide facility for private issues, and deleting the issue makes it hard to triage/respond back to the reporter. +The File Browser team is a volunteer-only effort, and may reach back out for clarification. From a493ec90ff7d7b4fdf2c054163a9262cb889a7fc Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 21 Jun 2025 08:45:53 +0200 Subject: [PATCH 33/82] docs: add more docker notes --- docs/installation.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/installation.md b/docs/installation.md index 0d3c840d..810410a9 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -52,6 +52,8 @@ docker run \ filebrowser/filebrowser ``` +The default user has PID 1000 and GID 1000. Please make sure that this user has access to the different mounted volumes. To change the user running inside the Docker image, you need to use the [`--user` flag](https://docs.docker.com/engine/containers/run/#user). + ### s6 overlay The `s6` image is based on LinuxServer and leverages the [s6-overlay](https://github.com/just-containers/s6-overlay) system for a standard, highly customizable image. It should be used as follows: From 8a14018861fe581672bbd27cdc3ae5691f70a108 Mon Sep 17 00:00:00 2001 From: Patrick Wang Date: Sat, 21 Jun 2025 15:21:17 +0800 Subject: [PATCH 34/82] fix: downloadUrl of file preview (#3728) --- frontend/src/views/files/Preview.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/files/Preview.vue b/frontend/src/views/files/Preview.vue index 4fd3d2c8..934fd238 100644 --- a/frontend/src/views/files/Preview.vue +++ b/frontend/src/views/files/Preview.vue @@ -253,7 +253,7 @@ const hasPrevious = computed(() => previousLink.value !== ""); const hasNext = computed(() => nextLink.value !== ""); const downloadUrl = computed(() => - fileStore.req ? api.getDownloadURL(fileStore.req, true) : "" + fileStore.req ? api.getDownloadURL(fileStore.req, false) : "" ); const raw = computed(() => { From cbb712484d3bdabc033acaf3b696ef4f5865813d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 21 Jun 2025 09:02:30 +0200 Subject: [PATCH 35/82] fix: remove auth query parameter from download and preview links macOS saves the download URL in the metadata of the downloaded file. This means that the downloaded file contains a metadata item with the JWT token of the user. If the user were to share this file with someone else, they would have access to their account using the JWT in the metadata during the validity of the JWT. The JWT has been removed from the URLs. Since the user is logged in, there is an authentication cookie set. A JWT in the URL is not necessary. --- frontend/src/api/files.ts | 5 ----- frontend/src/api/pub.ts | 2 +- frontend/src/api/share.ts | 2 +- frontend/src/api/utils.ts | 14 ++------------ frontend/src/views/files/Preview.vue | 2 +- 5 files changed, 5 insertions(+), 20 deletions(-) diff --git a/frontend/src/api/files.ts b/frontend/src/api/files.ts index 928f5282..0d6a09b7 100644 --- a/frontend/src/api/files.ts +++ b/frontend/src/api/files.ts @@ -75,11 +75,6 @@ export function download(format: any, ...files: string[]) { url += `algo=${format}&`; } - const authStore = useAuthStore(); - if (authStore.jwt) { - url += `auth=${authStore.jwt}&`; - } - window.open(url); } diff --git a/frontend/src/api/pub.ts b/frontend/src/api/pub.ts index 4328f64c..964cb030 100644 --- a/frontend/src/api/pub.ts +++ b/frontend/src/api/pub.ts @@ -71,5 +71,5 @@ export function getDownloadURL(res: Resource, inline = false) { ...(res.token && { token: res.token }), }; - return createURL("api/public/dl/" + res.hash + res.path, params, false); + return createURL("api/public/dl/" + res.hash + res.path, params); } diff --git a/frontend/src/api/share.ts b/frontend/src/api/share.ts index 3748da4e..af8a4ee3 100644 --- a/frontend/src/api/share.ts +++ b/frontend/src/api/share.ts @@ -41,5 +41,5 @@ export async function create( } export function getShareURL(share: Share) { - return createURL("share/" + share.hash, {}, false); + return createURL("share/" + share.hash, {}); } diff --git a/frontend/src/api/utils.ts b/frontend/src/api/utils.ts index 7008e28a..a5a64fa1 100644 --- a/frontend/src/api/utils.ts +++ b/frontend/src/api/utils.ts @@ -76,23 +76,13 @@ export function removePrefix(url: string): string { return url; } -export function createURL(endpoint: string, params = {}, auth = true): string { - const authStore = useAuthStore(); - +export function createURL(endpoint: string, searchParams = {}): string { let prefix = baseURL; if (!prefix.endsWith("/")) { prefix = prefix + "/"; } const url = new URL(prefix + encodePath(endpoint), origin); - - const searchParams: SearchParams = { - ...(auth && { auth: authStore.jwt }), - ...params, - }; - - for (const key in searchParams) { - url.searchParams.set(key, searchParams[key]); - } + url.search = new URLSearchParams(searchParams).toString(); return url.toString(); } diff --git a/frontend/src/views/files/Preview.vue b/frontend/src/views/files/Preview.vue index 934fd238..7170e3da 100644 --- a/frontend/src/views/files/Preview.vue +++ b/frontend/src/views/files/Preview.vue @@ -262,7 +262,7 @@ const raw = computed(() => { } if (isEpub.value) { - return createURL("api/raw" + fileStore.req?.path, {}, false); + return createURL("api/raw" + fileStore.req?.path, {}); } return downloadUrl.value; From 8ca080422fd154d907a3a120ef7e628e6dec6e56 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 21 Jun 2025 09:25:18 +0200 Subject: [PATCH 36/82] chore(release): 2.33.1 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e3ea6b..2e49a474 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.1](https://github.com/filebrowser/filebrowser/compare/v2.33.0...v2.33.1) (2025-06-21) + + +### Bug Fixes + +* downloadUrl of file preview ([#3728](https://github.com/filebrowser/filebrowser/issues/3728)) ([8a14018](https://github.com/filebrowser/filebrowser/commit/8a14018861fe581672bbd27cdc3ae5691f70a108)) +* remove auth query parameter from download and preview links ([cbb7124](https://github.com/filebrowser/filebrowser/commit/cbb712484d3bdabc033acaf3b696ef4f5865813d)) +* search uses ctrl+shift+f instead of hijacking browser's ctrl+f ([#4638](https://github.com/filebrowser/filebrowser/issues/4638)) ([a02b297](https://github.com/filebrowser/filebrowser/commit/a02b2972ebde2a58806ad1377bad46e748b63166)) + ## [2.33.0](https://github.com/filebrowser/filebrowser/compare/v2.32.3...v2.33.0) (2025-06-18) From 0ca8059d8dea4fe079146471ce4f24acc96021f2 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 21 Jun 2025 10:32:50 +0200 Subject: [PATCH 37/82] fix: create user dir on signup --- http/auth.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/http/auth.go b/http/auth.go index 23dc7b77..2ccfb751 100644 --- a/http/auth.go +++ b/http/auth.go @@ -157,6 +157,9 @@ var signupHandler = func(_ http.ResponseWriter, r *http.Request, d *data) (int, } user.Password = pwd + if d.settings.CreateUserDir { + user.Scope = "" + } userHome, err := d.settings.MakeUserDir(user.Username, user.Scope, d.server.Root) if err != nil { From ffb858e4ef17d59ac3be91d80cb8df8057aa812c Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 21 Jun 2025 10:37:30 +0200 Subject: [PATCH 38/82] chore(release): 2.33.2 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e49a474..8902ab46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.2](https://github.com/filebrowser/filebrowser/compare/v2.33.1...v2.33.2) (2025-06-21) + + +### Bug Fixes + +* create user dir on signup ([0ca8059](https://github.com/filebrowser/filebrowser/commit/0ca8059d8dea4fe079146471ce4f24acc96021f2)) + ### [2.33.1](https://github.com/filebrowser/filebrowser/compare/v2.33.0...v2.33.1) (2025-06-21) From 2741616473636d40b7e9f14c9906ada08d328c3c Mon Sep 17 00:00:00 2001 From: Arion2000 Date: Sun, 22 Jun 2025 12:45:21 +0200 Subject: [PATCH 39/82] fix: update search hotkey in help prompt (#5178) --- frontend/src/components/prompts/Help.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/prompts/Help.vue b/frontend/src/components/prompts/Help.vue index a5c5d138..1d99eeed 100644 --- a/frontend/src/components/prompts/Help.vue +++ b/frontend/src/components/prompts/Help.vue @@ -11,7 +11,7 @@
  • DEL - {{ $t("help.del") }}
  • ESC - {{ $t("help.esc") }}
  • CTRL + S - {{ $t("help.ctrl.s") }}
  • -
  • CTRL + F - {{ $t("help.ctrl.f") }}
  • +
  • CTRL + SHIFT + F - {{ $t("help.ctrl.f") }}
  • CTRL + Click - {{ $t("help.ctrl.click") }}
  • Click - {{ $t("help.click") }}
  • Double click - {{ $t("help.doubleClick") }}
  • From 7c0c7820efbbed2f0499353cc76ecb85d00ff7c3 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 22 Jun 2025 17:55:57 +0200 Subject: [PATCH 40/82] fix: keep command behavior in Dockerfile --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8ca2518d..0e64f120 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,5 +29,4 @@ VOLUME /srv /config /database EXPOSE 80 -ENTRYPOINT [ "tini", "--", "/init.sh" ] -CMD [ "filebrowser", "--config", "/config/settings.json" ] +ENTRYPOINT [ "tini", "--", "/init.sh", "filebrowser", "--config", "/config/settings.json" ] From dbdbbab4d7beacdc51b2ee025f1fc2ac803b8f44 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 22 Jun 2025 17:57:34 +0200 Subject: [PATCH 41/82] chore(release): 2.33.3 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8902ab46..2c8628be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.3](https://github.com/filebrowser/filebrowser/compare/v2.33.2...v2.33.3) (2025-06-22) + + +### Bug Fixes + +* keep command behavior in Dockerfile ([7c0c782](https://github.com/filebrowser/filebrowser/commit/7c0c7820efbbed2f0499353cc76ecb85d00ff7c3)) +* update search hotkey in help prompt ([#5178](https://github.com/filebrowser/filebrowser/issues/5178)) ([2741616](https://github.com/filebrowser/filebrowser/commit/2741616473636d40b7e9f14c9906ada08d328c3c)) + ### [2.33.2](https://github.com/filebrowser/filebrowser/compare/v2.33.1...v2.33.2) (2025-06-21) From f714e71a356c2301f394d651c9b6c467440508e3 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 22 Jun 2025 17:59:23 +0200 Subject: [PATCH 42/82] feat: translation updates for project File Browser (#5179) Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> --- frontend/src/i18n/de.json | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/frontend/src/i18n/de.json b/frontend/src/i18n/de.json index 97b44d94..0420c9d6 100644 --- a/frontend/src/i18n/de.json +++ b/frontend/src/i18n/de.json @@ -3,14 +3,17 @@ "cancel": "Abbrechen", "clear": "Schließen", "close": "Schließen", + "continue": "Fortfahren", "copy": "Kopieren", "copyFile": "Kopiere Datei", "copyToClipboard": "In Zwischenablage kopieren", + "copyDownloadLinkToClipboard": "Download-Link in die Zwischenablage kopieren", "create": "Neu", "delete": "Löschen", "download": "Herunterladen", "file": "Datei", "folder": "Ordner", + "fullScreen": "Vollbildmodus umschalten", "hideDotfiles": "Versteckte Dateien ausblenden", "info": "Info", "more": "mehr", @@ -21,6 +24,7 @@ "ok": "OK", "permalink": "permanenten Verweis anzeigen", "previous": "vorherige", + "preview": "Vorschau", "publish": "Veröffentlichen", "rename": "umbenennen", "replace": "Ersetzen", @@ -37,13 +41,17 @@ "toggleSidebar": "Seitenleiste anzeigen", "update": "Update", "upload": "Upload", - "openFile": "Datei öffnen" + "openFile": "Datei öffnen", + "discardChanges": "Verwerfen" }, "download": { "downloadFile": "Download Datei", "downloadFolder": "Download Ordner", "downloadSelected": "Auswahl herunterladen" }, + "upload": { + "abortUpload": "Sind Sie sicher, dass Sie den Vorgang abbrechen möchten?" + }, "errors": { "forbidden": "Sie haben keine Berechtigung dies abzurufen.", "internal": "Etwas ist schiefgelaufen.", @@ -102,6 +110,7 @@ "deleteMessageMultiple": "Sind Sie sicher, dass Sie {count} Datei(en) löschen möchten?", "deleteMessageSingle": "Sind Sie sicher, dass Sie diesen Ordner/diese Datei löschen möchten?", "deleteMessageShare": "Sind Sie sicher, dass Sie diese Freigabe löschen möchten ({path})?", + "deleteUser": "Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?", "deleteTitle": "Lösche Dateien", "displayName": "Anzeigename:", "download": "Lade Dateien", @@ -130,7 +139,9 @@ "upload": "Upload", "uploadFiles": "Upload von {files} Dateien...", "uploadMessage": "Wählen Sie eine Upload-Methode", - "optionalPassword": "Optionales Passwort" + "optionalPassword": "Optionales Passwort", + "resolution": "Auflösung", + "discardEditorChanges": "Möchten Sie die vorgenommenen Änderungen wirklich verwerfen?" }, "search": { "images": "Bilder", @@ -163,6 +174,9 @@ "tusUploadsHelp": "File Browser unterstützt das Hochladen von gestückelten Dateien und ermöglicht so einen effizienten, zuverlässigen, fortsetzbaren und gestückelten Datei-Upload auch in unzuverlässigen Netzwerken.", "tusUploadsChunkSize": "Gibt die maximale Größe pro Anfrage an (direkte Uploads werden für kleinere Uploads verwendet). Bitte geben Sie eine Byte-Angabe oder eine Zeichenfolge wie 10 MB, 1 GB usw. an", "tusUploadsRetryCount": "Anzahl der Wiederholungsversuche, wenn das Hochladen eines Stückes fehlschlägt.", + "userHomeBasePath": "Basispfad für Benutzer-Home-Verzeichnisse", + "userScopeGenerationPlaceholder": "Scope wird automatisch generiert", + "createUserHomeDirectory": "Benutzer-Home-Verzeichnis erstellen", "customStylesheet": "Individuelles Stylesheet", "defaultUserDescription": "Das sind die Standardeinstellung für Benutzer", "disableExternalLinks": "Externe Links deaktivieren (außer Dokumentation)", @@ -209,6 +223,7 @@ "shareDeleted": "Freigabe gelöscht!", "singleClick": "Einfacher Klick zum Öffnen von Dateien und Ordnern", "themes": { + "default": "Systemstandard", "dark": "Dunkel", "light": "Hell", "title": "Erscheinungsbild" From ad864a97e946dfc3306c52e55a4abfff9cbe3ef7 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 22 Jun 2025 17:59:45 +0200 Subject: [PATCH 43/82] chore(release): 2.33.4 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c8628be..648a7a83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.4](https://github.com/filebrowser/filebrowser/compare/v2.33.3...v2.33.4) (2025-06-22) + + +### Features + +* translation updates for project File Browser ([#5179](https://github.com/filebrowser/filebrowser/issues/5179)) ([f714e71](https://github.com/filebrowser/filebrowser/commit/f714e71a356c2301f394d651c9b6c467440508e3)) + ### [2.33.3](https://github.com/filebrowser/filebrowser/compare/v2.33.2...v2.33.3) (2025-06-22) From 0268506f80d33d2d31e38055e12530241d27a11b Mon Sep 17 00:00:00 2001 From: Adam <7889445+DMNerd@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:02:01 +0200 Subject: [PATCH 44/82] fix: actually register the czech language (#5189) --- frontend/src/components/settings/Languages.vue | 1 + frontend/src/i18n/{cz_cs.json => cs.json} | 0 frontend/src/i18n/index.ts | 1 + 3 files changed, 2 insertions(+) rename frontend/src/i18n/{cz_cs.json => cs.json} (100%) diff --git a/frontend/src/components/settings/Languages.vue b/frontend/src/components/settings/Languages.vue index 00129a28..fd6052d6 100644 --- a/frontend/src/components/settings/Languages.vue +++ b/frontend/src/components/settings/Languages.vue @@ -19,6 +19,7 @@ export default { hu: "Magyar", ar: "العربية", ca: "Català", + cs: "Čeština", de: "Deutsch", el: "Ελληνικά", en: "English", diff --git a/frontend/src/i18n/cz_cs.json b/frontend/src/i18n/cs.json similarity index 100% rename from frontend/src/i18n/cz_cs.json rename to frontend/src/i18n/cs.json diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index 9fcbc2c4..b0550702 100644 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -26,6 +26,7 @@ import("dayjs/locale/uk"); import("dayjs/locale/vi"); import("dayjs/locale/zh-cn"); import("dayjs/locale/zh-tw"); +import("dayjs/locale/cs"); // All i18n resources specified in the plugin `include` option can be loaded // at once using the import syntax From 6c29fabdc85b2d9f0f7838fa19b57ead007bbbb7 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 24 Jun 2025 17:05:12 +0200 Subject: [PATCH 45/82] chore: remove cz_CS from transifex.yaml --- transifex.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/transifex.yml b/transifex.yml index 9e0be9e2..8a12912b 100644 --- a/transifex.yml +++ b/transifex.yml @@ -8,7 +8,6 @@ filters: settings: language_mapping: sv_SE: sv-se - cz-CS: cz_cs pt_BR: pt-br zh_CN: zh-cn zh_HK: zh-hk From f33076462a133935ca97fb6c7345303fe350e167 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:08:28 +0200 Subject: [PATCH 46/82] feat: update languages for project File Browser (#5190) Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> --- frontend/src/i18n/cs.json | 1 + frontend/src/i18n/vi.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/i18n/cs.json b/frontend/src/i18n/cs.json index 1147f38c..c1053182 100644 --- a/frontend/src/i18n/cs.json +++ b/frontend/src/i18n/cs.json @@ -24,6 +24,7 @@ "ok": "OK", "permalink": "Získat trvalý odkaz", "previous": "Předchozí", + "preview": "Preview", "publish": "Publikovat", "rename": "Přejmenovat", "replace": "Nahradit", diff --git a/frontend/src/i18n/vi.json b/frontend/src/i18n/vi.json index 5dea8650..896b4de6 100644 --- a/frontend/src/i18n/vi.json +++ b/frontend/src/i18n/vi.json @@ -262,4 +262,4 @@ "seconds": "Giây", "unit": "Đơn vị" } -} \ No newline at end of file +} From 506fc0857753d44219c100ea0286c9d7192fad1f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 24 Jun 2025 17:11:40 +0200 Subject: [PATCH 47/82] chore(release): 2.33.5 --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 648a7a83..6b944ba4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.5](https://github.com/filebrowser/filebrowser/compare/v2.33.4...v2.33.5) (2025-06-24) + + +### Features + +* update languages for project File Browser ([#5190](https://github.com/filebrowser/filebrowser/issues/5190)) ([f330764](https://github.com/filebrowser/filebrowser/commit/f33076462a133935ca97fb6c7345303fe350e167)) + + +### Bug Fixes + +* actually register the czech language ([#5189](https://github.com/filebrowser/filebrowser/issues/5189)) ([0268506](https://github.com/filebrowser/filebrowser/commit/0268506f80d33d2d31e38055e12530241d27a11b)) + ### [2.33.4](https://github.com/filebrowser/filebrowser/compare/v2.33.3...v2.33.4) (2025-06-22) From 23bd8f67155081d707d4799393d3b1e2bebeaa34 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 24 Jun 2025 21:43:44 +0200 Subject: [PATCH 48/82] fix: remove incorrect default for password flag --- cmd/root.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/root.go b/cmd/root.go index 125f443d..fbd27541 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -48,7 +48,7 @@ func init() { persistent.StringP("database", "d", "./filebrowser.db", "database path") flags.Bool("noauth", false, "use the noauth auther when using quick setup") flags.String("username", "admin", "username for the first user when using quick config") - flags.String("password", "", "hashed password for the first user when using quick config (default \"admin\")") + flags.String("password", "", "hashed password for the first user when using quick config") addServerFlags(flags) } From f46641b038b35340bd0fd90715a67fd6dbfba943 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 24 Jun 2025 22:00:57 +0200 Subject: [PATCH 49/82] chore(release): 2.33.6 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b944ba4..7f46d647 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.6](https://github.com/filebrowser/filebrowser/compare/v2.33.5...v2.33.6) (2025-06-24) + + +### Bug Fixes + +* remove incorrect default for password flag ([23bd8f6](https://github.com/filebrowser/filebrowser/commit/23bd8f67155081d707d4799393d3b1e2bebeaa34)) + ### [2.33.5](https://github.com/filebrowser/filebrowser/compare/v2.33.4...v2.33.5) (2025-06-24) From 221451a5179c8f139819a315b80d0ecb0e7220c3 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 17:24:06 +0200 Subject: [PATCH 50/82] fix: correctly parse negative boolean flags --- cmd/root.go | 86 ++++++++++++++++++++++++++++++++++---------------- cmd/upgrade.go | 2 +- cmd/utils.go | 2 +- 3 files changed, 60 insertions(+), 30 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index fbd27541..3ad52f3f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -201,42 +201,42 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { server, err := st.Settings.GetServer() checkErr(err) - if val, set := getParamB(flags, "root"); set { + if val, set := getStringParamB(flags, "root"); set { server.Root = val } - if val, set := getParamB(flags, "baseurl"); set { + if val, set := getStringParamB(flags, "baseurl"); set { server.BaseURL = val } - if val, set := getParamB(flags, "log"); set { + if val, set := getStringParamB(flags, "log"); set { server.Log = val } isSocketSet := false isAddrSet := false - if val, set := getParamB(flags, "address"); set { + if val, set := getStringParamB(flags, "address"); set { server.Address = val isAddrSet = isAddrSet || set } - if val, set := getParamB(flags, "port"); set { + if val, set := getStringParamB(flags, "port"); set { server.Port = val isAddrSet = isAddrSet || set } - if val, set := getParamB(flags, "key"); set { + if val, set := getStringParamB(flags, "key"); set { server.TLSKey = val isAddrSet = isAddrSet || set } - if val, set := getParamB(flags, "cert"); set { + if val, set := getStringParamB(flags, "cert"); set { server.TLSCert = val isAddrSet = isAddrSet || set } - if val, set := getParamB(flags, "socket"); set { + if val, set := getStringParamB(flags, "socket"); set { server.Socket = val isSocketSet = isSocketSet || set } @@ -250,33 +250,62 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { server.Socket = "" } - _, disableThumbnails := getParamB(flags, "disable-thumbnails") + disableThumbnails := getBoolParam(flags, "disable-thumbnails") server.EnableThumbnails = !disableThumbnails - _, disablePreviewResize := getParamB(flags, "disable-preview-resize") + disablePreviewResize := getBoolParam(flags, "disable-preview-resize") server.ResizePreview = !disablePreviewResize - _, disableTypeDetectionByHeader := getParamB(flags, "disable-type-detection-by-header") + disableTypeDetectionByHeader := getBoolParam(flags, "disable-type-detection-by-header") server.TypeDetectionByHeader = !disableTypeDetectionByHeader - _, disableExec := getParamB(flags, "disable-exec") + disableExec := getBoolParam(flags, "disable-exec") server.EnableExec = !disableExec - if val, set := getParamB(flags, "token-expiration-time"); set { + if val, set := getStringParamB(flags, "token-expiration-time"); set { server.TokenExpirationTime = val } return server } -// getParamB returns a parameter as a string and a boolean to tell if it is different from the default +// getStringParamB returns a parameter as a string and a boolean to tell if it is different from the default // // NOTE: we could simply bind the flags to viper and use IsSet. // Although there is a bug on Viper that always returns true on IsSet // if a flag is binded. Our alternative way is to manually check // the flag and then the value from env/config/gotten by viper. // https://github.com/spf13/viper/pull/331 -func getParamB(flags *pflag.FlagSet, key string) (string, bool) { +func getBoolParamB(flags *pflag.FlagSet, key string) (bool, bool) { + value, _ := flags.GetBool(key) + + // If set on Flags, use it. + if flags.Changed(key) { + return value, true + } + + // If set through viper (env, config), return it. + if v.IsSet(key) { + return v.GetBool(key), true + } + + // Otherwise use default value on flags. + return value, false +} + +func getBoolParam(flags *pflag.FlagSet, key string) bool { + val, _ := getBoolParamB(flags, key) + return val +} + +// getStringParamB returns a parameter as a string and a boolean to tell if it is different from the default +// +// NOTE: we could simply bind the flags to viper and use IsSet. +// Although there is a bug on Viper that always returns true on IsSet +// if a flag is binded. Our alternative way is to manually check +// the flag and then the value from env/config/gotten by viper. +// https://github.com/spf13/viper/pull/331 +func getStringParamB(flags *pflag.FlagSet, key string) (string, bool) { value, _ := flags.GetString(key) // If set on Flags, use it. @@ -293,8 +322,8 @@ func getParamB(flags *pflag.FlagSet, key string) (string, bool) { return value, false } -func getParam(flags *pflag.FlagSet, key string) string { - val, _ := getParamB(flags, key) +func getStringParam(flags *pflag.FlagSet, key string) string { + val, _ := getStringParamB(flags, key) return val } @@ -349,7 +378,7 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { } var err error - if _, noauth := getParamB(flags, "noauth"); noauth { + if _, noauth := getStringParamB(flags, "noauth"); noauth { set.AuthMethod = auth.MethodNoAuth err = d.store.Auth.Save(&auth.NoAuth{}) } else { @@ -362,27 +391,27 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { checkErr(err) ser := &settings.Server{ - BaseURL: getParam(flags, "baseurl"), - Port: getParam(flags, "port"), - Log: getParam(flags, "log"), - TLSKey: getParam(flags, "key"), - TLSCert: getParam(flags, "cert"), - Address: getParam(flags, "address"), - Root: getParam(flags, "root"), + BaseURL: getStringParam(flags, "baseurl"), + Port: getStringParam(flags, "port"), + Log: getStringParam(flags, "log"), + TLSKey: getStringParam(flags, "key"), + TLSCert: getStringParam(flags, "cert"), + Address: getStringParam(flags, "address"), + Root: getStringParam(flags, "root"), } err = d.store.Settings.SaveServer(ser) checkErr(err) - username := getParam(flags, "username") - password := getParam(flags, "password") + username := getStringParam(flags, "username") + password := getStringParam(flags, "password") if password == "" { var pwd string pwd, err = users.RandomPwd() checkErr(err) - log.Println("Generated random admin password for quick setup:", pwd) + log.Println("Randomly generated password for user 'admin':", pwd) password, err = users.HashPwd(pwd) checkErr(err) @@ -420,6 +449,7 @@ func initConfig() { v.SetEnvPrefix("FB") v.AutomaticEnv() v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) + v.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) if err := v.ReadInConfig(); err != nil { var configParseError v.ConfigParseError diff --git a/cmd/upgrade.go b/cmd/upgrade.go index 83a0729c..f6966e2e 100644 --- a/cmd/upgrade.go +++ b/cmd/upgrade.go @@ -25,7 +25,7 @@ this version.`, flags := cmd.Flags() oldDB := mustGetString(flags, "old.database") oldConf := mustGetString(flags, "old.config") - err := importer.Import(oldDB, oldConf, getParam(flags, "database")) + err := importer.Import(oldDB, oldConf, getStringParam(flags, "database")) checkErr(err) }, } diff --git a/cmd/utils.go b/cmd/utils.go index 78f48d13..49cc2d2f 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -86,7 +86,7 @@ func python(fn pythonFunc, cfg pythonConfig) cobraFunc { return func(cmd *cobra.Command, args []string) { data := pythonData{hadDB: true} - path := getParam(cmd.Flags(), "database") + path := getStringParam(cmd.Flags(), "database") absPath, err := filepath.Abs(path) if err != nil { panic(err) From e74c95886226c0ee429af1860eed21dd1f8601aa Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 17:34:00 +0200 Subject: [PATCH 51/82] fix: linting issues --- cmd/root.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 3ad52f3f..58179daf 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -269,15 +269,15 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { return server } -// getStringParamB returns a parameter as a string and a boolean to tell if it is different from the default +// getBoolParamB returns a parameter as a string and a boolean to tell if it is different from the default // // NOTE: we could simply bind the flags to viper and use IsSet. // Although there is a bug on Viper that always returns true on IsSet // if a flag is binded. Our alternative way is to manually check // the flag and then the value from env/config/gotten by viper. // https://github.com/spf13/viper/pull/331 -func getBoolParamB(flags *pflag.FlagSet, key string) (bool, bool) { - value, _ := flags.GetBool(key) +func getBoolParamB(flags *pflag.FlagSet, key string) (value bool, ok bool) { + value, _ = flags.GetBool(key) // If set on Flags, use it. if flags.Changed(key) { From f19943a42e8e092e811dffbe9f4623dac36f1f0d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 17:35:15 +0200 Subject: [PATCH 52/82] Merge commit from fork --- frontend/package.json | 1 + frontend/pnpm-lock.yaml | 30 ++++++++++++++++++++++------- frontend/src/views/files/Editor.vue | 3 ++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 78951c4b..e09558c7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,6 +24,7 @@ "ace-builds": "^1.37.5", "core-js": "^3.40.0", "dayjs": "^1.11.10", + "dompurify": "^3.2.6", "epubjs": "^0.3.93", "filesize": "^10.1.1", "js-base64": "^3.7.7", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index d9d19749..66142514 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: dayjs: specifier: ^1.11.10 version: 1.11.13 + dompurify: + specifier: ^3.2.6 + version: 3.2.6 epubjs: specifier: ^0.3.93 version: 0.3.93 @@ -946,8 +949,8 @@ packages: resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==} engines: {node: '>= 16'} - '@intlify/shared@11.1.3': - resolution: {integrity: sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==} + '@intlify/shared@11.1.7': + resolution: {integrity: sha512-4yZeMt2Aa/7n5Ehy4KalUlvt3iRLcg1tq9IBVfOgkyWFArN4oygn6WxgGIFibP3svpaH8DarbNaottq+p0gUZQ==} engines: {node: '>= 16'} '@intlify/shared@12.0.0-alpha.2': @@ -1174,6 +1177,9 @@ packages: '@types/node@22.10.10': resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -1602,6 +1608,9 @@ packages: dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dompurify@3.2.6: + resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} + electron-to-chromium@1.5.67: resolution: {integrity: sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==} @@ -3628,7 +3637,7 @@ snapshots: '@intlify/shared@11.1.2': {} - '@intlify/shared@11.1.3': {} + '@intlify/shared@11.1.7': {} '@intlify/shared@12.0.0-alpha.2': {} @@ -3636,8 +3645,8 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) '@intlify/bundle-utils': 10.0.0(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3))) - '@intlify/shared': 11.1.3 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.3)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3)) + '@intlify/shared': 11.1.7 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.7)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3)) '@rollup/pluginutils': 5.1.4(rollup@4.40.1) '@typescript-eslint/scope-manager': 8.21.0 '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3) @@ -3659,11 +3668,11 @@ snapshots: - supports-color - typescript - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.3)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.7)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))': dependencies: '@babel/parser': 7.26.7 optionalDependencies: - '@intlify/shared': 11.1.3 + '@intlify/shared': 11.1.7 '@vue/compiler-dom': 3.5.13 vue: 3.5.13(typescript@5.6.3) vue-i18n: 11.1.2(vue@3.5.13(typescript@5.6.3)) @@ -3812,6 +3821,9 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/trusted-types@2.0.7': + optional: true + '@types/web-bluetooth@0.0.20': {} '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0)(typescript@5.6.3))(eslint@9.19.0)(typescript@5.6.3)': @@ -4282,6 +4294,10 @@ snapshots: dom-walk@0.1.2: {} + dompurify@3.2.6: + optionalDependencies: + '@types/trusted-types': 2.0.7 + electron-to-chromium@1.5.67: {} emoji-regex@8.0.0: {} diff --git a/frontend/src/views/files/Editor.vue b/frontend/src/views/files/Editor.vue index 9e9b6b68..d78e6afe 100644 --- a/frontend/src/views/files/Editor.vue +++ b/frontend/src/views/files/Editor.vue @@ -41,6 +41,7 @@ import url from "@/utils/url"; import ace, { Ace, version as ace_version } from "ace-builds"; import modelist from "ace-builds/src-noconflict/ext-modelist"; import "ace-builds/src-noconflict/ext-language_tools"; +import DOMPurify from "dompurify"; import HeaderBar from "@/components/header/HeaderBar.vue"; import Action from "@/components/header/Action.vue"; @@ -83,7 +84,7 @@ onMounted(() => { if (isMarkdownFile && isPreview.value) { const new_value = editor.value?.getValue() || ""; try { - previewContent.value = await marked(new_value); + previewContent.value = DOMPurify.sanitize(await marked(new_value)); } catch (error) { console.error("Failed to convert content to HTML:", error); previewContent.value = ""; From 4bfbf332499fc8aea5f6df6aae1efa0de918d1ae Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 17:37:18 +0200 Subject: [PATCH 53/82] fix: linting issues --- cmd/root.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/root.go b/cmd/root.go index 58179daf..711c2d2b 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -276,7 +276,7 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { // if a flag is binded. Our alternative way is to manually check // the flag and then the value from env/config/gotten by viper. // https://github.com/spf13/viper/pull/331 -func getBoolParamB(flags *pflag.FlagSet, key string) (value bool, ok bool) { +func getBoolParamB(flags *pflag.FlagSet, key string) (value, ok bool) { value, _ = flags.GetBool(key) // If set on Flags, use it. From ca86f916216620365c0f81629c0934ce02574d76 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 17:42:39 +0200 Subject: [PATCH 54/82] Merge commit from fork --- cmd/utils.go | 3 ++- files/file.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cmd/utils.go b/cmd/utils.go index 49cc2d2f..22a7cdac 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -14,6 +14,7 @@ import ( "github.com/spf13/pflag" yaml "gopkg.in/yaml.v2" + "github.com/filebrowser/filebrowser/v2/files" "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/storage" "github.com/filebrowser/filebrowser/v2/storage/bolt" @@ -105,7 +106,7 @@ func python(fn pythonFunc, cfg pythonConfig) cobraFunc { log.Println("Using database: " + absPath) data.hadDB = exists - db, err := storm.Open(path) + db, err := storm.Open(path, storm.BoltOptions(files.PermFile, nil)) checkErr(err) defer db.Close() data.store, err = bolt.NewStorage(db) diff --git a/files/file.go b/files/file.go index 03b3a6f9..1bd366f2 100644 --- a/files/file.go +++ b/files/file.go @@ -27,8 +27,8 @@ import ( "github.com/filebrowser/filebrowser/v2/rules" ) -const PermFile = 0644 -const PermDir = 0755 +const PermFile = 0640 +const PermDir = 0750 var ( reSubDirs = regexp.MustCompile("(?i)^sub(s|titles)$") From d6d84e2b48bd4c4268e1774e44a1186e04a8c054 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 17:47:23 +0200 Subject: [PATCH 55/82] chore(release): 2.33.7 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f46d647..f7afb582 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.7](https://github.com/filebrowser/filebrowser/compare/v2.33.6...v2.33.7) (2025-06-25) + + +### Bug Fixes + +* correctly parse negative boolean flags ([221451a](https://github.com/filebrowser/filebrowser/commit/221451a5179c8f139819a315b80d0ecb0e7220c3)) +* linting issues ([4bfbf33](https://github.com/filebrowser/filebrowser/commit/4bfbf332499fc8aea5f6df6aae1efa0de918d1ae)) +* linting issues ([e74c958](https://github.com/filebrowser/filebrowser/commit/e74c95886226c0ee429af1860eed21dd1f8601aa)) + ### [2.33.6](https://github.com/filebrowser/filebrowser/compare/v2.33.5...v2.33.6) (2025-06-24) From 21b0827808249a1abb2e72aced9f1aba23695f39 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 20:50:38 +0200 Subject: [PATCH 56/82] Merge commit from fork --- cmd/root.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cmd/root.go b/cmd/root.go index 711c2d2b..51fe6596 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -68,7 +68,7 @@ func addServerFlags(flags *pflag.FlagSet) { flags.Int("img-processors", 4, "image processors count") //nolint:gomnd flags.Bool("disable-thumbnails", false, "disable image thumbnails") flags.Bool("disable-preview-resize", false, "disable resize of image previews") - flags.Bool("disable-exec", false, "disables Command Runner feature") + flags.Bool("disable-exec", true, "disables Command Runner feature") flags.Bool("disable-type-detection-by-header", false, "disables type detection by reading file headers") } @@ -262,6 +262,13 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server { disableExec := getBoolParam(flags, "disable-exec") server.EnableExec = !disableExec + if server.EnableExec { + log.Println("WARNING: Command Runner feature enabled!") + log.Println("WARNING: This feature has known security vulnerabilities and should not") + log.Println("WARNING: you fully understand the risks involved. For more information") + log.Println("WARNING: read https://github.com/filebrowser/filebrowser/issues/5199") + } + if val, set := getStringParamB(flags, "token-expiration-time"); set { server.TokenExpirationTime = val } From b0f92dd2d72af8fa6423a9226a4b89ed17f8589b Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Wed, 25 Jun 2025 20:53:47 +0200 Subject: [PATCH 57/82] chore(release): 2.33.8 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7afb582..9721443c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.8](https://github.com/filebrowser/filebrowser/compare/v2.33.7...v2.33.8) (2025-06-25) + ### [2.33.7](https://github.com/filebrowser/filebrowser/compare/v2.33.6...v2.33.7) (2025-06-25) From e2e1e4913085cca8917e0f69171dc28d3c6af1b6 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 15:19:13 +0200 Subject: [PATCH 58/82] fix: check exact match on command allow list --- runner/parser.go | 2 +- users/users.go | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/runner/parser.go b/runner/parser.go index 6fd64a4b..8c7c13a2 100644 --- a/runner/parser.go +++ b/runner/parser.go @@ -8,7 +8,7 @@ import ( // ParseCommand parses the command taking in account if the current // instance uses a shell to run the commands or just calls the binary -// directyly. +// directly. func ParseCommand(s *settings.Settings, raw string) ([]string, error) { var command []string diff --git a/users/users.go b/users/users.go index ec613856..01eb294c 100644 --- a/users/users.go +++ b/users/users.go @@ -2,7 +2,7 @@ package users import ( "path/filepath" - "regexp" + "slices" "github.com/spf13/afero" @@ -111,11 +111,5 @@ func (u *User) CanExecute(command string) bool { return false } - for _, cmd := range u.Commands { - if regexp.MustCompile(cmd).MatchString(command) { - return true - } - } - - return false + return slices.Contains(u.Commands, command) } From d5b39a14fd3fc0d1c364116b41289484df7c27b2 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 15:01:46 +0200 Subject: [PATCH 59/82] fix: remove auth token from /api/command --- frontend/src/api/commands.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/api/commands.ts b/frontend/src/api/commands.ts index 41749470..d29ac1cb 100644 --- a/frontend/src/api/commands.ts +++ b/frontend/src/api/commands.ts @@ -1,6 +1,6 @@ -import { removePrefix } from "./utils"; -import { baseURL } from "@/utils/constants"; import { useAuthStore } from "@/stores/auth"; +import { baseURL } from "@/utils/constants"; +import { removePrefix } from "./utils"; const ssl = window.location.protocol === "https:"; const protocol = ssl ? "wss:" : "ws:"; @@ -14,7 +14,7 @@ export default function command( const authStore = useAuthStore(); url = removePrefix(url); - url = `${protocol}//${window.location.host}${baseURL}/api/command${url}?auth=${authStore.jwt}`; + url = `${protocol}//${window.location.host}${baseURL}/api/command${url}`; const conn = new window.WebSocket(url); conn.onopen = () => conn.send(command); From c1e4fd648bebf2aa1a6ce0d1ead08793fecc7747 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 15:12:04 +0200 Subject: [PATCH 60/82] docs: add warning regarding the custom commands feature --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index dc1eb3e9..f8331e21 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,9 @@ File Browser is a **create-your-own-cloud-kind** of software where you can insta | :----------------------: | :----------------------: | :----------------------: | | ![](./docs/assets/4.jpg) | ![](./docs/assets/5.jpg) | ![](./docs/assets/6.jpg) | +> [!CAUTION] +> +> The **command execution** functionality has been disabled for all existent and new installations by default from version v2.33.8 and onwards, due to continuous and known security vulnerabilities. You should only use this feature if you are aware of all of the security risks involved. For more up to date information, consult issue [#5199](https://github.com/filebrowser/filebrowser/issues/5199). ## Install From c232d41f903d3026ec290bbe819b6c59a933048e Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 19:43:20 +0200 Subject: [PATCH 61/82] fix: remove unused import --- frontend/src/api/commands.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/api/commands.ts b/frontend/src/api/commands.ts index d29ac1cb..81dc93cd 100644 --- a/frontend/src/api/commands.ts +++ b/frontend/src/api/commands.ts @@ -1,4 +1,3 @@ -import { useAuthStore } from "@/stores/auth"; import { baseURL } from "@/utils/constants"; import { removePrefix } from "./utils"; @@ -11,8 +10,6 @@ export default function command( onmessage: WebSocket["onmessage"], onclose: WebSocket["onclose"] ) { - const authStore = useAuthStore(); - url = removePrefix(url); url = `${protocol}//${window.location.host}${baseURL}/api/command${url}`; From a430eb2e60725eef42a121feadd0d114a5dd2b5a Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 19:45:36 +0200 Subject: [PATCH 62/82] chore(release): 2.33.9 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9721443c..baff2378 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.9](https://github.com/filebrowser/filebrowser/compare/v2.33.8...v2.33.9) (2025-06-26) + + +### Bug Fixes + +* check exact match on command allow list ([e2e1e49](https://github.com/filebrowser/filebrowser/commit/e2e1e4913085cca8917e0f69171dc28d3c6af1b6)) +* remove auth token from /api/command ([d5b39a1](https://github.com/filebrowser/filebrowser/commit/d5b39a14fd3fc0d1c364116b41289484df7c27b2)) +* remove unused import ([c232d41](https://github.com/filebrowser/filebrowser/commit/c232d41f903d3026ec290bbe819b6c59a933048e)) + ### [2.33.8](https://github.com/filebrowser/filebrowser/compare/v2.33.7...v2.33.8) (2025-06-25) ### [2.33.7](https://github.com/filebrowser/filebrowser/compare/v2.33.6...v2.33.7) (2025-06-25) From f84a6db680b6df1c7c8f06f1816f7e4c9e963668 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 21:07:45 +0200 Subject: [PATCH 63/82] fix: correctly split shell --- frontend/src/views/settings/Global.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index 266ad68b..1997576e 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -321,7 +321,10 @@ const save = async () => { .filter((cmd: string) => cmd !== ""); } } - newSettings.shell = shellValue.value.split("\n"); + newSettings.shell = shellValue.value + .trim() + .split(" ") + .filter((s) => s !== ""); if (newSettings.branding.theme !== getTheme()) { setTheme(newSettings.branding.theme); From 4d830f707fc4314741fd431e70c2ce50cd5a3108 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 21:09:16 +0200 Subject: [PATCH 64/82] fix: correctly check if command is allowed when using shell --- http/commands.go | 14 ++++++++++++-- runner/parser.go | 33 ++++++++++++--------------------- runner/runner.go | 2 +- users/users.go | 10 ---------- 4 files changed, 25 insertions(+), 34 deletions(-) diff --git a/http/commands.go b/http/commands.go index 55075db4..1da1f75c 100644 --- a/http/commands.go +++ b/http/commands.go @@ -6,6 +6,7 @@ import ( "log" "net/http" "os/exec" + "slices" "strings" "time" @@ -60,7 +61,16 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d } } - command, err := runner.ParseCommand(d.settings, raw) + // Fail fast + if !d.server.EnableExec || !d.user.Perm.Execute { + if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { //nolint:govet + wsErr(conn, r, http.StatusInternalServerError, err) + } + + return 0, nil + } + + command, name, err := runner.ParseCommand(d.settings, raw) if err != nil { if err := conn.WriteMessage(websocket.TextMessage, []byte(err.Error())); err != nil { //nolint:govet wsErr(conn, r, http.StatusInternalServerError, err) @@ -68,7 +78,7 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d return 0, nil } - if !d.server.EnableExec || !d.user.CanExecute(command[0]) { + if !slices.Contains(d.user.Commands, name) { if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { //nolint:govet wsErr(conn, r, http.StatusInternalServerError, err) } diff --git a/runner/parser.go b/runner/parser.go index 8c7c13a2..54336847 100644 --- a/runner/parser.go +++ b/runner/parser.go @@ -1,33 +1,24 @@ package runner import ( - "os/exec" - "github.com/filebrowser/filebrowser/v2/settings" ) // ParseCommand parses the command taking in account if the current // instance uses a shell to run the commands or just calls the binary // directly. -func ParseCommand(s *settings.Settings, raw string) ([]string, error) { - var command []string - - if len(s.Shell) == 0 || s.Shell[0] == "" { - cmd, args, err := SplitCommandAndArgs(raw) - if err != nil { - return nil, err - } - - _, err = exec.LookPath(cmd) - if err != nil { - return nil, err - } - - command = append(command, cmd) - command = append(command, args...) - } else { - command = append(s.Shell, raw) //nolint:gocritic +func ParseCommand(s *settings.Settings, raw string) (command []string, name string, err error) { + name, args, err := SplitCommandAndArgs(raw) + if err != nil { + return } - return command, nil + if len(s.Shell) == 0 || s.Shell[0] == "" { + command = append(command, name) + command = append(command, args...) + } else { + command = append(s.Shell, raw) + } + + return command, name, nil } diff --git a/runner/runner.go b/runner/runner.go index 2dbafa5c..00e7c16a 100644 --- a/runner/runner.go +++ b/runner/runner.go @@ -60,7 +60,7 @@ func (r *Runner) exec(raw, evt, path, dst string, user *users.User) error { raw = strings.TrimSpace(strings.TrimSuffix(raw, "&")) } - command, err := ParseCommand(r.Settings, raw) + command, _, err := ParseCommand(r.Settings, raw) if err != nil { return err } diff --git a/users/users.go b/users/users.go index 01eb294c..e0310f21 100644 --- a/users/users.go +++ b/users/users.go @@ -2,7 +2,6 @@ package users import ( "path/filepath" - "slices" "github.com/spf13/afero" @@ -104,12 +103,3 @@ func (u *User) Clean(baseScope string, fields ...string) error { func (u *User) FullPath(path string) string { return afero.FullBaseFsPath(u.Fs.(*afero.BasePathFs), path) } - -// CanExecute checks if an user can execute a specific command. -func (u *User) CanExecute(command string) bool { - if !u.Perm.Execute { - return false - } - - return slices.Contains(u.Commands, command) -} From e735491c57b12c3b19dd2e4b570723df78f4eb44 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 21:12:24 +0200 Subject: [PATCH 65/82] fix: ignore linting error --- runner/parser.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runner/parser.go b/runner/parser.go index 54336847..056ff4c8 100644 --- a/runner/parser.go +++ b/runner/parser.go @@ -17,7 +17,7 @@ func ParseCommand(s *settings.Settings, raw string) (command []string, name stri command = append(command, name) command = append(command, args...) } else { - command = append(s.Shell, raw) + command = append(s.Shell, raw) //nolint:gocritic } return command, name, nil From da03728cd7319542850e2ea337beec83c168f69c Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 26 Jun 2025 21:23:35 +0200 Subject: [PATCH 66/82] chore(release): 2.33.10 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index baff2378..27875126 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.33.10](https://github.com/filebrowser/filebrowser/compare/v2.33.9...v2.33.10) (2025-06-26) + + +### Bug Fixes + +* correctly check if command is allowed when using shell ([4d830f7](https://github.com/filebrowser/filebrowser/commit/4d830f707fc4314741fd431e70c2ce50cd5a3108)) +* correctly split shell ([f84a6db](https://github.com/filebrowser/filebrowser/commit/f84a6db680b6df1c7c8f06f1816f7e4c9e963668)) +* ignore linting error ([e735491](https://github.com/filebrowser/filebrowser/commit/e735491c57b12c3b19dd2e4b570723df78f4eb44)) + ### [2.33.9](https://github.com/filebrowser/filebrowser/compare/v2.33.8...v2.33.9) (2025-06-26) From 1d494ff3159ef939cfb4980ccde6f27df3e738b5 Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Thu, 26 Jun 2025 21:18:20 +0300 Subject: [PATCH 67/82] build: bump golangci-lint to 2.1.6 --- .golangci.yml | 185 ++++++++------- cmd/config_import.go | 2 +- cmd/root.go | 8 +- cmd/utils.go | 4 +- diskcache/file_cache.go | 4 +- files/file.go | 2 +- http/raw.go | 1 - http/share.go | 4 +- http/tus_handlers.go | 2 +- img/service.go | 2 +- settings/settings.go | 2 +- tools.mk | 2 +- tools/go.mod | 218 +++++++++-------- tools/go.sum | 513 ++++++++++++++++++++++------------------ tools/tools.go | 2 +- 15 files changed, 515 insertions(+), 436 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 0fa292ed..10ef904d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,69 +1,14 @@ -linters-settings: - dupl: - threshold: 100 - exhaustive: - default-signifies-exhaustive: false - funlen: - lines: 100 - statements: 50 - goconst: - min-len: 2 - min-occurrences: 2 - gocritic: - enabled-tags: - - diagnostic - - experimental - - opinionated - - performance - - style - disabled-checks: - - dupImport # https://github.com/go-critic/go-critic/issues/845 - - ifElseChain - - octalLiteral - - whyNoLint - - wrapperFunc - gocyclo: - min-complexity: 15 - goimports: - local-prefixes: github.com/filebrowser/filebrowser - gomnd: - # don't include the "operation" and "assign" - checks: - - argument - - case - - condition - - return - ignored-numbers: - - '0' - - '1' - - '2' - - '3' - ignored-functions: - - strings.SplitN - govet: - enable: - - nilness - - shadow - lll: - line-length: 140 - misspell: - locale: US - nolintlint: - allow-unused: false # report any unused nolint directives - require-explanation: false # require an explanation for nolint directives - require-specific: true # require nolint directives to be specific about which linter is being skipped +version: "2" linters: - # please, do not use `enable-all`: it's deprecated and will be removed soon. - # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint - disable-all: true + # inverted configuration with `default: all` and `disable` is not scalable during updates of golangci-lint + default: none enable: - bodyclose - dogsled - dupl - errcheck - errorlint - - exportloopref - exhaustive - funlen - gocheckcompilerdirectives @@ -72,50 +17,116 @@ linters: - gocritic - gocyclo - godox - - goimports - - gomnd - goprintffuncname - gosec - - gosimple - govet - ineffassign - lll - misspell + - mnd - nakedret - nolintlint - prealloc - revive - rowserrcheck - staticcheck - - stylecheck - testifylint - - typecheck - unconvert - unparam - unused - whitespace + settings: + dupl: + threshold: 100 + exhaustive: + default-signifies-exhaustive: false + funlen: + lines: 100 + statements: 50 + goconst: + min-len: 2 + min-occurrences: 2 + gocritic: + disabled-checks: + - dupImport # https://github.com/go-critic/go-critic/issues/845 + - ifElseChain + - octalLiteral + - whyNoLint + - wrapperFunc + enabled-tags: + - diagnostic + - experimental + - opinionated + - performance + - style + gocyclo: + min-complexity: 15 + govet: + enable: + - nilness + - shadow + lll: + line-length: 140 + misspell: + locale: US + mnd: + # don't include the "operation" and "assign" + checks: + - argument + - case + - condition + - return + ignored-numbers: + - "0" + - "1" + - "2" + - "3" + ignored-functions: + - strings.SplitN + nolintlint: + allow-unused: false # report any unused nolint directives + require-explanation: false # require an explanation for nolint directives + require-specific: true # require nolint directives to be specific about which linter is being skipped + staticcheck: + checks: + - "all" + - "-QF*" + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - gochecknoinits + path: cmd/.*.go + - linters: + - dupl + - funlen + - gochecknoinits + - gocyclo + - lll + - scopelint + path: .*_test.go + - linters: + - misspell + text: "[aA]uther" + - linters: + - mnd + text: strconv.Parse + paths: + - frontend/ -issues: - exclude-dirs: - - frontend/ - exclude-rules: - - path: cmd/.*.go - linters: - - gochecknoinits - - path: .*_test.go - linters: - - lll - - gochecknoinits - - gocyclo - - funlen - - dupl - - scopelint - - text: "Auther" - linters: - - misspell - - text: "strconv.Parse" - linters: - - gomnd - -run: - timeout: 5m \ No newline at end of file +formatters: + enable: + - goimports + settings: + goimports: + local-prefixes: + - github.com/filebrowser/filebrowser + exclusions: + generated: lax + paths: + - frontend/ diff --git a/cmd/config_import.go b/cmd/config_import.go index ab1ccaf5..6c609481 100644 --- a/cmd/config_import.go +++ b/cmd/config_import.go @@ -56,7 +56,7 @@ The path must be for a json or yaml file.`, checkErr(err) var rawAuther interface{} - if filepath.Ext(args[0]) != ".json" { //nolint:goconst + if filepath.Ext(args[0]) != ".json" { rawAuther = cleanUpInterfaceMap(file.Auther.(map[interface{}]interface{})) } else { rawAuther = file.Auther diff --git a/cmd/root.go b/cmd/root.go index 51fe6596..f4646afe 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -61,11 +61,11 @@ func addServerFlags(flags *pflag.FlagSet) { flags.StringP("key", "k", "", "tls key") flags.StringP("root", "r", ".", "root to prepend to relative paths") flags.String("socket", "", "socket to listen to (cannot be used with address, port, cert nor key flags)") - flags.Uint32("socket-perm", 0666, "unix socket file permissions") //nolint:gomnd + flags.Uint32("socket-perm", 0666, "unix socket file permissions") //nolint:mnd flags.StringP("baseurl", "b", "", "base url") flags.String("cache-dir", "", "file cache directory (disabled if empty)") flags.String("token-expiration-time", "2h", "user session timeout") - flags.Int("img-processors", 4, "image processors count") //nolint:gomnd + flags.Int("img-processors", 4, "image processors count") //nolint:mnd flags.Bool("disable-thumbnails", false, "disable image thumbnails") flags.Bool("disable-preview-resize", false, "disable resize of image previews") flags.Bool("disable-exec", true, "disables Command Runner feature") @@ -129,7 +129,7 @@ user created with the credentials from options "username" and "password".`, cacheDir, err := cmd.Flags().GetString("cache-dir") checkErr(err) if cacheDir != "" { - if err := os.MkdirAll(cacheDir, 0700); err != nil { //nolint:govet,gomnd + if err := os.MkdirAll(cacheDir, 0700); err != nil { //nolint:govet,mnd log.Fatalf("can't make directory %s: %s", cacheDir, err) } fileCache = diskcache.New(afero.NewOsFs(), cacheDir) @@ -189,7 +189,7 @@ user created with the credentials from options "username" and "password".`, }, pythonConfig{allowNoDB: true}), } -func cleanupHandler(listener net.Listener, c chan os.Signal) { //nolint:interfacer +func cleanupHandler(listener net.Listener, c chan os.Signal) { sig := <-c log.Printf("Caught signal %s: shutting down.", sig) listener.Close() diff --git a/cmd/utils.go b/cmd/utils.go index 22a7cdac..902319a9 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -73,7 +73,7 @@ func dbExists(path string) (bool, error) { d := filepath.Dir(path) _, err = os.Stat(d) if os.IsNotExist(err) { - if err := os.MkdirAll(d, 0700); err != nil { //nolint:govet,gomnd + if err := os.MkdirAll(d, 0700); err != nil { //nolint:govet,mnd return false, err } return false, nil @@ -121,7 +121,7 @@ func marshal(filename string, data interface{}) error { defer fd.Close() switch ext := filepath.Ext(filename); ext { - case ".json": + case ".json": //nolint:goconst encoder := json.NewEncoder(fd) encoder.SetIndent("", " ") return encoder.Encode(data) diff --git a/diskcache/file_cache.go b/diskcache/file_cache.go index 5c1fb427..26d5e336 100644 --- a/diskcache/file_cache.go +++ b/diskcache/file_cache.go @@ -37,11 +37,11 @@ func (f *FileCache) Store(_ context.Context, key string, value []byte) error { defer mu.Unlock() fileName := f.getFileName(key) - if err := f.fs.MkdirAll(filepath.Dir(fileName), 0700); err != nil { //nolint:gomnd + if err := f.fs.MkdirAll(filepath.Dir(fileName), 0700); err != nil { //nolint:mnd return err } - if err := afero.WriteFile(f.fs, fileName, value, 0700); err != nil { //nolint:gomnd + if err := afero.WriteFile(f.fs, fileName, value, 0700); err != nil { //nolint:mnd return err } diff --git a/files/file.go b/files/file.go index 1bd366f2..6c985cd6 100644 --- a/files/file.go +++ b/files/file.go @@ -314,7 +314,7 @@ func (i *FileInfo) readFirstBytes() []byte { } defer reader.Close() - buffer := make([]byte, 512) //nolint:gomnd + buffer := make([]byte, 512) //nolint:mnd n, err := reader.Read(buffer) if err != nil && !errors.Is(err, io.EOF) { log.Print(err) diff --git a/http/raw.go b/http/raw.go index 0631be9e..4e9438e8 100644 --- a/http/raw.go +++ b/http/raw.go @@ -44,7 +44,6 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin return fileSlice, nil } -//nolint:goconst func parseQueryAlgorithm(r *http.Request) (string, archiver.Writer, error) { switch r.URL.Query().Get("algo") { case "zip", "true", "": diff --git a/http/share.go b/http/share.go index f14d0a69..360d812c 100644 --- a/http/share.go +++ b/http/share.go @@ -91,7 +91,7 @@ var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request defer r.Body.Close() } - bytes := make([]byte, 6) //nolint:gomnd + bytes := make([]byte, 6) //nolint:mnd _, err := rand.Read(bytes) if err != nil { return http.StatusInternalServerError, err @@ -130,7 +130,7 @@ var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request var token string if len(hash) > 0 { - tokenBuffer := make([]byte, 96) //nolint:gomnd + tokenBuffer := make([]byte, 96) //nolint:mnd if _, err := rand.Read(tokenBuffer); err != nil { return http.StatusInternalServerError, err } diff --git a/http/tus_handlers.go b/http/tus_handlers.go index 7a3254ae..bd4583cf 100644 --- a/http/tus_handlers.go +++ b/http/tus_handlers.go @@ -41,7 +41,7 @@ func tusPostHandler() handleFunc { } fileFlags := os.O_CREATE | os.O_WRONLY - if r.URL.Query().Get("override") == "true" { + if r.URL.Query().Get("override") == "true" { //nolint:goconst fileFlags |= os.O_TRUNC } diff --git a/img/service.go b/img/service.go index 1d72ad81..c949a911 100644 --- a/img/service.go +++ b/img/service.go @@ -207,7 +207,7 @@ func getEmbeddedThumbnail(in io.Reader) ([]byte, io.Reader, error) { offset := 0 offsets := []int{12, 30} - head := make([]byte, 0xffff) //nolint:gomnd + head := make([]byte, 0xffff) //nolint:mnd _, err := r.Read(head) if err != nil { diff --git a/settings/settings.go b/settings/settings.go index 22908396..b12ae826 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -72,7 +72,7 @@ func (s *Server) GetTokenExpirationTime(fallback time.Duration) time.Duration { // GenerateKey generates a key of 512 bits. func GenerateKey() ([]byte, error) { - b := make([]byte, 64) //nolint:gomnd + b := make([]byte, 64) //nolint:mnd _, err := rand.Read(b) // Note that err == nil only if we read len(b) bytes. if err != nil { diff --git a/tools.mk b/tools.mk index d4ae12a4..72443474 100644 --- a/tools.mk +++ b/tools.mk @@ -18,7 +18,7 @@ $(goimports): $(TOOLS_GO_DEPS) golangci-lint=$(TOOLS_BIN)/golangci-lint $(golangci-lint): $(TOOLS_GO_DEPS) - $Q cd $(TOOLS_DIR) && $(go) build -o $@ github.com/golangci/golangci-lint/cmd/golangci-lint + $Q cd $(TOOLS_DIR) && $(go) build -o $@ github.com/golangci/golangci-lint/v2/cmd/golangci-lint # js tools TOOLS_JS_DEPS=$(TOOLS_DIR)/node_modules/.modified diff --git a/tools/go.mod b/tools/go.mod index cc7099ca..a41dc53f 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -1,58 +1,67 @@ module github.com/filebrowser/filebrowser/v2/tools -go 1.23 +go 1.23.0 require ( - github.com/golangci/golangci-lint v1.60.3 - golang.org/x/tools v0.24.0 + github.com/golangci/golangci-lint/v2 v2.1.6 + golang.org/x/tools v0.32.0 ) require ( - 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect - 4d63.com/gochecknoglobals v0.2.1 // indirect - github.com/4meepo/tagalign v1.3.4 // indirect - github.com/Abirdcfly/dupword v0.0.14 // indirect - github.com/Antonboom/errname v0.1.13 // indirect - github.com/Antonboom/nilnil v0.1.9 // indirect - github.com/Antonboom/testifylint v1.4.3 // indirect - github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect - github.com/Crocmagnon/fatcontext v0.4.0 // indirect + 4d63.com/gocheckcompilerdirectives v1.3.0 // indirect + 4d63.com/gochecknoglobals v0.2.2 // indirect + github.com/4meepo/tagalign v1.4.2 // indirect + github.com/Abirdcfly/dupword v0.1.3 // indirect + github.com/Antonboom/errname v1.1.0 // indirect + github.com/Antonboom/nilnil v1.1.0 // indirect + github.com/Antonboom/testifylint v1.6.1 // indirect + github.com/BurntSushi/toml v1.5.0 // indirect github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect - github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0 // indirect - github.com/Masterminds/semver/v3 v3.2.1 // indirect - github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect - github.com/alecthomas/go-check-sumtype v0.1.4 // indirect - github.com/alexkohler/nakedret/v2 v2.0.4 // indirect + github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 // indirect + github.com/Masterminds/semver/v3 v3.3.1 // indirect + github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect + github.com/alecthomas/chroma/v2 v2.17.2 // indirect + github.com/alecthomas/go-check-sumtype v0.3.1 // indirect + github.com/alexkohler/nakedret/v2 v2.0.6 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect + github.com/alingse/nilnesserr v0.2.0 // indirect github.com/ashanbrown/forbidigo v1.6.0 // indirect - github.com/ashanbrown/makezero v1.1.1 // indirect + github.com/ashanbrown/makezero v1.2.0 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bkielbasa/cyclop v1.2.1 // indirect + github.com/bkielbasa/cyclop v1.2.3 // indirect github.com/blizzy78/varnamelen v0.8.0 // indirect - github.com/bombsimon/wsl/v4 v4.4.1 // indirect - github.com/breml/bidichk v0.2.7 // indirect - github.com/breml/errchkjson v0.3.6 // indirect - github.com/butuzov/ireturn v0.3.0 // indirect - github.com/butuzov/mirror v1.2.0 // indirect - github.com/catenacyber/perfsprint v0.7.1 // indirect + github.com/bombsimon/wsl/v4 v4.7.0 // indirect + github.com/breml/bidichk v0.3.3 // indirect + github.com/breml/errchkjson v0.4.1 // indirect + github.com/butuzov/ireturn v0.4.0 // indirect + github.com/butuzov/mirror v1.3.0 // indirect + github.com/catenacyber/perfsprint v0.9.1 // indirect github.com/ccojocar/zxcvbn-go v1.0.2 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charithe/durationcheck v0.0.10 // indirect + github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect + github.com/charmbracelet/lipgloss v1.1.0 // indirect + github.com/charmbracelet/x/ansi v0.8.0 // indirect + github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect + github.com/charmbracelet/x/term v0.2.1 // indirect github.com/chavacava/garif v0.1.0 // indirect - github.com/ckaznocha/intrange v0.1.2 // indirect - github.com/curioswitch/go-reassign v0.2.0 // indirect - github.com/daixiang0/gci v0.13.4 // indirect + github.com/ckaznocha/intrange v0.3.1 // indirect + github.com/curioswitch/go-reassign v0.3.0 // indirect + github.com/daixiang0/gci v0.13.6 // indirect + github.com/dave/dst v0.27.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denis-tingaikin/go-header v0.5.0 // indirect + github.com/dlclark/regexp2 v1.11.5 // indirect github.com/ettle/strcase v0.2.0 // indirect - github.com/fatih/color v1.17.0 // indirect + github.com/fatih/color v1.18.0 // indirect github.com/fatih/structtag v1.2.0 // indirect - github.com/firefart/nonamedreturns v1.0.5 // indirect + github.com/firefart/nonamedreturns v1.0.6 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect - github.com/ghostiam/protogetter v0.3.6 // indirect - github.com/go-critic/go-critic v0.11.4 // indirect + github.com/ghostiam/protogetter v0.3.15 // indirect + github.com/go-critic/go-critic v0.13.0 // indirect github.com/go-toolsmith/astcast v1.1.0 // indirect github.com/go-toolsmith/astcopy v1.1.0 // indirect github.com/go-toolsmith/astequal v1.2.0 // indirect @@ -60,130 +69,139 @@ require ( github.com/go-toolsmith/astp v1.1.0 // indirect github.com/go-toolsmith/strparse v1.1.0 // indirect github.com/go-toolsmith/typep v1.1.0 // indirect - github.com/go-viper/mapstructure/v2 v2.0.0 // indirect - github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gofrs/flock v0.12.1 // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect - github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9 // indirect + github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect + github.com/golangci/go-printf-func-name v0.1.0 // indirect + github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect + github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 // indirect github.com/golangci/misspell v0.6.0 // indirect - github.com/golangci/modinfo v0.3.4 // indirect github.com/golangci/plugin-module-register v0.1.1 // indirect - github.com/golangci/revgrep v0.5.3 // indirect - github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect - github.com/google/go-cmp v0.6.0 // indirect + github.com/golangci/revgrep v0.8.0 // indirect + github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/gordonklaus/ineffassign v0.1.0 // indirect github.com/gostaticanalysis/analysisutil v0.7.1 // indirect - github.com/gostaticanalysis/comment v1.4.2 // indirect - github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect + github.com/gostaticanalysis/comment v1.5.0 // indirect + github.com/gostaticanalysis/forcetypeassert v0.2.0 // indirect github.com/gostaticanalysis/nilerr v0.1.1 // indirect + github.com/hashicorp/go-immutable-radix/v2 v2.1.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jgautheron/goconst v1.7.1 // indirect + github.com/jgautheron/goconst v1.8.1 // indirect github.com/jingyugao/rowserrcheck v1.1.1 // indirect - github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect - github.com/jjti/go-spancheck v0.6.2 // indirect - github.com/julz/importas v0.1.0 // indirect - github.com/karamaru-alpha/copyloopvar v1.1.0 // indirect - github.com/kisielk/errcheck v1.7.0 // indirect - github.com/kkHAIKE/contextcheck v1.1.5 // indirect + github.com/jjti/go-spancheck v0.6.4 // indirect + github.com/julz/importas v0.2.0 // indirect + github.com/karamaru-alpha/copyloopvar v1.2.1 // indirect + github.com/kisielk/errcheck v1.9.0 // indirect + github.com/kkHAIKE/contextcheck v1.1.6 // indirect github.com/kulti/thelper v0.6.3 // indirect - github.com/kunwardeep/paralleltest v1.0.10 // indirect - github.com/kyoh86/exportloopref v0.1.11 // indirect - github.com/lasiar/canonicalheader v1.1.1 // indirect - github.com/ldez/gomoddirectives v0.2.4 // indirect - github.com/ldez/tagliatelle v0.5.0 // indirect + github.com/kunwardeep/paralleltest v1.0.14 // indirect + github.com/lasiar/canonicalheader v1.1.2 // indirect + github.com/ldez/exptostd v0.4.3 // indirect + github.com/ldez/gomoddirectives v0.6.1 // indirect + github.com/ldez/grignotin v0.9.0 // indirect + github.com/ldez/tagliatelle v0.7.1 // indirect + github.com/ldez/usetesting v0.4.3 // indirect github.com/leonklingele/grouper v1.1.2 // indirect - github.com/lufeee/execinquery v1.2.1 // indirect - github.com/macabu/inamedparam v0.1.3 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/macabu/inamedparam v0.2.0 // indirect github.com/magiconair/properties v1.8.6 // indirect + github.com/manuelarte/funcorder v0.2.1 // indirect github.com/maratori/testableexamples v1.0.0 // indirect github.com/maratori/testpackage v1.1.1 // indirect - github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/matoous/godox v1.1.0 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect - github.com/mgechev/revive v1.3.9 // indirect + github.com/mgechev/revive v1.9.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moricho/tparallel v0.3.2 // indirect + github.com/muesli/termenv v0.16.0 // indirect github.com/nakabonne/nestif v0.3.1 // indirect github.com/nishanths/exhaustive v0.12.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect - github.com/nunnatsa/ginkgolinter v0.16.2 // indirect + github.com/nunnatsa/ginkgolinter v0.19.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/polyfloyd/go-errorlint v1.6.0 // indirect + github.com/polyfloyd/go-errorlint v1.8.0 // indirect github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect - github.com/quasilyte/go-ruleguard v0.4.2 // indirect + github.com/quasilyte/go-ruleguard v0.4.4 // indirect github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect - github.com/ryancurrah/gomodguard v1.3.3 // indirect + github.com/raeperd/recvcheck v0.2.0 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/ryancurrah/gomodguard v1.4.1 // indirect github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect - github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect - github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect + github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect + github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect - github.com/sashamelentyev/usestdlibvars v1.27.0 // indirect - github.com/securego/gosec/v2 v2.20.1-0.20240822074752-ab3f6c1c83a0 // indirect - github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect + github.com/sashamelentyev/usestdlibvars v1.28.0 // indirect + github.com/securego/gosec/v2 v2.22.3 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sivchari/containedctx v1.0.3 // indirect - github.com/sivchari/tenv v1.10.0 // indirect - github.com/sonatard/noctx v0.0.2 // indirect + github.com/sonatard/noctx v0.1.0 // indirect github.com/sourcegraph/go-diff v0.7.0 // indirect - github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/afero v1.14.0 // indirect github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.8.1 // indirect + github.com/spf13/cobra v1.9.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/spf13/viper v1.12.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect - github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect + github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/stretchr/testify v1.9.0 // indirect + github.com/stretchr/testify v1.10.0 // indirect github.com/subosito/gotenv v1.4.1 // indirect - github.com/tdakkota/asciicheck v0.2.0 // indirect - github.com/tetafro/godot v1.4.16 // indirect - github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 // indirect - github.com/timonwong/loggercheck v0.9.4 // indirect - github.com/tomarrell/wrapcheck/v2 v2.9.0 // indirect + github.com/tdakkota/asciicheck v0.4.1 // indirect + github.com/tetafro/godot v1.5.1 // indirect + github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 // indirect + github.com/timonwong/loggercheck v0.11.0 // indirect + github.com/tomarrell/wrapcheck/v2 v2.11.0 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect - github.com/ultraware/funlen v0.1.0 // indirect - github.com/ultraware/whitespace v0.1.1 // indirect - github.com/uudashr/gocognit v1.1.3 // indirect - github.com/xen0n/gosmopolitan v1.2.2 // indirect + github.com/ultraware/funlen v0.2.0 // indirect + github.com/ultraware/whitespace v0.2.0 // indirect + github.com/uudashr/gocognit v1.2.0 // indirect + github.com/uudashr/iface v1.3.1 // indirect + github.com/xen0n/gosmopolitan v1.3.0 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/yagipy/maintidx v1.0.0 // indirect github.com/yeya24/promlinter v0.3.0 // indirect github.com/ykadowak/zerologlint v0.1.5 // indirect gitlab.com/bosi/decorder v0.4.2 // indirect - go-simpler.org/musttag v0.12.2 // indirect - go-simpler.org/sloglint v0.7.2 // indirect + go-simpler.org/musttag v0.13.1 // indirect + go-simpler.org/sloglint v0.11.0 // indirect + go.augendre.info/fatcontext v0.8.0 // indirect go.uber.org/atomic v1.7.0 // indirect - go.uber.org/automaxprocs v1.5.3 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.23.0 // indirect - golang.org/x/text v0.17.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect + golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - honnef.co/go/tools v0.5.1 // indirect - mvdan.cc/gofumpt v0.7.0 // indirect - mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect + honnef.co/go/tools v0.6.1 // indirect + mvdan.cc/gofumpt v0.8.0 // indirect + mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect ) diff --git a/tools/go.sum b/tools/go.sum index 750b9371..0aa9ef8b 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,7 +1,7 @@ -4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA= -4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= -4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= -4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= +4d63.com/gocheckcompilerdirectives v1.3.0 h1:Ew5y5CtcAAQeTVKUVFrE7EwHMrTO6BggtEj8BZSjZ3A= +4d63.com/gocheckcompilerdirectives v1.3.0/go.mod h1:ofsJ4zx2QAuIP/NO/NAh1ig6R1Fb18/GI7RVMwz7kAY= +4d63.com/gochecknoglobals v0.2.2 h1:H1vdnwnMaZdQW/N+NrkT1SZMTBmcwHe9Vq8lJcYYTtU= +4d63.com/gochecknoglobals v0.2.2/go.mod h1:lLxwTQjL5eIesRbvnzIP3jZtG140FnTdz+AlMa+ogt0= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -35,122 +35,143 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8= -github.com/4meepo/tagalign v1.3.4/go.mod h1:M+pnkHH2vG8+qhE5bVc/zeP7HS/j910Fwa9TUSyZVI0= -github.com/Abirdcfly/dupword v0.0.14 h1:3U4ulkc8EUo+CaT105/GJ1BQwtgyj6+VaBVbAX11Ba8= -github.com/Abirdcfly/dupword v0.0.14/go.mod h1:VKDAbxdY8YbKUByLGg8EETzYSuC4crm9WwI6Y3S0cLI= -github.com/Antonboom/errname v0.1.13 h1:JHICqsewj/fNckzrfVSe+T33svwQxmjC+1ntDsHOVvM= -github.com/Antonboom/errname v0.1.13/go.mod h1:uWyefRYRN54lBg6HseYCFhs6Qjcy41Y3Jl/dVhA87Ns= -github.com/Antonboom/nilnil v0.1.9 h1:eKFMejSxPSA9eLSensFmjW2XTgTwJMjZ8hUHtV4s/SQ= -github.com/Antonboom/nilnil v0.1.9/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ= -github.com/Antonboom/testifylint v1.4.3 h1:ohMt6AHuHgttaQ1xb6SSnxCeK4/rnK7KKzbvs7DmEck= -github.com/Antonboom/testifylint v1.4.3/go.mod h1:+8Q9+AOLsz5ZiQiiYujJKs9mNz398+M6UgslP4qgJLA= +github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E= +github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI= +github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE= +github.com/Abirdcfly/dupword v0.1.3/go.mod h1:8VbB2t7e10KRNdwTVoxdBaxla6avbhGzb8sCTygUMhw= +github.com/Antonboom/errname v1.1.0 h1:A+ucvdpMwlo/myWrkHEUEBWc/xuXdud23S8tmTb/oAE= +github.com/Antonboom/errname v1.1.0/go.mod h1:O1NMrzgUcVBGIfi3xlVuvX8Q/VP/73sseCaAppfjqZw= +github.com/Antonboom/nilnil v1.1.0 h1:jGxJxjgYS3VUUtOTNk8Z1icwT5ESpLH/426fjmQG+ng= +github.com/Antonboom/nilnil v1.1.0/go.mod h1:b7sAlogQjFa1wV8jUW3o4PMzDVFLbTux+xnQdvzdcIE= +github.com/Antonboom/testifylint v1.6.1 h1:6ZSytkFWatT8mwZlmRCHkWz1gPi+q6UBSbieji2Gj/o= +github.com/Antonboom/testifylint v1.6.1/go.mod h1:k+nEkathI2NFjKO6HvwmSrbzUcQ6FAnbZV+ZRrnXPLI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Crocmagnon/fatcontext v0.4.0 h1:4ykozu23YHA0JB6+thiuEv7iT6xq995qS1vcuWZq0tg= -github.com/Crocmagnon/fatcontext v0.4.0/go.mod h1:ZtWrXkgyfsYPzS6K3O88va6t2GEglG93vnII/F94WC0= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0 h1:/fTUt5vmbkAcMBt4YQiuC23cV0kEsN1MVMNqeOW43cU= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0/go.mod h1:ONJg5sxcbsdQQ4pOW8TGdTidT2TMAUy/2Xhr8mrYaao= -github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= -github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA= -github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ= -github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= -github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= -github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= -github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= -github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= -github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 h1:Sz1JIXEcSfhz7fUi7xHnhpIE0thVASYjvosApmHuD2k= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1/go.mod h1:n/LSCXNuIYqVfBlVXyHfMQkZDdp1/mmxfSjADd3z1Zg= +github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= +github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4= +github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo= +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma/v2 v2.17.2 h1:Rm81SCZ2mPoH+Q8ZCc/9YvzPUN/E7HgPiPJD8SLV6GI= +github.com/alecthomas/chroma/v2 v2.17.2/go.mod h1:RVX6AvYm4VfYe/zsk7mjHueLDZor3aWCNE14TFlepBk= +github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU= +github.com/alecthomas/go-check-sumtype v0.3.1/go.mod h1:A8TSiN3UPRw3laIgWEUOHHLPa6/r9MtoigdlP5h3K/E= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg= -github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= +github.com/alexkohler/nakedret/v2 v2.0.6 h1:ME3Qef1/KIKr3kWX3nti3hhgNxw6aqN5pZmQiFSsuzQ= +github.com/alexkohler/nakedret/v2 v2.0.6/go.mod h1:l3RKju/IzOMQHmsEvXwkqMDzHHvurNQfAgE1eVmT40Q= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/alingse/nilnesserr v0.2.0 h1:raLem5KG7EFVb4UIDAXgrv3N2JIaffeKNtcEXkEWd/w= +github.com/alingse/nilnesserr v0.2.0/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY= github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= -github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= +github.com/ashanbrown/makezero v1.2.0 h1:/2Lp1bypdmK9wDIq7uWBlDF1iMUpIIS4A+pF6C9IEUU= +github.com/ashanbrown/makezero v1.2.0/go.mod h1:dxlPhHbDMC6N6xICzFBSK+4njQDdK8euNO0qjQMtGY4= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY= -github.com/bkielbasa/cyclop v1.2.1/go.mod h1:K/dT/M0FPAiYjBgQGau7tz+3TMh4FWAEqlMhzFWCrgM= +github.com/bkielbasa/cyclop v1.2.3 h1:faIVMIGDIANuGPWH031CZJTi2ymOQBULs9H21HSMa5w= +github.com/bkielbasa/cyclop v1.2.3/go.mod h1:kHTwA9Q0uZqOADdupvcFJQtp/ksSnytRMe8ztxG8Fuo= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v4 v4.4.1 h1:jfUaCkN+aUpobrMO24zwyAMwMAV5eSziCkOKEauOLdw= -github.com/bombsimon/wsl/v4 v4.4.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo= -github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY= -github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ= -github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA= -github.com/breml/errchkjson v0.3.6/go.mod h1:jhSDoFheAF2RSDOlCfhHO9KqhZgAYLyvHe7bRCX8f/U= -github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0= -github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA= -github.com/butuzov/mirror v1.2.0 h1:9YVK1qIjNspaqWutSv8gsge2e/Xpq1eqEkslEUHy5cs= -github.com/butuzov/mirror v1.2.0/go.mod h1:DqZZDtzm42wIAIyHXeN8W/qb1EPlb9Qn/if9icBOpdQ= -github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc= -github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= +github.com/bombsimon/wsl/v4 v4.7.0 h1:1Ilm9JBPRczjyUs6hvOPKvd7VL1Q++PL8M0SXBDf+jQ= +github.com/bombsimon/wsl/v4 v4.7.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg= +github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE= +github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE= +github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg= +github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s= +github.com/butuzov/ireturn v0.4.0 h1:+s76bF/PfeKEdbG8b54aCocxXmi0wvYdOVsWxVO7n8E= +github.com/butuzov/ireturn v0.4.0/go.mod h1:ghI0FrCmap8pDWZwfPisFD1vEc56VKH4NpQUxDHta70= +github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc= +github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI= +github.com/catenacyber/perfsprint v0.9.1 h1:5LlTp4RwTooQjJCvGEFV6XksZvWE7wCOUvjD2z0vls0= +github.com/catenacyber/perfsprint v0.9.1/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM= github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4= github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= +github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= +github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/ckaznocha/intrange v0.1.2 h1:3Y4JAxcMntgb/wABQ6e8Q8leMd26JbX2790lIss9MTI= -github.com/ckaznocha/intrange v0.1.2/go.mod h1:RWffCw/vKBwHeOEwWdCikAtY0q4gGt8VhJZEEA5n+RE= +github.com/ckaznocha/intrange v0.3.1 h1:j1onQyXvHUsPWujDH6WIjhyH26gkRt/txNlV7LspvJs= +github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nWh/s6SHIJJk= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/daixiang0/gci v0.13.4 h1:61UGkmpoAcxHM2hhNkZEf5SzwQtWJXTSws7jaPyqwlw= -github.com/daixiang0/gci v0.13.4/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/curioswitch/go-reassign v0.3.0 h1:dh3kpQHuADL3cobV/sSGETA8DOv457dwl+fbBAhrQPs= +github.com/curioswitch/go-reassign v0.3.0/go.mod h1:nApPCCTtqLJN/s8HfItCcKV0jIPwluBOvZP+dsJGA88= +github.com/daixiang0/gci v0.13.6 h1:RKuEOSkGpSadkGbvZ6hJ4ddItT3cVZ9Vn9Rybk6xjl8= +github.com/daixiang0/gci v0.13.6/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk= +github.com/dave/dst v0.27.3 h1:P1HPoMza3cMEquVf9kKy8yXsFirry4zEnWOdYPOoIzY= +github.com/dave/dst v0.27.3/go.mod h1:jHh6EOibnHgcUW3WjKHisiooEkYwqpHLBSX1iOBhEyc= +github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo= +github.com/dave/jennifer v1.7.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8= github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= -github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= -github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA= -github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw= +github.com/firefart/nonamedreturns v1.0.6 h1:vmiBcKV/3EqKY3ZiPxCINmpS431OcE1S47AQUwhrg8E= +github.com/firefart/nonamedreturns v1.0.6/go.mod h1:R8NisJnSIpvPWheCq0mNRXJok6D8h7fagJTF8EMEwCo= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/ghostiam/protogetter v0.3.6 h1:R7qEWaSgFCsy20yYHNIJsU9ZOb8TziSRRxuAOTVKeOk= -github.com/ghostiam/protogetter v0.3.6/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw= -github.com/go-critic/go-critic v0.11.4 h1:O7kGOCx0NDIni4czrkRIXTnit0mkyKOCePh3My6OyEU= -github.com/go-critic/go-critic v0.11.4/go.mod h1:2QAdo4iuLik5S9YG0rT4wcZ8QxwHYkrr6/2MWAiv/vc= +github.com/ghostiam/protogetter v0.3.15 h1:1KF5sXel0HE48zh1/vn0Loiw25A9ApyseLzQuif1mLY= +github.com/ghostiam/protogetter v0.3.15/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA= +github.com/go-critic/go-critic v0.13.0 h1:kJzM7wzltQasSUXtYyTl6UaPVySO6GkaR1thFnJ6afY= +github.com/go-critic/go-critic v0.13.0/go.mod h1:M/YeuJ3vOCQDnP2SU+ZhjgRzwzcBW87JqLpMJLrZDLI= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -186,10 +207,10 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= -github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc= -github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= -github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUWY= +github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= @@ -224,22 +245,24 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9 h1:/1322Qns6BtQxUZDTAT4SdcoxknUki7IAoK4SAXr8ME= -github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9/go.mod h1:Oesb/0uFAyWoaw1U1qS5zyjCg5NP9C9iwjnI4tIsXEE= -github.com/golangci/golangci-lint v1.60.3 h1:l38A5de24ZeDlcFF+EB7m3W5joPD99/hS5SIHJPyZa0= -github.com/golangci/golangci-lint v1.60.3/go.mod h1:J4vOpcjzRI+lDL2DKNGBZVB3EQSBfCBCMpaydWLtJNo= +github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 h1:WUvBfQL6EW/40l6OmeSBYQJNSif4O11+bmWEz+C7FYw= +github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E= +github.com/golangci/go-printf-func-name v0.1.0 h1:dVokQP+NMTO7jwO4bwsRwLWeudOVUPPyAKJuzv8pEJU= +github.com/golangci/go-printf-func-name v0.1.0/go.mod h1:wqhWFH5mUdJQhweRnldEywnR5021wTdZSNgwYceV14s= +github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE= +github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY= +github.com/golangci/golangci-lint/v2 v2.1.6 h1:LXqShFfAGM5BDzEOWD2SL1IzJAgUOqES/HRBsfKjI+w= +github.com/golangci/golangci-lint/v2 v2.1.6/go.mod h1:EPj+fgv4TeeBq3TcqaKZb3vkiV5dP4hHHKhXhEhzci8= +github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 h1:AkK+w9FZBXlU/xUmBtSJN1+tAI4FIvy5WtnUnY8e4p8= +github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95/go.mod h1:k9mmcyWKSTMcPPvQUCfRWWQ9VHJ1U9Dc0R7kaXAgtnQ= github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs= github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo= -github.com/golangci/modinfo v0.3.4 h1:oU5huX3fbxqQXdfspamej74DFX0kyGLkw1ppvXoJ8GA= -github.com/golangci/modinfo v0.3.4/go.mod h1:wytF1M5xl9u0ij8YSvhkEVPP3M5Mc7XLl1pxH3B2aUM= github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c= github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc= -github.com/golangci/revgrep v0.5.3 h1:3tL7c1XBMtWHHqVpS5ChmiAAoe4PF/d5+ULzV9sLAzs= -github.com/golangci/revgrep v0.5.3/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k= -github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs= -github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ= +github.com/golangci/revgrep v0.8.0 h1:EZBctwbVd0aMeRnNUsFogoyayvKHyxlV3CdUA46FX2s= +github.com/golangci/revgrep v0.8.0/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k= +github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e h1:gD6P7NEo7Eqtt0ssnqSJNNndxe69DOQ24A5h7+i3KpM= +github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e/go.mod h1:h+wZwLjUTJnm/P2rwlbJdRPZXOzaT36/FwnPnY2inzc= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -254,8 +277,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -266,8 +289,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -276,20 +299,27 @@ github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/comment v1.5.0 h1:X82FLl+TswsUMpMh17srGRuKaaXprTaytmEpgnKIDu8= +github.com/gostaticanalysis/comment v1.5.0/go.mod h1:V6eb3gpCv9GNVqb6amXzEUX3jXLVK/AdA+IrAMSqvEc= +github.com/gostaticanalysis/forcetypeassert v0.2.0 h1:uSnWrrUEYDr86OCxWa4/Tp2jeYDlogZiZHzGkWFefTk= +github.com/gostaticanalysis/forcetypeassert v0.2.0/go.mod h1:M5iPavzE9pPqWyeiVXSFghQjljW1+l/Uke3PXHS6ILY= github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= +github.com/gostaticanalysis/testutil v0.5.0 h1:Dq4wT1DdTwTGCQQv3rl3IvD5Ld0E6HiY+3Zh0sUGqw8= +github.com/gostaticanalysis/testutil v0.5.0/go.mod h1:OLQSbuM6zw2EvCcXTz1lVq5unyoNft372msDY0nY5Hs= +github.com/hashicorp/go-immutable-radix/v2 v2.1.0 h1:CUW5RYIcysz+D3B+l1mDeXrQ7fUvGGCwJfdASSzbrfo= +github.com/hashicorp/go-immutable-radix/v2 v2.1.0/go.mod h1:hgdqLXA4f6NIjRVisM1TJ9aOJVNRqKZj+xDGF6m7PBw= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= @@ -297,14 +327,12 @@ github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSo github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk= -github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jgautheron/goconst v1.8.1 h1:PPqCYp3K/xlOj5JmIe6O1Mj6r1DbkdbLtR3AJuZo414= +github.com/jgautheron/goconst v1.8.1/go.mod h1:A0oxgBCHy55NQn6sYpO7UdnA9p+h7cPtoOZUmvNIako= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jjti/go-spancheck v0.6.2 h1:iYtoxqPMzHUPp7St+5yA8+cONdyXD3ug6KK15n7Pklk= -github.com/jjti/go-spancheck v0.6.2/go.mod h1:+X7lvIrR5ZdUTkxFYqzJ0abr8Sb5LOo80uOhWNqIrYA= +github.com/jjti/go-spancheck v0.6.4 h1:Tl7gQpYf4/TMU7AT84MN83/6PutY21Nb9fuQjFTpRRc= +github.com/jjti/go-spancheck v0.6.4/go.mod h1:yAEYdKJ2lRkDA8g7X+oKUHXOWVAXSBJRv04OhF+QUjk= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -314,15 +342,15 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym7fCjIP8RPos= -github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= -github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0= -github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= +github.com/julz/importas v0.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ= +github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY= +github.com/karamaru-alpha/copyloopvar v1.2.1 h1:wmZaZYIjnJ0b5UoKDjUHrikcV0zuPyyxI4SVplLd2CI= +github.com/karamaru-alpha/copyloopvar v1.2.1/go.mod h1:nFmMlFNlClC2BPvNaHMdkirmTJxVCY0lhxBtlfOypMM= +github.com/kisielk/errcheck v1.9.0 h1:9xt1zI9EBfcYBvdU1nVrzMzzUPUtPKs9bVSIM3TAb3M= +github.com/kisielk/errcheck v1.9.0/go.mod h1:kQxWMMVZgIkDq7U8xtG/n2juOjbLgZtedi0D+/VL/i8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkHAIKE/contextcheck v1.1.5 h1:CdnJh63tcDe53vG+RebdpdXJTc9atMgGqdx8LXxiilg= -github.com/kkHAIKE/contextcheck v1.1.5/go.mod h1:O930cpht4xb1YQpK+1+AgoM3mFsvxr7uyFptcnWTYUA= +github.com/kkHAIKE/contextcheck v1.1.6 h1:7HIyRcnyzxL9Lz06NGhiKvenXq7Zw6Q0UQu/ttjfJCE= +github.com/kkHAIKE/contextcheck v1.1.6/go.mod h1:3dDbMRNBFaq8HFXWC1JyvDSPm43CmE6IuHam8Wr0rkg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -335,43 +363,49 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs= -github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= -github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= -github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= -github.com/lasiar/canonicalheader v1.1.1 h1:wC+dY9ZfiqiPwAexUApFush/csSPXeIi4QqyxXmng8I= -github.com/lasiar/canonicalheader v1.1.1/go.mod h1:cXkb3Dlk6XXy+8MVQnF23CYKWlyA7kfQhSw2CcZtZb0= -github.com/ldez/gomoddirectives v0.2.4 h1:j3YjBIjEBbqZ0NKtBNzr8rtMHTOrLPeiwTkfUJZ3alg= -github.com/ldez/gomoddirectives v0.2.4/go.mod h1:oWu9i62VcQDYp9EQ0ONTfqLNh+mDLWWDO+SO0qSQw5g= -github.com/ldez/tagliatelle v0.5.0 h1:epgfuYt9v0CG3fms0pEgIMNPuFf/LpPIfjk4kyqSioo= -github.com/ldez/tagliatelle v0.5.0/go.mod h1:rj1HmWiL1MiKQuOONhd09iySTEkUuE/8+5jtPYz9xa4= +github.com/kunwardeep/paralleltest v1.0.14 h1:wAkMoMeGX/kGfhQBPODT/BL8XhK23ol/nuQ3SwFaUw8= +github.com/kunwardeep/paralleltest v1.0.14/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk= +github.com/lasiar/canonicalheader v1.1.2 h1:vZ5uqwvDbyJCnMhmFYimgMZnJMjwljN5VGY0VKbMXb4= +github.com/lasiar/canonicalheader v1.1.2/go.mod h1:qJCeLFS0G/QlLQ506T+Fk/fWMa2VmBUiEI2cuMK4djI= +github.com/ldez/exptostd v0.4.3 h1:Ag1aGiq2epGePuRJhez2mzOpZ8sI9Gimcb4Sb3+pk9Y= +github.com/ldez/exptostd v0.4.3/go.mod h1:iZBRYaUmcW5jwCR3KROEZ1KivQQp6PHXbDPk9hqJKCQ= +github.com/ldez/gomoddirectives v0.6.1 h1:Z+PxGAY+217f/bSGjNZr/b2KTXcyYLgiWI6geMBN2Qc= +github.com/ldez/gomoddirectives v0.6.1/go.mod h1:cVBiu3AHR9V31em9u2kwfMKD43ayN5/XDgr+cdaFaKs= +github.com/ldez/grignotin v0.9.0 h1:MgOEmjZIVNn6p5wPaGp/0OKWyvq42KnzAt/DAb8O4Ow= +github.com/ldez/grignotin v0.9.0/go.mod h1:uaVTr0SoZ1KBii33c47O1M8Jp3OP3YDwhZCmzT9GHEk= +github.com/ldez/tagliatelle v0.7.1 h1:bTgKjjc2sQcsgPiT902+aadvMjCeMHrY7ly2XKFORIk= +github.com/ldez/tagliatelle v0.7.1/go.mod h1:3zjxUpsNB2aEZScWiZTHrAXOl1x25t3cRmzfK1mlo2I= +github.com/ldez/usetesting v0.4.3 h1:pJpN0x3fMupdTf/IapYjnkhiY1nSTN+pox1/GyBRw3k= +github.com/ldez/usetesting v0.4.3/go.mod h1:eEs46T3PpQ+9RgN9VjpY6qWdiw2/QmfiDeWmdZdrjIQ= github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= -github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= -github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE= +github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/manuelarte/funcorder v0.2.1 h1:7QJsw3qhljoZ5rH0xapIvjw31EcQeFbF31/7kQ/xS34= +github.com/manuelarte/funcorder v0.2.1/go.mod h1:BQQ0yW57+PF9ZpjpeJDKOffEsQbxDFKW8F8zSMe/Zd0= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc= -github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE= -github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matoous/godox v1.1.0 h1:W5mqwbyWrwZv6OQ5Z1a/DHGMOvXYCBP3+Ht7KMoJhq4= +github.com/matoous/godox v1.1.0/go.mod h1:jgE/3fUXiTurkdHOLT5WEkThTSuE7yxHv5iWPa80afs= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgechev/revive v1.3.9 h1:18Y3R4a2USSBF+QZKFQwVkBROUda7uoBlkEuBD+YD1A= -github.com/mgechev/revive v1.3.9/go.mod h1:+uxEIr5UH0TjXWHTno3xh4u7eg6jDpXKzQccA9UGhHU= +github.com/mgechev/revive v1.9.0 h1:8LaA62XIKrb8lM6VsBSQ92slt/o92z5+hTw3CmrvSrM= +github.com/mgechev/revive v1.9.0/go.mod h1:LAPq3+MgOf7GcL5PlWIkHb0PT7XH4NuC2LdWymhb9Mo= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -383,6 +417,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI= github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= @@ -391,14 +427,14 @@ github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhK github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbnVSxfHJk= -github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ= +github.com/nunnatsa/ginkgolinter v0.19.1 h1:mjwbOlDQxZi9Cal+KfbEJTCz327OLNfwNvoZ70NJ+c4= +github.com/nunnatsa/ginkgolinter v0.19.1/go.mod h1:jkQ3naZDmxaZMXPWaS9rblH+i+GWXQCaS/JFIWcOH2s= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.20.0 h1:PE84V2mHqoT1sglvHc8ZdQtPcwmvvt29WLEEO3xmdZw= -github.com/onsi/ginkgo/v2 v2.20.0/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= +github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= +github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= +github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= @@ -408,16 +444,16 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.6.0 h1:tftWV9DE7txiFzPpztTAwyoRLKNj9gpVm2cg8/OwcYY= -github.com/polyfloyd/go-errorlint v1.6.0/go.mod h1:HR7u8wuP1kb1NeN1zqTd1ZMlqUKPPHF+Id4vIPvDqVw= +github.com/polyfloyd/go-errorlint v1.8.0 h1:DL4RestQqRLr8U4LygLw8g2DX6RN1eBJOpa2mzsrl1Q= +github.com/polyfloyd/go-errorlint v1.8.0/go.mod h1:G2W0Q5roxbLCt0ZQbdoxQxXktTjwNyDbEaj3n7jvl4s= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -442,8 +478,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs= -github.com/quasilyte/go-ruleguard v0.4.2/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI= +github.com/quasilyte/go-ruleguard v0.4.4 h1:53DncefIeLX3qEpjzlS1lyUmQoUEeOWPFWqaTJq9eAQ= +github.com/quasilyte/go-ruleguard v0.4.4/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE= github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE= github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= @@ -452,26 +488,31 @@ github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/raeperd/recvcheck v0.2.0 h1:GnU+NsbiCqdC2XX5+vMZzP+jAJC5fht7rcVTAhX74UI= +github.com/raeperd/recvcheck v0.2.0/go.mod h1:n04eYkwIR0JbgD73wT8wL4JjPC3wm0nFtzBnWNocnYU= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.3.3 h1:eiSQdJVNr9KTNxY2Niij8UReSwR8Xrte3exBrAZfqpg= -github.com/ryancurrah/gomodguard v1.3.3/go.mod h1:rsKQjj4l3LXe8N344Ow7agAy5p9yjsWOtRzUMYmA0QY= +github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g= +github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I= github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= -github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= -github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= +github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0= +github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.27.0 h1:t/3jZpSXtRPRf2xr0m63i32ZrusyurIGT9E5wAvXQnI= -github.com/sashamelentyev/usestdlibvars v1.27.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= -github.com/securego/gosec/v2 v2.20.1-0.20240822074752-ab3f6c1c83a0 h1:VqD4JMoqwuuCz8GZlBDsIDyE6K4YUsWJpbNtuOWHoFk= -github.com/securego/gosec/v2 v2.20.1-0.20240822074752-ab3f6c1c83a0/go.mod h1:iyeMMRw8QEmueUSZ2VqmkQMiDyDcobfPnG00CV/NWdE= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/sashamelentyev/usestdlibvars v1.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxXUzwsMDBkR21cyQ= +github.com/sashamelentyev/usestdlibvars v1.28.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= +github.com/securego/gosec/v2 v2.22.3 h1:mRrCNmRF2NgZp4RJ8oJ6yPJ7G4x6OCiAXHd8x4trLRc= +github.com/securego/gosec/v2 v2.22.3/go.mod h1:42M9Xs0v1WseinaB/BmNGO8AVqG8vRfhC2686ACY48k= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -481,28 +522,27 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE= github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4= -github.com/sivchari/tenv v1.10.0 h1:g/hzMA+dBCKqGXgW8AV/1xIWhAvDrx0zFKNR48NFMg0= -github.com/sivchari/tenv v1.10.0/go.mod h1:tdY24masnVoZFxYrHv/nD6Tc8FbkEtAQEEziXpyMgqY= -github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00= -github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo= +github.com/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM= +github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c= github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= +github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= +github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4= +github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -517,34 +557,38 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM= -github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg= +github.com/tdakkota/asciicheck v0.4.1 h1:bm0tbcmi0jezRA2b5kg4ozmMuGAFotKI3RZfrhfovg8= +github.com/tdakkota/asciicheck v0.4.1/go.mod h1:0k7M3rCfRXb0Z6bwgvkEIMleKH3kXNz9UqJ9Xuqopr8= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.16 h1:4ChfhveiNLk4NveAZ9Pu2AN8QZ2nkUGFuadM9lrr5D0= -github.com/tetafro/godot v1.4.16/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= -github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= -github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= -github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4= -github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg= -github.com/tomarrell/wrapcheck/v2 v2.9.0 h1:801U2YCAjLhdN8zhZ/7tdjB3EnAoRlJHt/s+9hijLQ4= -github.com/tomarrell/wrapcheck/v2 v2.9.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= +github.com/tetafro/godot v1.5.1 h1:PZnjCol4+FqaEzvZg5+O8IY2P3hfY9JzRBNPv1pEDS4= +github.com/tetafro/godot v1.5.1/go.mod h1:cCdPtEndkmqqrhiCfkmxDodMQJ/f3L1BCNskCUZdTwk= +github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 h1:9LPGD+jzxMlnk5r6+hJnar67cgpDIz/iyD+rfl5r2Vk= +github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460= +github.com/timonwong/loggercheck v0.11.0 h1:jdaMpYBl+Uq9mWPXv1r8jc5fC3gyXx4/WGwTnnNKn4M= +github.com/timonwong/loggercheck v0.11.0/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8= +github.com/tomarrell/wrapcheck/v2 v2.11.0 h1:BJSt36snX9+4WTIXeJ7nvHBQBcm1h2SjQMSlmQ6aFSU= +github.com/tomarrell/wrapcheck/v2 v2.11.0/go.mod h1:wFL9pDWDAbXhhPZZt+nG8Fu+h29TtnZ2MW6Lx4BRXIU= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/ultraware/funlen v0.1.0 h1:BuqclbkY6pO+cvxoq7OsktIXZpgBSkYTQtmwhAK81vI= -github.com/ultraware/funlen v0.1.0/go.mod h1:XJqmOQja6DpxarLj6Jj1U7JuoS8PvL4nEqDaQhy22p4= -github.com/ultraware/whitespace v0.1.1 h1:bTPOGejYFulW3PkcrqkeQwOd6NKOOXvmGD9bo/Gk8VQ= -github.com/ultraware/whitespace v0.1.1/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= -github.com/uudashr/gocognit v1.1.3 h1:l+a111VcDbKfynh+airAy/DJQKaXh2m9vkoysMPSZyM= -github.com/uudashr/gocognit v1.1.3/go.mod h1:aKH8/e8xbTRBwjbCkwZ8qt4l2EpKXl31KMHgSS+lZ2U= -github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= -github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= +github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI= +github.com/ultraware/funlen v0.2.0/go.mod h1:ZE0q4TsJ8T1SQcjmkhN/w+MceuatI6pBFSxxyteHIJA= +github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSWoFa+g= +github.com/ultraware/whitespace v0.2.0/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= +github.com/uudashr/gocognit v1.2.0 h1:3BU9aMr1xbhPlvJLSydKwdLN3tEUUrzPSSM8S4hDYRA= +github.com/uudashr/gocognit v1.2.0/go.mod h1:k/DdKPI6XBZO1q7HgoV2juESI2/Ofj9AcHPZhBBdrTU= +github.com/uudashr/iface v1.3.1 h1:bA51vmVx1UIhiIsQFSNq6GZ6VPTk3WNMZgRiCe9R29U= +github.com/uudashr/iface v1.3.1/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg= +github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM= +github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs= @@ -562,10 +606,12 @@ gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo= gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8= go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ= go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= -go-simpler.org/musttag v0.12.2 h1:J7lRc2ysXOq7eM8rwaTYnNrHd5JwjppzB6mScysB2Cs= -go-simpler.org/musttag v0.12.2/go.mod h1:uN1DVIasMTQKk6XSik7yrJoEysGtR2GRqvWnI9S7TYM= -go-simpler.org/sloglint v0.7.2 h1:Wc9Em/Zeuu7JYpl+oKoYOsQSy2X560aVueCW/m6IijY= -go-simpler.org/sloglint v0.7.2/go.mod h1:US+9C80ppl7VsThQclkM7BkCHQAzuz8kHLsW3ppuluo= +go-simpler.org/musttag v0.13.1 h1:lw2sJyu7S1X8lc8zWUAdH42y+afdcCnHhWpnkWvd6vU= +go-simpler.org/musttag v0.13.1/go.mod h1:8r450ehpMLQgvpb6sg+hV5Ur47eH6olp/3yEanfG97k= +go-simpler.org/sloglint v0.11.0 h1:JlR1X4jkbeaffiyjLtymeqmGDKBDO1ikC6rjiuFAOco= +go-simpler.org/sloglint v0.11.0/go.mod h1:CFDO8R1i77dlciGfPEPvYke2ZMx4eyGiEIWkyeW2Pvw= +go.augendre.info/fatcontext v0.8.0 h1:2dfk6CQbDGeu1YocF59Za5Pia7ULeAM6friJ3LP7lmk= +go.augendre.info/fatcontext v0.8.0/go.mod h1:oVJfMgwngMsHO+KB2MdgzcO+RvtNdiCEOlWvSFtax/s= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -573,8 +619,8 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= -go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= @@ -588,7 +634,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -599,12 +646,12 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= -golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac h1:TSSpLIG4v+p0rPv1pNOQtl1I8knsO4S9trOxNMOLVP4= +golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -627,14 +674,15 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -669,12 +717,14 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -694,8 +744,10 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -729,7 +781,6 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -743,20 +794,22 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -765,10 +818,12 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -778,7 +833,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -786,10 +840,8 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -820,20 +872,19 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= -golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -913,8 +964,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -941,12 +992,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= -honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= -mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= -mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= -mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U= -mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ= +honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI= +honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4= +mvdan.cc/gofumpt v0.8.0 h1:nZUCeC2ViFaerTcYKstMmfysj6uhQrA2vJe+2vwGU6k= +mvdan.cc/gofumpt v0.8.0/go.mod h1:vEYnSzyGPmjvFkqJWtXkh79UwPWP9/HMxQdGEXZHjpg= +mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 h1:WjUu4yQoT5BHT1w8Zu56SP8367OuBV5jvo+4Ulppyf8= +mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4/go.mod h1:rthT7OuvRbaGcd5ginj6dA2oLE7YNlta9qhBNNdCaLE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/tools/tools.go b/tools/tools.go index bed84c24..5f744009 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -10,6 +10,6 @@ package tools // // nolint import ( - _ "github.com/golangci/golangci-lint/cmd/golangci-lint" + _ "github.com/golangci/golangci-lint/v2/cmd/golangci-lint" _ "golang.org/x/tools/cmd/goimports" ) From 8b8fb3343f8fb7973870e6d6e423acf2ac889bb5 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 27 Jun 2025 08:03:11 +0200 Subject: [PATCH 68/82] ci: remove goconst --- .golangci.yml | 4 ---- cmd/utils.go | 4 ++-- files/file.go | 1 - files/listing.go | 2 -- http/tus_handlers.go | 2 +- runner/parser.go | 3 ++- 6 files changed, 5 insertions(+), 11 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 10ef904d..4e3a4061 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -13,7 +13,6 @@ linters: - funlen - gocheckcompilerdirectives - gochecknoinits - - goconst - gocritic - gocyclo - godox @@ -43,9 +42,6 @@ linters: funlen: lines: 100 statements: 50 - goconst: - min-len: 2 - min-occurrences: 2 gocritic: disabled-checks: - dupImport # https://github.com/go-critic/go-critic/issues/845 diff --git a/cmd/utils.go b/cmd/utils.go index 902319a9..605020c8 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -121,11 +121,11 @@ func marshal(filename string, data interface{}) error { defer fd.Close() switch ext := filepath.Ext(filename); ext { - case ".json": //nolint:goconst + case ".json": encoder := json.NewEncoder(fd) encoder.SetIndent("", " ") return encoder.Encode(data) - case ".yml", ".yaml": //nolint:goconst + case ".yml", ".yaml": encoder := yaml.NewEncoder(fd) return encoder.Encode(data) default: diff --git a/files/file.go b/files/file.go index 6c985cd6..9f108d11 100644 --- a/files/file.go +++ b/files/file.go @@ -217,7 +217,6 @@ func (i *FileInfo) RealPath() string { return i.Path } -//nolint:goconst func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error { if IsNamedPipe(i.Mode) { i.Type = "blob" diff --git a/files/listing.go b/files/listing.go index bd16afdd..ad60e51e 100644 --- a/files/listing.go +++ b/files/listing.go @@ -16,8 +16,6 @@ type Listing struct { } // ApplySort applies the sort order using .Order and .Sort -// -//nolint:goconst func (l Listing) ApplySort() { // Check '.Order' to know how to sort if !l.Sorting.Asc { diff --git a/http/tus_handlers.go b/http/tus_handlers.go index bd4583cf..7a3254ae 100644 --- a/http/tus_handlers.go +++ b/http/tus_handlers.go @@ -41,7 +41,7 @@ func tusPostHandler() handleFunc { } fileFlags := os.O_CREATE | os.O_WRONLY - if r.URL.Query().Get("override") == "true" { //nolint:goconst + if r.URL.Query().Get("override") == "true" { fileFlags |= os.O_TRUNC } diff --git a/runner/parser.go b/runner/parser.go index 056ff4c8..e1035720 100644 --- a/runner/parser.go +++ b/runner/parser.go @@ -17,7 +17,8 @@ func ParseCommand(s *settings.Settings, raw string) (command []string, name stri command = append(command, name) command = append(command, args...) } else { - command = append(s.Shell, raw) //nolint:gocritic + command = append(command, s.Shell...) + command = append(command, raw) } return command, name, nil From 8230eb7ab51ccbd00b03f5b9d6964fa4aae331d4 Mon Sep 17 00:00:00 2001 From: Adrien Kohlbecker Date: Mon, 14 Apr 2025 15:24:55 +0200 Subject: [PATCH 69/82] fix: Graceful shutdown --- cmd/root.go | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index f4646afe..572536d4 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,6 +1,7 @@ package cmd import ( + "context" "crypto/tls" "errors" "io" @@ -13,6 +14,7 @@ import ( "path/filepath" "strings" "syscall" + "time" homedir "github.com/mitchellh/go-homedir" "github.com/spf13/afero" @@ -167,10 +169,6 @@ user created with the credentials from options "username" and "password".`, checkErr(err) } - sigc := make(chan os.Signal, 1) - signal.Notify(sigc, os.Interrupt, syscall.SIGTERM) - go cleanupHandler(listener, sigc) - assetsFs, err := fs.Sub(frontend.Assets(), "dist") if err != nil { panic(err) @@ -182,18 +180,29 @@ user created with the credentials from options "username" and "password".`, defer listener.Close() log.Println("Listening on", listener.Addr().String()) - //nolint: gosec - if err := http.Serve(listener, handler); err != nil { - log.Fatal(err) - } - }, pythonConfig{allowNoDB: true}), -} + srv := &http.Server{Handler: handler} -func cleanupHandler(listener net.Listener, c chan os.Signal) { - sig := <-c - log.Printf("Caught signal %s: shutting down.", sig) - listener.Close() - os.Exit(0) + go func() { + if err := srv.Serve(listener); !errors.Is(err, http.ErrServerClosed) { + log.Fatalf("HTTP server error: %v", err) + } + + log.Println("Stopped serving new connections.") + }() + + sigc := make(chan os.Signal, 1) + signal.Notify(sigc, os.Interrupt, syscall.SIGTERM) + <-sigc + + shutdownCtx, shutdownRelease := context.WithTimeout(context.Background(), 10*time.Second) + defer shutdownRelease() + + if err := srv.Shutdown(shutdownCtx); err != nil { + log.Fatalf("HTTP shutdown error: %v", err) + } + log.Println("Graceful shutdown complete.") + + }, pythonConfig{allowNoDB: true}), } //nolint:gocyclo From ae4fb0ea2593a18e3b8ea159538150405d80c87a Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 27 Jun 2025 08:15:39 +0200 Subject: [PATCH 70/82] chore: make as exception to mnd --- .golangci.yml | 4 ++++ cmd/root.go | 12 +++++++----- cmd/utils.go | 2 +- diskcache/file_cache.go | 4 ++-- files/file.go | 2 +- http/share.go | 4 ++-- img/service.go | 2 +- settings/settings.go | 2 +- 8 files changed, 19 insertions(+), 13 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 4e3a4061..901a89b8 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -77,8 +77,12 @@ linters: - "1" - "2" - "3" + - "0666" + - "0700" + - "0700" ignored-functions: - strings.SplitN + - make nolintlint: allow-unused: false # report any unused nolint directives require-explanation: false # require an explanation for nolint directives diff --git a/cmd/root.go b/cmd/root.go index 572536d4..d9f37889 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -63,7 +63,7 @@ func addServerFlags(flags *pflag.FlagSet) { flags.StringP("key", "k", "", "tls key") flags.StringP("root", "r", ".", "root to prepend to relative paths") flags.String("socket", "", "socket to listen to (cannot be used with address, port, cert nor key flags)") - flags.Uint32("socket-perm", 0666, "unix socket file permissions") //nolint:mnd + flags.Uint32("socket-perm", 0666, "unix socket file permissions") flags.StringP("baseurl", "b", "", "base url") flags.String("cache-dir", "", "file cache directory (disabled if empty)") flags.String("token-expiration-time", "2h", "user session timeout") @@ -131,7 +131,7 @@ user created with the credentials from options "username" and "password".`, cacheDir, err := cmd.Flags().GetString("cache-dir") checkErr(err) if cacheDir != "" { - if err := os.MkdirAll(cacheDir, 0700); err != nil { //nolint:govet,mnd + if err := os.MkdirAll(cacheDir, 0700); err != nil { //nolint:govet log.Fatalf("can't make directory %s: %s", cacheDir, err) } fileCache = diskcache.New(afero.NewOsFs(), cacheDir) @@ -180,7 +180,10 @@ user created with the credentials from options "username" and "password".`, defer listener.Close() log.Println("Listening on", listener.Addr().String()) - srv := &http.Server{Handler: handler} + srv := &http.Server{ + Handler: handler, + ReadHeaderTimeout: 60 * time.Second, + } go func() { if err := srv.Serve(listener); !errors.Is(err, http.ErrServerClosed) { @@ -194,14 +197,13 @@ user created with the credentials from options "username" and "password".`, signal.Notify(sigc, os.Interrupt, syscall.SIGTERM) <-sigc - shutdownCtx, shutdownRelease := context.WithTimeout(context.Background(), 10*time.Second) + shutdownCtx, shutdownRelease := context.WithTimeout(context.Background(), 10*time.Second) //nolint:mnd defer shutdownRelease() if err := srv.Shutdown(shutdownCtx); err != nil { log.Fatalf("HTTP shutdown error: %v", err) } log.Println("Graceful shutdown complete.") - }, pythonConfig{allowNoDB: true}), } diff --git a/cmd/utils.go b/cmd/utils.go index 605020c8..909a1558 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -73,7 +73,7 @@ func dbExists(path string) (bool, error) { d := filepath.Dir(path) _, err = os.Stat(d) if os.IsNotExist(err) { - if err := os.MkdirAll(d, 0700); err != nil { //nolint:govet,mnd + if err := os.MkdirAll(d, 0700); err != nil { //nolint:govet return false, err } return false, nil diff --git a/diskcache/file_cache.go b/diskcache/file_cache.go index 26d5e336..cd5e27c7 100644 --- a/diskcache/file_cache.go +++ b/diskcache/file_cache.go @@ -37,11 +37,11 @@ func (f *FileCache) Store(_ context.Context, key string, value []byte) error { defer mu.Unlock() fileName := f.getFileName(key) - if err := f.fs.MkdirAll(filepath.Dir(fileName), 0700); err != nil { //nolint:mnd + if err := f.fs.MkdirAll(filepath.Dir(fileName), 0700); err != nil { return err } - if err := afero.WriteFile(f.fs, fileName, value, 0700); err != nil { //nolint:mnd + if err := afero.WriteFile(f.fs, fileName, value, 0700); err != nil { return err } diff --git a/files/file.go b/files/file.go index 9f108d11..d3513efb 100644 --- a/files/file.go +++ b/files/file.go @@ -313,7 +313,7 @@ func (i *FileInfo) readFirstBytes() []byte { } defer reader.Close() - buffer := make([]byte, 512) //nolint:mnd + buffer := make([]byte, 512) n, err := reader.Read(buffer) if err != nil && !errors.Is(err, io.EOF) { log.Print(err) diff --git a/http/share.go b/http/share.go index 360d812c..e1036d2a 100644 --- a/http/share.go +++ b/http/share.go @@ -91,7 +91,7 @@ var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request defer r.Body.Close() } - bytes := make([]byte, 6) //nolint:mnd + bytes := make([]byte, 6) _, err := rand.Read(bytes) if err != nil { return http.StatusInternalServerError, err @@ -130,7 +130,7 @@ var sharePostHandler = withPermShare(func(w http.ResponseWriter, r *http.Request var token string if len(hash) > 0 { - tokenBuffer := make([]byte, 96) //nolint:mnd + tokenBuffer := make([]byte, 96) if _, err := rand.Read(tokenBuffer); err != nil { return http.StatusInternalServerError, err } diff --git a/img/service.go b/img/service.go index c949a911..2791c387 100644 --- a/img/service.go +++ b/img/service.go @@ -207,7 +207,7 @@ func getEmbeddedThumbnail(in io.Reader) ([]byte, io.Reader, error) { offset := 0 offsets := []int{12, 30} - head := make([]byte, 0xffff) //nolint:mnd + head := make([]byte, 0xffff) _, err := r.Read(head) if err != nil { diff --git a/settings/settings.go b/settings/settings.go index b12ae826..86518a3a 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -72,7 +72,7 @@ func (s *Server) GetTokenExpirationTime(fallback time.Duration) time.Duration { // GenerateKey generates a key of 512 bits. func GenerateKey() ([]byte, error) { - b := make([]byte, 64) //nolint:mnd + b := make([]byte, 64) _, err := rand.Read(b) // Note that err == nil only if we read len(b) bytes. if err != nil { From 0acd69c537ce2909ff62c4bb6980982524ece221 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 27 Jun 2025 18:09:32 +0200 Subject: [PATCH 71/82] feat: Translate frontend/src/i18n/en.json in fa --- frontend/src/i18n/fa.json | 265 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 frontend/src/i18n/fa.json diff --git a/frontend/src/i18n/fa.json b/frontend/src/i18n/fa.json new file mode 100644 index 00000000..448e26a7 --- /dev/null +++ b/frontend/src/i18n/fa.json @@ -0,0 +1,265 @@ +{ + "buttons": { + "cancel": "لغو", + "clear": "پاک کردن", + "close": "بستن", + "continue": "ادامه", + "copy": "کپی", + "copyFile": "کپی فایل", + "copyToClipboard": "کپی به حافظه", + "copyDownloadLinkToClipboard": "کپی آدرس به حافظه", + "create": "ایجاد", + "delete": "حذف", + "download": "دانلود", + "file": "فایل", + "folder": "پوشه", + "fullScreen": "تمام صفحه ", + "hideDotfiles": "مخفی کردن دات فایلها", + "info": "اطلاعات", + "more": "بیشتر", + "move": "انتقال", + "moveFile": "انتقال فایل", + "new": "جدید", + "next": "بعدی", + "ok": "تایید", + "permalink": "دریافت لینک دائمی", + "previous": "قبلی", + "preview": "نمایش", + "publish": "انتشار", + "rename": "تغییر نام", + "replace": "جایگزین", + "reportIssue": "گزارش مشکل", + "save": "ذخیره", + "schedule": "زمان بندی", + "search": "جستجو", + "select": "انتخاب", + "selectMultiple": "انتخاب چندتایی", + "share": "اشتراک گذاری", + "shell": "تغییر پوسته", + "submit": "ثبت", + "switchView": "تغییر نمایش", + "toggleSidebar": "تغییر نوارکناری", + "update": "به روز سانی", + "upload": "آپلود", + "openFile": "باز کردن فایل", + "discardChanges": "لغو کردن" + }, + "download": { + "downloadFile": "دانلود فایل", + "downloadFolder": "دانلود پوشه", + "downloadSelected": "دانلود انتخاب شده ها" + }, + "upload": { + "abortUpload": "آیا مطمئن هستید که میخواهید لغو کنید؟" + }, + "errors": { + "forbidden": "شما مجوز دسترسی به این را ندارید.", + "internal": "اشتباهی اتفاق افتاده است", + "notFound": "این محل قابل دسترسی نیست", + "connection": "سرور قابل دسترسی نیست" + }, + "files": { + "body": "بدنه", + "closePreview": "بستن نمایش", + "files": "فایل ها", + "folders": "پوشه ها", + "home": "صفحه اصلی", + "lastModified": "آخرین ویرایش", + "loading": "در حال بارگذاری...", + "lonely": "It feels lonely here...", + "metadata": "فراداده", + "multipleSelectionEnabled": "فعال بودن چند گزینه ای", + "name": "نام", + "size": "اندازه", + "sortByLastModified": "مرتب سازی آخرین ویرایش", + "sortByName": "مرتب سازی نام", + "sortBySize": "مرتب سازی اندازه", + "noPreview": "این فایل قابل نمایش نیست" + }, + "help": { + "click": "انتخاب فایل یا پوشه", + "ctrl": { + "click": "انتخاب چند فایل یا پوشه", + "f": "باز کردن جستجو", + "s": "ذخیره یک فایل یا دانلود پوشه جاری" + }, + "del": "حذف گزینه انتخابی ", + "doubleClick": "باز کردن فایل یا پوشه", + "esc": "لغو انتخاب و/یا بستن پیغام", + "f1": "این اطلاعات", + "f2": "تغییر نام فایل", + "help": "راهنما" + }, + "login": { + "createAnAccount": "ایجاد کاربر", + "loginInstead": "کاربر تکراری", + "password": "رمز عبور", + "passwordConfirm": "تایید رمز", + "passwordsDontMatch": "عدم تطابق رمزها", + "signup": "ثبت نام", + "submit": "ورود", + "username": "نام کاربری", + "usernameTaken": "نام کاربری تکراری", + "wrongCredentials": "خطا در اعتبارسنجی" + }, + "permanent": "دائمی", + "prompts": { + "copy": "کپی", + "copyMessage": "انتخاب محل برای کپی فایل به آنجا ", + "currentlyNavigating": "در حال پیمایش", + "deleteMessageMultiple": "آیا مطمئنید که می‌خواهید {count} فایل را حذف کنید؟", + "deleteMessageSingle": "آیا مطمئنید که میخواهید فایل/پوشه را حذف کنید؟", + "deleteMessageShare": "آیا مطمئن هستید که می‌خواهید این اشتراک‌گذاری ({path}) را حذف کنید؟", + "deleteUser": "آیا مطمئنید که میخواهید این کاربر را حذف کنید؟", + "deleteTitle": "حذف فایل ها", + "displayName": "نمایش نام:", + "download": "دانلود فایل ها", + "downloadMessage": "نوع فایلی که میخواهید دانلود کنید را انتخاب کنید ", + "error": "اشتباهی رخ داده", + "fileInfo": "اطلاعات فایل ", + "filesSelected": "{count} فایل انتخاب شد.", + "lastModified": "آخرین ویرایش", + "move": "انتقال", + "moveMessage": "محل جدیدی برای فایل(ها)/پوشه(های) خود انتخاب کنید:", + "newArchetype": "یک پست جدید بر اساس یک آرکتایپ ایجاد کنید. فایل شما در پوشه محتوا ایجاد خواهد شد.", + "newDir": "پوشه جدید", + "newDirMessage": "نام پوشه جدید", + "newFile": "فایل جدید", + "newFileMessage": "نام فایل جدید", + "numberDirs": "تعداد پوشه ها", + "numberFiles": "تعداد فایل ها", + "rename": "تغییر نام", + "renameMessage": "ورود نام جدید برای", + "replace": "جایگزین کردن", + "replaceMessage": "یکی از فایل‌هایی که می‌خواهید آپلود کنید، نام متفاوتی دارد. آیا می‌خواهید از این فایل صرف نظر کنید و به آپلود ادامه دهید یا فایل موجود را جایگزین کنید؟", + "schedule": "زمان بندی", + "scheduleMessage": "تاریخ و زمانی را برای برنامه‌ریزی انتشار این پست انتخاب کنید", + "show": "نمایش", + "size": "اندازه", + "upload": "آپلود", + "uploadFiles": "در حال آپلود {files} فایل‌ها...", + "uploadMessage": "یک گزینه برای آپلود انتخاب کنید.", + "optionalPassword": "رمز عبور اختیاری", + "resolution": "وضوح تصویر", + "discardEditorChanges": "آیا مطمئن هستید که می‌خواهید تغییراتی را که ایجاد کرده‌اید، لغو کنید؟" + }, + "search": { + "images": "تصاویر", + "music": "موسیقی", + "pdf": "پی دی اف", + "pressToSearch": "برای جستجو enter را بزنید...", + "search": "جستجو...", + "typeToSearch": "تایپ برای جستجو", + "types": "انواع", + "video": "ویدئو " + }, + "settings": { + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "اجرای دستورات", + "allowEdit": "ویرایش، تغییر نام، و حذف فایل ها و پوشه ها", + "allowNew": "ایجاد فایلها و پوشه های جدید", + "allowPublish": "انتشار پست ها و صفحات جدید", + "allowSignup": "اجاره دادن به کاربران برای ثبت نام", + "avoidChanges": "(خالی بگذارید تا تغییر ایجاد نشود)", + "branding": "برندسازی", + "brandingDirectoryPath": "مسیر پوشه برند", + "brandingHelp": "شما می‌توانید ظاهر و حس نمونه‌ی مرورگر فایل خود را با تغییر نام، جایگزینی لوگو، اضافه کردن سبک‌های سفارشی و حتی غیرفعال کردن لینک‌های خارجی به گیت‌هاب، سفارشی کنید.\nبرای اطلاعات بیشتر در مورد برندسازی سفارشی، لطفاً به {0} مراجعه کنید.", + "changePassword": "تعبیر رمز", + "commandRunner": "اجرا کننده دستورات", + "commandRunnerHelp": "در اینجا می‌توانید دستوراتی را که در رویدادهای نامگذاری شده اجرا می‌شوند، تنظیم کنید. باید در هر خط یکی را بنویسید. متغیرهای محیطی {0} و {1} در دسترس خواهند بود و {0} نسبت به {1} هستند. برای اطلاعات بیشتر در مورد این ویژگی و متغیرهای محیطی موجود، لطفاً {2} را مطالعه کنید.", + "commandsUpdated": "دستورات ویرایش شد!", + "createUserDir": "ایجاد خودکار پوشه برای هر کاربر هنگام اضافه کردن کاربر جدید", + "tusUploads": "آپلودهای بخش بخش شده", + "tusUploadsHelp": "مرورگر فایل از آپلود فایل بخش بخش شده پشتیبانی می‌کند و امکان ایجاد آپلودهای فایل کارآمد، قابل اعتماد، قابل از سرگیری و بخش بخش شده را حتی در شبکه‌های غیرقابل اعتماد فراهم می‌کند.", + "tusUploadsChunkSize": "حداکثر اندازه یک درخواست را نشان می‌دهد (برای آپلودهای کوچک‌تر از آپلود مستقیم استفاده می‌شود). می‌توانید یک عدد صحیح ساده که نشان‌دهنده اندازه بایت است یا یک رشته مانند ۱۰ مگابایت، ۱ گیگابایت و غیره وارد کنید.", + "tusUploadsRetryCount": "تعداد تلاش‌های مجدد برای انجام در صورت عدم موفقیت در آپلود یک قطعه داده.", + "userHomeBasePath": "مسیر پایه برای پوشه های کاربر", + "userScopeGenerationPlaceholder": "محدوده به صورت خودکار تولید خواهد شد", + "createUserHomeDirectory": "ایجاد پوشه ناحیه کاربری", + "customStylesheet": "Stylesheet سفارشی", + "defaultUserDescription": "این تنظیمات پیش‌فرض برای کاربران جدید است.", + "disableExternalLinks": "غیرفعال کردن لینک‌های خارجی (به جز مستندات)", + "disableUsedDiskPercentage": "نمودار درصد دیسک استفاده شده را غیرفعال کنید", + "documentation": "مستندسازی", + "examples": "مثال ها", + "executeOnShell": "اجرا روی shell", + "executeOnShellDescription": "به طور پیش‌فرض، مرورگر فایل، دستورات را با فراخوانی مستقیم فایل‌های باینری آنها اجرا می‌کند. اگر می‌خواهید آنها را روی یک پوسته (مانند Bash یا PowerShell) اجرا کنید، می‌توانید آن را در اینجا با آرگومان‌ها و پرچم‌های مورد نیاز تعریف کنید. در صورت تنظیم، دستوری که اجرا می‌کنید به عنوان یک آرگومان پیوست می‌شود. این موضوع هم در مورد دستورات کاربر و هم در مورد هوک ها صدق می‌کند.", + "globalRules": "این یک مجموعه جهانی از قوانین مجاز و غیرمجاز است. آنها برای هر کاربر اعمال می‌شوند. شما می‌توانید قوانین خاصی را در تنظیمات هر کاربر تعریف کنید تا این قوانین را لغو کنید.", + "globalSettings": "تنظیمات سراسری", + "hideDotfiles": "مخفی کردن دات فایل ها", + "insertPath": "وارد کردن مسیر", + "insertRegex": "وارد کردن عبارات باقاعده", + "instanceName": "نام نمونه", + "language": "زبان", + "lockPassword": "جلوگیری از تغییر رمز توسط کاربر", + "newPassword": "رمز جدید شما", + "newPasswordConfirm": "تایید رمز جدید شما", + "newUser": "کاربر جدید ", + "password": " رمز عبور", + "passwordUpdated": "رمز عبور ویرایش شد!", + "path": "مسیر", + "perm": { + "create": "استاد فایل ها و پوشه ها", + "delete": "حذف فایل ها و پوشه ها", + "download": "دانلود", + "execute": "اجرای دستورات", + "modify": "ویرایش فایل ها", + "rename": "تغییر نام یا انتقال فایل ها و پوشه ها", + "share": "به اشتراک گذاری فایل ها" + }, + "permissions": "دسترسی ها", + "permissionsHelp": "شما می‌توانید کاربر را به عنوان مدیر تنظیم کنید یا دسترسی‌ها را به صورت جداگانه انتخاب کنید. اگر \"مدیر\" را انتخاب کنید، تمام گزینه‌های دیگر به طور خودکار اعمال می‌شوند. مدیریت کاربران همچنان از اختیارات مدیر است.", + "profileSettings": "تنظیمات ناحیه کاربری", + "ruleExample1": "از دسترسی به هرگونه فایل نقطه‌ای (مانند .git، .gitignore) در هر پوشه جلوگیری می‌کند.", + "ruleExample2": "دسترسی به فایلی به نام Caddyfile را در ریشه دامنه مسدود می‌کند.", + "rules": "قواعد", + "rulesHelp": "در اینجا می‌توانید مجموعه‌ای از قوانین مجاز و غیرمجاز را برای این کاربر خاص تعریف کنید. فایل‌های مسدود شده در لیست‌ها نمایش داده نمی‌شوند و کاربر به آنها دسترسی نخواهد داشت. ما از regex و مسیرهای مربوط به محدوده کاربر پشتیبانی می‌کنیم.", + "scope": "محدوده", + "setDateFormat": "تنظیم قالب دقیق تاریخ", + "settingsUpdated": "تنظیمات به روز شد!", + "shareDuration": "زمان به اشتراک گذاری", + "shareManagement": "مدیریت به اشتراک گذاری", + "shareDeleted": "به اشتراک گذاری حذف شد!", + "singleClick": "استفاده از یک کلیک برای باز کردن فایل ها و پوشه ها", + "themes": { + "default": "تنظیمات پیش فرض سیستم", + "dark": "تاریک ", + "light": "روشن", + "title": "تم یا زمینه" + }, + "user": "کاربر", + "userCommands": "دستورات", + "userCommandsHelp": "فهرستی از دستورات موجود برای این کاربر که با فاصله از هم جدا شده‌اند. مثال:", + "userCreated": "کاربر ایجاد شد", + "userDefaults": "تنظیمات پیش فرض کاربر", + "userDeleted": "کاربر حذف شد", + "userManagement": "مدیریت کاربران", + "userUpdated": "کاربر به روز شد!", + "username": "نام کاربری", + "users": "کاربران" + }, + "sidebar": { + "help": "راهنما", + "hugoNew": "Hugo New", + "login": "ورود", + "logout": "خروج از حساب", + "myFiles": "فایل های من", + "newFile": "فایل جدید", + "newFolder": "پوشه جدید", + "preview": "نمایش", + "settings": "تنظیمات", + "signup": "ثبت نام", + "siteSettings": "تنظیمات سایت " + }, + "success": { + "linkCopied": "لینک کپی شد!" + }, + "time": { + "days": "روزها", + "hours": "ساعت", + "minutes": "دقیقه", + "seconds": "ثانیه", + "unit": "واحد زمان" + } +} From f32f27383d1fafa074f038cc873bd37b7f20ee27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 16:34:38 +0000 Subject: [PATCH 72/82] build(deps): bump github.com/go-viper/mapstructure/v2 Bumps [github.com/go-viper/mapstructure/v2](https://github.com/go-viper/mapstructure) from 2.2.1 to 2.3.0. - [Release notes](https://github.com/go-viper/mapstructure/releases) - [Changelog](https://github.com/go-viper/mapstructure/blob/main/CHANGELOG.md) - [Commits](https://github.com/go-viper/mapstructure/compare/v2.2.1...v2.3.0) --- updated-dependencies: - dependency-name: github.com/go-viper/mapstructure/v2 dependency-version: 2.3.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b6a574d2..90e05b2b 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-errors/errors v1.5.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/go-viper/mapstructure/v2 v2.3.0 // indirect github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/go.sum b/go.sum index b98d8ecb..27e66a86 100644 --- a/go.sum +++ b/go.sum @@ -58,8 +58,8 @@ github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3Bop github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= -github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk= +github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= From 5331969163f5ae1fd2389f665059fc9e4a98db15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 19:45:43 +0000 Subject: [PATCH 73/82] build(deps): bump github.com/go-viper/mapstructure/v2 in /tools Bumps [github.com/go-viper/mapstructure/v2](https://github.com/go-viper/mapstructure) from 2.2.1 to 2.3.0. - [Release notes](https://github.com/go-viper/mapstructure/releases) - [Changelog](https://github.com/go-viper/mapstructure/blob/main/CHANGELOG.md) - [Commits](https://github.com/go-viper/mapstructure/compare/v2.2.1...v2.3.0) --- updated-dependencies: - dependency-name: github.com/go-viper/mapstructure/v2 dependency-version: 2.3.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index a41dc53f..492fb904 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -69,7 +69,7 @@ require ( github.com/go-toolsmith/astp v1.1.0 // indirect github.com/go-toolsmith/strparse v1.1.0 // indirect github.com/go-toolsmith/typep v1.1.0 // indirect - github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/go-viper/mapstructure/v2 v2.3.0 // indirect github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gofrs/flock v0.12.1 // indirect diff --git a/tools/go.sum b/tools/go.sum index 0aa9ef8b..40279fb5 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -207,8 +207,8 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= -github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= -github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk= +github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUWY= github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= From 089255997a653c284cd4249990b58bed00086c61 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 28 Jun 2025 08:40:07 +0200 Subject: [PATCH 74/82] fix: do not expose the name of the root directory (#5224) --- files/file.go | 5 +++++ frontend/src/views/Files.vue | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/files/file.go b/files/file.go index d3513efb..1ba1cd58 100644 --- a/files/file.go +++ b/files/file.go @@ -86,6 +86,11 @@ func NewFileInfo(opts *FileOptions) (*FileInfo, error) { return nil, err } + // Do not expose the name of root directory. + if file.Path == "/" { + file.Name = "" + } + if opts.Expand { if file.IsDir { if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil { //nolint:govet diff --git a/frontend/src/views/Files.vue b/frontend/src/views/Files.vue index e05dbed9..39dceeff 100644 --- a/frontend/src/views/Files.vue +++ b/frontend/src/views/Files.vue @@ -150,7 +150,7 @@ const fetchData = async () => { } fileStore.updateRequest(res); - document.title = `${res.name} - ${t("files.files")} - ${name}`; + document.title = `${res.name || t("sidebar.myFiles")} - ${t("files.files")} - ${name}`; } catch (err) { if (err instanceof Error) { error.value = err; From 464b644adf22a2178414a6f1e4fa286276de81d2 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sat, 28 Jun 2025 10:07:34 +0200 Subject: [PATCH 75/82] fix: add configurable minimum password length (#5225) --- README.md | 4 --- auth/hook.go | 4 +-- auth/proxy.go | 8 ++---- cmd/config.go | 2 ++ cmd/config_init.go | 13 +++++---- cmd/config_set.go | 2 ++ cmd/root.go | 13 +++++---- cmd/users_add.go | 2 +- cmd/users_update.go | 6 ++-- docs/configuration.md | 13 +++++---- errors/errors.go | 1 + frontend/src/i18n/en.json | 1 + frontend/src/types/settings.d.ts | 1 + frontend/src/views/settings/Global.vue | 28 ++++++++++++------ http/auth.go | 2 +- http/data.go | 3 ++ http/settings.go | 39 ++++++++++++++------------ http/users.go | 14 +++++++-- settings/settings.go | 24 ++++++++-------- settings/storage.go | 3 ++ users/password.go | 16 ++++++++--- 21 files changed, 122 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index f8331e21..ab8a120c 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,6 @@ File Browser is a **create-your-own-cloud-kind** of software where you can insta | :----------------------: | :----------------------: | :----------------------: | | ![](./docs/assets/4.jpg) | ![](./docs/assets/5.jpg) | ![](./docs/assets/6.jpg) | -> [!CAUTION] -> -> The **command execution** functionality has been disabled for all existent and new installations by default from version v2.33.8 and onwards, due to continuous and known security vulnerabilities. You should only use this feature if you are aware of all of the security risks involved. For more up to date information, consult issue [#5199](https://github.com/filebrowser/filebrowser/issues/5199). - ## Install For information on how to install File Browser, please check [docs/installation.md](./docs/installation.md). diff --git a/auth/hook.go b/auth/hook.go index c659e57b..9ccbd2fe 100644 --- a/auth/hook.go +++ b/auth/hook.go @@ -150,7 +150,7 @@ func (a *HookAuth) SaveUser() (*users.User, error) { } if u == nil { - pass, err := users.HashPwd(a.Cred.Password) + pass, err := users.HashAndValidatePwd(a.Cred.Password, a.Settings.MinimumPasswordLength) if err != nil { return nil, err } @@ -186,7 +186,7 @@ func (a *HookAuth) SaveUser() (*users.User, error) { // update the password when it doesn't match the current if p { - pass, err := users.HashPwd(a.Cred.Password) + pass, err := users.HashAndValidatePwd(a.Cred.Password, a.Settings.MinimumPasswordLength) if err != nil { return nil, err } diff --git a/auth/proxy.go b/auth/proxy.go index 0e954309..61312f1a 100644 --- a/auth/proxy.go +++ b/auth/proxy.go @@ -1,7 +1,6 @@ package auth import ( - "crypto/rand" "errors" "net/http" @@ -29,15 +28,14 @@ func (a ProxyAuth) Auth(r *http.Request, usr users.Store, setting *settings.Sett } func (a ProxyAuth) createUser(usr users.Store, setting *settings.Settings, srv *settings.Server, username string) (*users.User, error) { - const passwordSize = 32 - randomPasswordBytes := make([]byte, passwordSize) - _, err := rand.Read(randomPasswordBytes) + const randomPasswordLength = settings.DefaultMinimumPasswordLength + 10 + pwd, err := users.RandomPwd(randomPasswordLength) if err != nil { return nil, err } var hashedRandomPassword string - hashedRandomPassword, err = users.HashPwd(string(randomPasswordBytes)) + hashedRandomPassword, err = users.HashAndValidatePwd(pwd, setting.MinimumPasswordLength) if err != nil { return nil, err } diff --git a/cmd/config.go b/cmd/config.go index de55c28e..3ee8dab8 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -32,6 +32,7 @@ func addConfigFlags(flags *pflag.FlagSet) { addUserFlags(flags) flags.BoolP("signup", "s", false, "allow users to signup") flags.Bool("create-user-dir", false, "generate user's home directory automatically") + flags.Uint("minimum-password-length", settings.DefaultMinimumPasswordLength, "minimum password length for new users") flags.String("shell", "", "shell command to which other commands should be appended") flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type") @@ -144,6 +145,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "Sign up:\t%t\n", set.Signup) fmt.Fprintf(w, "Create User Dir:\t%t\n", set.CreateUserDir) + fmt.Fprintf(w, "Minimum Password Length:\t%d\n", set.MinimumPasswordLength) fmt.Fprintf(w, "Auth method:\t%s\n", set.AuthMethod) fmt.Fprintf(w, "Shell:\t%s\t\n", strings.Join(set.Shell, " ")) fmt.Fprintln(w, "\nBranding:") diff --git a/cmd/config_init.go b/cmd/config_init.go index 60a0f37b..d9710514 100644 --- a/cmd/config_init.go +++ b/cmd/config_init.go @@ -29,12 +29,13 @@ override the options.`, authMethod, auther := getAuthentication(flags) s := &settings.Settings{ - Key: generateKey(), - Signup: mustGetBool(flags, "signup"), - CreateUserDir: mustGetBool(flags, "create-user-dir"), - Shell: convertCmdStrToCmdArray(mustGetString(flags, "shell")), - AuthMethod: authMethod, - Defaults: defaults, + Key: generateKey(), + Signup: mustGetBool(flags, "signup"), + CreateUserDir: mustGetBool(flags, "create-user-dir"), + MinimumPasswordLength: mustGetUint(flags, "minimum-password-length"), + Shell: convertCmdStrToCmdArray(mustGetString(flags, "shell")), + AuthMethod: authMethod, + Defaults: defaults, Branding: settings.Branding{ Name: mustGetString(flags, "branding.name"), DisableExternal: mustGetBool(flags, "branding.disableExternal"), diff --git a/cmd/config_set.go b/cmd/config_set.go index 23ff7e1b..05816795 100644 --- a/cmd/config_set.go +++ b/cmd/config_set.go @@ -51,6 +51,8 @@ you want to change. Other options will remain unchanged.`, set.Shell = convertCmdStrToCmdArray(mustGetString(flags, flag.Name)) case "create-user-dir": set.CreateUserDir = mustGetBool(flags, flag.Name) + case "minimum-password-length": + set.MinimumPasswordLength = mustGetUint(flags, flag.Name) case "branding.name": set.Branding.Name = mustGetString(flags, flag.Name) case "branding.color": diff --git a/cmd/root.go b/cmd/root.go index d9f37889..c2ee7c73 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -365,10 +365,11 @@ func setupLog(logMethod string) { func quickSetup(flags *pflag.FlagSet, d pythonData) { set := &settings.Settings{ - Key: generateKey(), - Signup: false, - CreateUserDir: false, - UserHomeBasePath: settings.DefaultUsersHomeBasePath, + Key: generateKey(), + Signup: false, + CreateUserDir: false, + MinimumPasswordLength: settings.DefaultMinimumPasswordLength, + UserHomeBasePath: settings.DefaultUsersHomeBasePath, Defaults: settings.UserDefaults{ Scope: ".", Locale: "en", @@ -426,12 +427,12 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { if password == "" { var pwd string - pwd, err = users.RandomPwd() + pwd, err = users.RandomPwd(set.MinimumPasswordLength) checkErr(err) log.Println("Randomly generated password for user 'admin':", pwd) - password, err = users.HashPwd(pwd) + password, err = users.HashAndValidatePwd(pwd, set.MinimumPasswordLength) checkErr(err) } diff --git a/cmd/users_add.go b/cmd/users_add.go index e7f132ed..4b344107 100644 --- a/cmd/users_add.go +++ b/cmd/users_add.go @@ -21,7 +21,7 @@ var usersAddCmd = &cobra.Command{ checkErr(err) getUserDefaults(cmd.Flags(), &s.Defaults, false) - password, err := users.HashPwd(args[1]) + password, err := users.HashAndValidatePwd(args[1], s.MinimumPasswordLength) checkErr(err) user := &users.User{ diff --git a/cmd/users_update.go b/cmd/users_update.go index 822bb6dc..aa06abee 100644 --- a/cmd/users_update.go +++ b/cmd/users_update.go @@ -27,8 +27,10 @@ options you want to change.`, password := mustGetString(flags, "password") newUsername := mustGetString(flags, "username") + s, err := d.store.Settings.Get() + checkErr(err) + var ( - err error user *users.User ) @@ -64,7 +66,7 @@ options you want to change.`, } if password != "" { - user.Password, err = users.HashPwd(password) + user.Password, err = users.HashAndValidatePwd(password, s.MinimumPasswordLength) checkErr(err) } diff --git a/docs/configuration.md b/docs/configuration.md index e38744d4..2add31e7 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -123,20 +123,21 @@ filebrowser cmds ls Or you can use the web interface to manage them via **Settings** → **Global Settings**. +## Command Execution -## Shell commands +> [!CAUTION] +> +> The **command execution** functionality has been disabled for all existent and new installations by default from version v2.33.8 and onwards, due to continuous and known security vulnerabilities. You should only use this feature if you are aware of all of the security risks involved. For more up to date information, consult issue [#5199](https://github.com/filebrowser/filebrowser/issues/5199). -Within Filebrowser you can toggle the shell (`< >` icon at the top right) and this will open a shell command window at the bottom of the screen. +Within File Browser you can toggle the shell (`< >` icon at the top right) and this will open a shell command window at the bottom of the screen. This functionality can be turned on using the environment variable `FB_DISABLE_EXEC=false` or the flag `--disable-exec=false`. -**By default no commands are available as the command list is empty** - -To enable commands these need to either be done on a per-user basis (including for the Admin user). +By default no commands are available as the command list is empty. To enable commands these need to either be done on a per-user basis (including for the Admin user). You can do this by adding them in Settings > User Management > (edit user) > Commands or to *apply to all new users created from that point forward* they can be set in Settings > Global Settings > [!NOTE] > -> If using a proxy manager then remember to enable websockets support for the Filebrowser proxy +> If using a proxy manager then remember to enable websockets support for the File Browser proxy > [!NOTE] > diff --git a/errors/errors.go b/errors/errors.go index 5ec364c0..7bb10e81 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -7,6 +7,7 @@ var ( ErrExist = errors.New("the resource already exists") ErrNotExist = errors.New("the resource does not exist") ErrEmptyPassword = errors.New("password is empty") + ErrShortPassword = errors.New("password is too short") ErrEmptyUsername = errors.New("username is empty") ErrEmptyRequest = errors.New("empty request") ErrScopeIsRelative = errors.New("scope is a relative path") diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 1360bbec..7de128ed 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -170,6 +170,7 @@ "commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.", "commandsUpdated": "Commands updated!", "createUserDir": "Auto create user home dir while adding new user", + "minimumPasswordLength": "Minimum password length", "tusUploads": "Chunked Uploads", "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", diff --git a/frontend/src/types/settings.d.ts b/frontend/src/types/settings.d.ts index a2c19f76..90ca6ae7 100644 --- a/frontend/src/types/settings.d.ts +++ b/frontend/src/types/settings.d.ts @@ -1,6 +1,7 @@ interface ISettings { signup: boolean; createUserDir: boolean; + minimumPasswordLength: number; userHomeBasePath: string; defaults: SettingsDefaults; rules: any[]; diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index 1997576e..331dd438 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -18,14 +18,26 @@ {{ t("settings.createUserDir") }}

    -
    -

    {{ t("settings.userHomeBasePath") }}

    +

    + -

    +

    + +

    + + +

    {{ t("settings.rules") }}

    {{ t("settings.globalRules") }}

    @@ -229,17 +241,17 @@