commit 9c81a49f8f74e1be3e66abfeffc699f2603e4b71 Author: admin Date: Mon Sep 29 00:46:38 2025 -0700 main diff --git a/bootstrap.ps1 b/bootstrap.ps1 new file mode 100644 index 0000000..3d36cbc --- /dev/null +++ b/bootstrap.ps1 @@ -0,0 +1,48 @@ +<# +Bootstrap script for DslrDirector on Windows. +- Creates a local virtual environment (.venv) if missing +- Activates the venv, upgrades pip, installs requirements.txt +- Runs the Flask app (src/app.py) + +Usage: + Open PowerShell in the project folder and run: + .\bootstrap.ps1 + Or explicitly allow script execution if needed: + powershell -ExecutionPolicy Bypass -File .\bootstrap.ps1 + +Optional: pass a specific python executable: + .\bootstrap.ps1 -PythonPath "C:\Path\To\python.exe" +#> +param( + [string]$PythonPath = "python" +) + +$root = Split-Path -Parent $MyInvocation.MyCommand.Path +Set-Location $root + +$venv = Join-Path $root '.venv' +if (-not (Test-Path $venv)) { + Write-Host "Creating virtual environment at $venv" + & $PythonPath -m venv $venv +} else { + Write-Host "Virtual environment exists at $venv" +} + +$activate = Join-Path $venv 'Scripts\Activate.ps1' +if (-not (Test-Path $activate)) { + Write-Error "Activation script not found: $activate" + exit 1 +} + +Write-Host "Activating venv..." +# Dot-source the activation script to the current session +. $activate + +Write-Host "Upgrading pip and installing requirements..." +python -m pip install --upgrade pip +if (Test-Path (Join-Path $root 'requirements.txt')) { + python -m pip install -r (Join-Path $root 'requirements.txt') +} + +Write-Host "Starting application... (press Ctrl-C to stop)" +python .\src\app.py diff --git a/data/ata_logo_out.png b/data/ata_logo_out.png new file mode 100644 index 0000000..8947952 Binary files /dev/null and b/data/ata_logo_out.png differ diff --git a/data/comm.json b/data/comm.json new file mode 100644 index 0000000..3e588b3 --- /dev/null +++ b/data/comm.json @@ -0,0 +1,14 @@ +{ + "comm": { + "host": "0.0.0.0", + "port": 8080 + }, + "ble": { + "auto-connect": true, + "address": "E8:06:90:D5:CA:65", + "device-name": "SP110E-ATA-64", + "filter-name": "SP110E-ATA", + "service-uuid": "0xFFE0", + "characteristic-uuid": "0xFFE1" + } +} \ No newline at end of file diff --git a/data/config.json b/data/config.json new file mode 100644 index 0000000..d94357a --- /dev/null +++ b/data/config.json @@ -0,0 +1,10 @@ +{ + "animation-events": { + "home-state": "animation", + "home-anim": 65, + "sharing-state": "animation", + "sharing-anim": 18, + "home-color": "#8000ff", + "sharing-color": "#008000" + } +} \ No newline at end of file diff --git a/data/gui_start.log b/data/gui_start.log new file mode 100644 index 0000000..85a7d2f --- /dev/null +++ b/data/gui_start.log @@ -0,0 +1,5090 @@ +2025-09-28 14:34:11 test: about to create GUI +2025-09-28 14:34:11 GUI: initialized +2025-09-28 14:34:11 test: GUI instance created +2025-09-28 14:34:11 test: after update +2025-09-28 14:34:11 test: destroyed +2025-09-28 14:34:35 test2: about to create GUI +2025-09-28 14:34:35 GUI: initialized +2025-09-28 14:34:35 test2: GUI instance created +2025-09-28 14:34:35 test2: after update +2025-09-28 14:34:35 test2: destroyed +2025-09-28 14:38:55 GUI: starting +2025-09-28 14:38:55 GUI: initialized +2025-09-28 14:38:55 GUI: created instance +2025-09-28 14:39:06 GUI: mainloop exited +2025-09-28 14:47:38 GUI: initialized +2025-09-28 14:52:07 GUI: initialized +2025-09-28 14:54:27 GUI: initialized +2025-09-28 14:55:33 GUI: starting +2025-09-28 14:55:33 GUI: initialized +2025-09-28 14:55:33 GUI: created instance +2025-09-28 15:01:18 GUI: mainloop exited +2025-09-28 15:01:36 GUI: starting +2025-09-28 15:01:36 GUI: initialized +2025-09-28 15:01:36 GUI: created instance +2025-09-28 15:08:36 GUI: starting +2025-09-28 15:08:36 GUI: initialized +2025-09-28 15:08:36 GUI: created instance +2025-09-28 15:08:43 GUI: mainloop exited +2025-09-28 15:09:06 GUI: starting +2025-09-28 15:09:06 GUI: initialized +2025-09-28 15:09:06 GUI: created instance +2025-09-28 15:09:10 GUI: mainloop exited +2025-09-28 15:11:06 GUI: starting +2025-09-28 15:11:06 GUI: initialized +2025-09-28 15:11:06 GUI: created instance +2025-09-28 15:11:12 GUI: mainloop exited +2025-09-28 15:11:22 GUI: starting +2025-09-28 15:11:23 GUI: initialized +2025-09-28 15:11:23 GUI: created instance +2025-09-28 15:11:25 GUI: mainloop exited +2025-09-28 15:12:06 GUI: starting +2025-09-28 15:12:06 GUI: initialized +2025-09-28 15:12:06 GUI: created instance +2025-09-28 15:12:12 GUI: mainloop exited +2025-09-28 15:14:10 GUI: starting +2025-09-28 15:14:10 GUI: initialized +2025-09-28 15:14:10 GUI: created instance +2025-09-28 15:14:12 GUI: mainloop exited +2025-09-28 15:16:54 GUI: starting +2025-09-28 15:16:55 GUI: initialized +2025-09-28 15:16:55 GUI: created instance +2025-09-28 15:18:28 GUI: mainloop exited +2025-09-28 15:18:30 GUI: starting +2025-09-28 15:18:30 GUI: initialized +2025-09-28 15:18:30 GUI: created instance +2025-09-28 15:22:32 GUI: mainloop exited +2025-09-28 15:22:36 GUI: starting +2025-09-28 15:22:36 GUI: initialized +2025-09-28 15:22:36 GUI: created instance +2025-09-28 15:23:00 GUI: starting +2025-09-28 15:23:00 GUI: initialized +2025-09-28 15:23:00 GUI: created instance +2025-09-28 15:25:21 GUI: starting +2025-09-28 15:25:22 GUI: initialized +2025-09-28 15:25:22 GUI: created instance +2025-09-28 15:25:30 GUI: mainloop exited +2025-09-28 15:29:13 GUI: starting +2025-09-28 15:29:13 GUI: initialized +2025-09-28 15:29:13 GUI: created instance +2025-09-28 15:29:18 GUI: mainloop exited +2025-09-28 15:31:01 GUI: starting +2025-09-28 15:31:01 GUI: initialized +2025-09-28 15:31:01 GUI: created instance +2025-09-28 15:31:11 GUI: mainloop exited +2025-09-28 15:32:33 GUI: starting +2025-09-28 15:32:33 GUI: initialized +2025-09-28 15:32:33 GUI: created instance +2025-09-28 15:33:05 GUI: mainloop exited +2025-09-28 15:33:06 GUI: starting +2025-09-28 15:33:06 GUI: initialized +2025-09-28 15:33:06 GUI: created instance +2025-09-28 15:33:15 GUI: mainloop exited +2025-09-28 15:33:27 GUI: starting +2025-09-28 15:33:27 GUI: initialized +2025-09-28 15:33:27 GUI: created instance +2025-09-28 15:33:51 GUI: mainloop exited +2025-09-28 15:35:23 GUI: starting +2025-09-28 15:35:23 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:35:23 Logo: subsampled by factor 3 +2025-09-28 15:35:23 GUI: initialized +2025-09-28 15:35:23 GUI: created instance +2025-09-28 15:35:40 GUI: mainloop exited +2025-09-28 15:36:17 GUI: starting +2025-09-28 15:36:17 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:36:17 Logo: subsampled by factor 3 +2025-09-28 15:36:17 GUI: initialized +2025-09-28 15:36:17 GUI: created instance +2025-09-28 15:38:34 GUI: starting +2025-09-28 15:38:34 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:38:34 Logo: subsampled by factor 3 +2025-09-28 15:38:34 GUI: initialized +2025-09-28 15:38:34 GUI: created instance +2025-09-28 15:39:00 GUI: mainloop exited +2025-09-28 15:39:12 GUI: starting +2025-09-28 15:39:12 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:39:12 Logo: subsampled by factor 3 +2025-09-28 15:39:12 GUI: initialized +2025-09-28 15:39:12 GUI: created instance +2025-09-28 15:41:15 GUI: mainloop exited +2025-09-28 15:41:17 GUI: starting +2025-09-28 15:41:17 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:41:17 Logo: subsampled by factor 3 +2025-09-28 15:41:17 GUI: initialized +2025-09-28 15:41:17 GUI: created instance +2025-09-28 15:42:50 GUI: mainloop exited +2025-09-28 15:42:52 GUI: starting +2025-09-28 15:42:52 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:42:52 Logo: subsampled by factor 3 +2025-09-28 15:42:52 GUI: initialized +2025-09-28 15:42:52 GUI: created instance +2025-09-28 15:42:57 GUI: mainloop exited +2025-09-28 15:43:04 GUI: starting +2025-09-28 15:43:04 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:43:04 Logo: subsampled by factor 3 +2025-09-28 15:43:04 GUI: initialized +2025-09-28 15:43:04 GUI: created instance +2025-09-28 15:43:50 GUI: mainloop exited +2025-09-28 15:49:09 GUI: starting +2025-09-28 15:49:09 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:49:09 Logo: subsampled by factor 3 +2025-09-28 15:49:09 GUI: initialized +2025-09-28 15:49:09 GUI: created instance +2025-09-28 15:49:28 GUI: mainloop exited +2025-09-28 15:50:57 GUI: starting +2025-09-28 15:50:57 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (tk.PhotoImage) orig=225x225 +2025-09-28 15:50:57 Logo: subsampled by factor 3 +2025-09-28 15:50:57 GUI: initialized +2025-09-28 15:50:57 GUI: created instance +2025-09-28 15:58:55 GUI: starting +2025-09-28 15:58:55 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 15:58:55 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 15:58:55 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 15:58:55 Logo: applied un-matte correction to semi-transparent pixels +2025-09-28 15:58:55 Logo: resized to 60x60 using LANCZOS +2025-09-28 15:58:55 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 15:58:55 GUI: initialized +2025-09-28 15:58:55 GUI: created instance +2025-09-28 15:59:00 GUI: mainloop exited +2025-09-28 16:00:30 GUI: starting +2025-09-28 16:00:30 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:00:30 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:00:30 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:00:30 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:00:30 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:00:30 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:00:30 GUI: initialized +2025-09-28 16:00:30 GUI: created instance +2025-09-28 16:02:21 GUI: SIGINT received - attempting clean shutdown +2025-09-28 16:02:21 GUI: starting +2025-09-28 16:02:21 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:02:21 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:02:21 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:02:21 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:02:21 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:02:21 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:02:21 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:02:21 GUI: initialized +2025-09-28 16:02:21 GUI: created instance +2025-09-28 16:43:51 GUI: SIGINT received - attempting clean shutdown +2025-09-28 16:43:53 GUI: starting +2025-09-28 16:43:53 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:43:53 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:43:53 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:43:54 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:43:54 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:43:54 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:43:54 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:43:54 GUI: exception ['style'] are not supported arguments. Look at the documentation for supported arguments. +2025-09-28 16:43:59 GUI: starting +2025-09-28 16:43:59 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:43:59 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:43:59 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:43:59 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:43:59 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:43:59 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:43:59 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:43:59 GUI: exception ['style'] are not supported arguments. Look at the documentation for supported arguments. +2025-09-28 16:47:36 GUI: starting +2025-09-28 16:47:36 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:47:36 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:47:36 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:47:36 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:47:36 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:47:36 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:47:36 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:47:36 GUI: initialized +2025-09-28 16:47:36 GUI: created instance +2025-09-28 16:49:45 GUI: SIGINT received - attempting clean shutdown +2025-09-28 16:49:45 GUI: starting +2025-09-28 16:49:45 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:49:45 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:49:45 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:49:45 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:49:45 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:49:45 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:49:45 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:49:45 GUI: initialized +2025-09-28 16:49:45 GUI: created instance +2025-09-28 16:55:51 GUI: mainloop exited +2025-09-28 16:56:14 GUI: starting +2025-09-28 16:56:14 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:56:14 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:56:14 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:56:14 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:56:14 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:56:14 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:56:14 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:56:15 GUI: initialized +2025-09-28 16:56:15 GUI: created instance +2025-09-28 16:56:34 GUI: mainloop exited +2025-09-28 16:57:36 GUI: starting +2025-09-28 16:57:36 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 16:57:36 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 16:57:36 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 16:57:36 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 16:57:36 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 16:57:36 Logo: resized to 60x60 using LANCZOS +2025-09-28 16:57:36 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 16:57:36 GUI: initialized +2025-09-28 16:57:36 GUI: created instance +2025-09-28 17:00:48 GUI: mainloop exited +2025-09-28 17:00:52 GUI: starting +2025-09-28 17:00:52 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:00:52 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:00:52 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:00:52 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:00:52 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:00:52 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:00:52 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 17:00:53 GUI: initialized +2025-09-28 17:00:53 GUI: created instance +2025-09-28 17:04:56 GUI: SIGINT received - attempting clean shutdown +2025-09-28 17:04:56 GUI: starting +2025-09-28 17:04:56 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:04:56 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:04:56 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:04:56 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:04:56 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:04:56 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:04:56 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 17:04:57 GUI: initialized +2025-09-28 17:04:57 GUI: created instance +2025-09-28 17:07:42 GUI: mainloop exited +2025-09-28 17:07:44 GUI: starting +2025-09-28 17:07:44 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:07:44 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:07:44 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:07:44 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:07:44 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:07:44 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:07:44 Logo: loaded resized image preserving alpha (no compositing) +2025-09-28 17:07:44 GUI: initialized +2025-09-28 17:07:44 GUI: created instance +2025-09-28 17:09:55 GUI: mainloop exited +2025-09-28 17:09:57 GUI: starting +2025-09-28 17:09:57 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:09:57 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:09:57 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:09:57 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:09:57 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:09:57 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:09:57 Logo: loaded PNG into tk.PhotoImage via base64 (preserved alpha) +2025-09-28 17:09:57 GUI: initialized +2025-09-28 17:09:57 GUI: created instance +2025-09-28 17:21:29 GUI: mainloop exited +2025-09-28 17:21:32 GUI: starting +2025-09-28 17:21:32 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:21:32 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:21:32 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:21:32 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:21:32 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:21:32 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:21:32 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:21:32 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:21:32 GUI: initialized +2025-09-28 17:21:32 GUI: created instance +2025-09-28 17:24:09 GUI: SIGINT received - attempting clean shutdown +2025-09-28 17:29:03 GUI: starting +2025-09-28 17:29:03 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:29:03 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:29:03 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:29:03 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:29:03 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:29:03 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:29:03 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:29:03 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:29:03 GUI: initialized +2025-09-28 17:29:03 GUI: created instance +2025-09-28 17:30:28 GUI: mainloop exited +2025-09-28 17:30:45 PSG GUI: starting +2025-09-28 17:31:22 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:31:22 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:31:22 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:31:22 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:31:22 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:31:22 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:31:22 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:31:22 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:31:22 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:31:23 GUI: initialized +2025-09-28 17:32:17 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:33:19 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:33:19 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:33:19 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:33:19 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:33:19 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:33:19 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:33:19 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:33:19 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:33:19 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:33:19 GUI: initialized +2025-09-28 17:35:26 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:35:26 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:35:26 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:35:26 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:35:26 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:35:26 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:35:26 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:35:26 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:35:26 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:35:26 GUI: initialized +2025-09-28 17:45:21 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:45:22 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:45:22 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:45:22 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:45:22 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:45:22 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:45:22 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:45:22 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:45:22 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:45:22 GUI: initialized +2025-09-28 17:49:39 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:49:39 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:49:39 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:49:39 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:49:39 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:49:39 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:49:39 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:49:39 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:49:39 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:49:39 GUI: initialized +2025-09-28 17:52:47 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:52:48 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:52:48 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:52:48 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:52:48 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:52:48 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:52:48 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:52:48 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:52:48 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:52:48 GUI: initialized +2025-09-28 17:55:59 PSG: PySimpleGUI import succeeded but the installed package does not expose the +expected API (Text/Window). This can happen with a private or mismatched +PySimpleGUI build. + +Recommended fix: + python -m pip uninstall PySimpleGUI + python -m pip cache purge + python -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI + +Falling back to the Tkinter GUI (src/gui.py) for now... + +2025-09-28 17:55:59 Logo: found d:\Repositories\Development\DslrDirector\static\images\ata_logo.png (PIL) orig=225x225 +2025-09-28 17:55:59 Logo: cropped to bbox=(12, 12, 214, 214) new=202x202 +2025-09-28 17:55:59 Logo: detected matte color (0, 0, 0) from transparent border +2025-09-28 17:55:59 Logo: applied improved un-matte correction to semi-transparent pixels +2025-09-28 17:55:59 Logo: defringe removed 0 near-matte low-alpha pixels +2025-09-28 17:55:59 Logo: resized to 60x60 using LANCZOS +2025-09-28 17:55:59 Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 17:55:59 Logo: loaded composed PNG via tk.PhotoImage(file=...) on Windows +2025-09-28 17:55:59 GUI: initialized +2025-09-28 17:56:21 GUI: SIGINT received (module-level handler) +2025-09-28 18:02:44 PSG GUI: starting +2025-09-28 18:02:44 PSG Logo: wrote composed PNG to D:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:08:23 GUI: starting +2025-09-28 18:08:23 Logo: loaded original file unaltered from d:\Repositories\Development\DslrDirector\static\images\ata_logo.png +2025-09-28 18:08:23 GUI: initialized +2025-09-28 18:08:23 GUI: created instance +2025-09-28 18:08:39 GUI: mainloop exited +2025-09-28 18:10:30 GUI: starting +2025-09-28 18:10:30 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:10:30 GUI: initialized +2025-09-28 18:10:30 GUI: created instance +2025-09-28 18:10:37 GUI: mainloop exited +2025-09-28 18:14:13 GUI: starting +2025-09-28 18:14:13 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:14:13 GUI: initialized +2025-09-28 18:14:13 GUI: created instance +2025-09-28 18:14:17 GUI: mainloop exited +2025-09-28 18:15:22 GUI: starting +2025-09-28 18:15:22 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:15:23 GUI: initialized +2025-09-28 18:15:23 GUI: created instance +2025-09-28 18:15:30 GUI: mainloop exited +2025-09-28 18:15:57 GUI: starting +2025-09-28 18:15:58 Logo: composed original onto header background and wrote D:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:15:58 GUI: initialized +2025-09-28 18:15:58 GUI: created instance +2025-09-28 18:16:06 GUI: mainloop exited +2025-09-28 18:17:03 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:17:03 GUI: initialized +2025-09-28 18:17:39 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:17:39 GUI: initialized +2025-09-28 18:18:18 GUI: SIGINT received (module-level handler) +2025-09-28 18:19:37 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:19:37 GUI: initialized +2025-09-28 18:21:29 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:21:29 GUI: initialized +2025-09-28 18:22:01 Logo: composed original onto header background and wrote D:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:22:02 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:22:02 GUI: initialized +2025-09-28 18:22:52 GUI: SIGINT received (module-level handler) +2025-09-28 18:22:59 GUI: starting +2025-09-28 18:23:00 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:23:00 poll_status: BLE: disconnected +2025-09-28 18:23:00 GUI: initialized +2025-09-28 18:23:00 GUI: created instance +2025-09-28 18:23:03 GUI: mainloop exited +2025-09-28 18:23:18 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:23:19 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:23:19 GUI: initialized +2025-09-28 18:23:21 poll_status: BLE: connected E8:06:90:D5:CA:65 +2025-09-28 18:23:42 GUI: SIGINT received (module-level handler) +2025-09-28 18:24:50 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:24:50 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:24:50 GUI: initialized +2025-09-28 18:24:52 poll_status: BLE: connected E8:06:90:D5:CA:65 +2025-09-28 18:26:48 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:26:48 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:26:48 GUI: initialized +2025-09-28 18:26:52 poll_status: BLE: connected E8:06:90:D5:CA:65 +2025-09-28 18:28:12 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:28:20 poll_status: BLE: connected E8:06:90:D5:CA:65 +2025-09-28 18:29:10 GUI: SIGINT received (module-level handler) +2025-09-28 18:31:12 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:31:12 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:31:12 GUI: initialized +2025-09-28 18:31:51 Logo: composed original onto header background and wrote d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 18:31:52 poll_status: BLE: disconnected E8:06:90:D5:CA:65 +2025-09-28 18:31:52 GUI: initialized +2025-09-28 18:31:56 poll_status: BLE: connected E8:06:90:D5:CA:65 +2025-09-28 18:31:58 DBG: raw get_status -> {'connected': True, 'address': 'E8:06:90:D5:CA:65', 'last_connected_ts': 1759109514.7517695} +2025-09-28 18:32:12 DBG: raw get_status -> {'connected': True, 'address': 'E8:06:90:D5:CA:65', 'last_connected_ts': 1759109514.7517695} +2025-09-28 19:25:12 GUI: initialized (minimal) +2025-09-28 19:25:12 poll_status: BLE: disconnected +2025-09-28 19:25:17 DBG: {'error': 'BleComm not available'} +2025-09-28 19:25:27 GUI: starting minimal GUI +2025-09-28 19:25:27 GUI: initialized (minimal) +2025-09-28 19:25:27 poll_status: BLE: disconnected +2025-09-28 19:27:49 GUI: initialized (minimal) +2025-09-28 19:27:50 poll_status: BLE: disconnected +2025-09-28 19:28:10 GUI: initialized (minimal) +2025-09-28 19:28:10 poll_status: BLE: disconnected +2025-09-28 19:28:25 GUI: starting minimal GUI +2025-09-28 19:28:25 GUI: initialized (minimal) +2025-09-28 19:28:26 poll_status: BLE: disconnected +2025-09-28 19:29:18 GUI: initialized (minimal) +2025-09-28 19:29:18 poll_status: BLE: disconnected +2025-09-28 19:29:53 GUI: initialized (minimal) +2025-09-28 19:29:53 poll_status: BLE: disconnected +2025-09-28 19:34:04 GUI: initialized (minimal) +2025-09-28 19:34:05 poll_status: BLE: disconnected +2025-09-28 19:34:38 GUI: starting minimal GUI +2025-09-28 19:34:39 GUI: initialized (minimal) +2025-09-28 19:34:39 poll_status: BLE: disconnected +2025-09-28 19:39:53 GUI: initialized (customtkinter) +2025-09-28 19:42:12 PSG GUI: starting +2025-09-28 19:42:12 PSG Logo: wrote composed PNG to d:\Repositories\Development\DslrDirector\data\ata_logo_out.png +2025-09-28 19:42:27 GUI: starting custom GUI +2025-09-28 19:42:27 GUI: initialized (customtkinter) +2025-09-28 19:45:21 GUI: starting custom GUI +2025-09-28 19:45:21 GUI: initialized (customtkinter) +2025-09-28 19:47:24 GUI: starting custom GUI +2025-09-28 19:47:24 GUI: initialized (customtkinter) +2025-09-28 19:47:27 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:28 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:30 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:31 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:31 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:31 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:32 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:34 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:35 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:40 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:40 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:47:40 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:48:11 GUI: initialized (customtkinter) +2025-09-28 19:48:13 Color chooser failed: module 'tkinter' has no attribute 'colorchooser' +2025-09-28 19:50:54 GUI: initialized (customtkinter) +2025-09-28 19:51:04 Color chosen for home: #78c9c2 +2025-09-28 19:59:47 GUI: starting custom GUI +2025-09-28 19:59:47 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 19:59:47 GUI: initialized (customtkinter) +2025-09-28 19:59:48 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:49 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:50 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:51 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:52 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:53 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:54 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:55 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:56 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:57 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:58 poll_status import fallback failed: No module named 'src' +2025-09-28 19:59:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:00:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:00:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:00:20 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 20:00:20 GUI: initialized (customtkinter) +2025-09-28 20:01:22 GUI: starting custom GUI +2025-09-28 20:01:22 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 20:01:22 GUI: initialized (customtkinter) +2025-09-28 20:01:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:01:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:02:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:41 GUI: starting custom GUI +2025-09-28 20:03:41 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 20:03:41 GUI: initialized (customtkinter) +2025-09-28 20:03:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:03:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:04:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:05:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:06:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:07:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:08:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:09:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:10:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:11:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:12:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:13:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:14:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:15:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:16:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:17:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:18:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:19:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:20:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:21:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:22:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:23:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:24:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:25:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:26:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:27:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:28:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:29:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:30:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:31:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:32:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:33:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:34:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:35:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:36:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:37:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:38:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:39:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:40:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:41:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:42:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:43:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:44:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:45:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:46:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:47:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:48:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:49:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:50:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:51:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:52:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:53:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:54:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:55:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:56:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:57:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:37 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:58:59 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:00 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:01 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:02 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:03 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:04 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:05 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:06 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:07 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:08 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:09 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:10 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:11 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:12 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:13 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:14 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:15 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:16 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:17 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:18 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:19 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:20 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:21 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:22 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:23 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:24 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:25 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:26 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:27 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:28 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:29 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:30 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:31 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:32 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:33 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:34 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:35 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:36 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:38 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:39 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:40 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:41 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:42 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:43 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:44 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:45 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:46 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:47 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:48 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:49 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:50 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:51 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:52 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:53 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:54 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:55 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:56 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:57 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:58 poll_status import fallback failed: No module named 'src' +2025-09-28 20:59:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:00:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:01:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:02:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:03:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:04:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:05:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:06:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:07:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:06 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:07 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:08 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:09 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:10 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:11 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:12 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:13 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:14 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:15 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:16 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:17 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:18 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:19 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:20 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:21 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:22 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:23 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:24 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:25 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:26 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:27 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:28 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:29 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:30 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:31 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:32 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:33 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:34 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:35 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:36 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:37 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:38 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:39 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:40 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:41 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:42 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:43 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:44 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:45 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:46 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:47 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:48 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:49 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:50 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:51 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:52 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:53 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:54 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:55 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:56 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:57 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:58 poll_status import fallback failed: No module named 'src' +2025-09-28 21:08:59 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:00 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:01 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:02 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:03 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:04 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:05 poll_status import fallback failed: No module named 'src' +2025-09-28 21:09:12 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 21:09:12 GUI: initialized (customtkinter) +2025-09-28 21:09:27 Color chosen for home: #e0fc45 +2025-09-28 21:09:42 Color chosen for share: #c081b7 +2025-09-28 21:09:50 Animations saved: True +2025-09-28 21:10:40 Color chosen for share: #cc75a7 +2025-09-28 21:10:44 Animations saved: True +2025-09-28 21:19:43 Disconnect result: True +2025-09-28 21:19:49 Connect result: True +2025-09-28 21:20:09 Connect result: True +2025-09-28 21:26:25 Comm config loaded for UI: {'ble': {'address': '', 'device-name': '', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 21:26:25 GUI: initialized (customtkinter) +2025-09-28 21:36:55 Comm config loaded for UI: {'ble': {'address': '', 'device-name': '', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 21:36:55 GUI: initialized (customtkinter) +2025-09-28 21:39:53 Comm config loaded for UI: {'ble': {'address': '', 'device-name': '', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 21:39:53 GUI: initialized (customtkinter) +2025-09-28 21:40:19 Connect result: True +2025-09-28 21:42:45 Comm config loaded for UI: {'ble': {'address': '', 'device-name': '', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 21:42:45 GUI: initialized (customtkinter) +2025-09-28 21:43:04 Connect result: True +2025-09-28 21:56:45 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 21:56:45 GUI: initialized (customtkinter) +2025-09-28 22:00:45 Comm config loaded for UI: {'ble': {'address': '', 'device-name': '', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 22:00:45 GUI: initialized (customtkinter) +2025-09-28 22:01:12 Connect result: True +2025-09-28 22:09:33 GUI: starting custom GUI +2025-09-28 22:09:33 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 22:09:33 GUI: initialized (customtkinter) +2025-09-28 22:09:33 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:34 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:35 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:36 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:37 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:38 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:39 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:40 poll_status import fallback failed: No module named 'src' +2025-09-28 22:09:41 poll_status import fallback failed: No module named 'src' +2025-09-28 22:10:09 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 22:10:09 GUI: initialized (customtkinter) +2025-09-28 22:10:15 Test color send for home: color=#e0fc45 rgb=(224,252,69) cmd=30 ok=True +2025-09-28 22:10:17 Test color send for share: color=#cc75a7 rgb=(204,117,167) cmd=30 ok=True +2025-09-28 22:10:21 Test color send for home: color=#e0fc45 rgb=(224,252,69) cmd=30 ok=True +2025-09-28 22:10:31 Test color send for home: color=#e0fc45 rgb=(224,252,69) cmd=30 ok=True +2025-09-28 22:14:40 GUI: starting custom GUI +2025-09-28 22:14:40 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 22:14:40 GUI: initialized (customtkinter) +2025-09-28 22:14:41 poll_status import fallback failed: No module named 'src' +2025-09-28 22:14:42 poll_status import fallback failed: No module named 'src' +2025-09-28 22:14:43 poll_status import fallback failed: No module named 'src' +2025-09-28 22:14:44 poll_status import fallback failed: No module named 'src' +2025-09-28 22:14:45 poll_status import fallback failed: No module named 'src' +2025-09-28 22:17:10 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 22:17:10 GUI: initialized (customtkinter) +2025-09-28 22:17:15 Test send for home: mode=solid args=(224, 252, 69) cmd=0x1e ok=True +2025-09-28 22:17:17 Test send for share: mode=solid args=(204, 117, 167) cmd=0x1e ok=True +2025-09-28 22:17:20 Test send for home: mode=animation args=(23, 0, 0) cmd=0x2c ok=True +2025-09-28 22:17:26 Test send for share: mode=animation args=(50, 0, 0) cmd=0x2c ok=True +2025-09-28 22:22:52 Color chosen for share: #54deed +2025-09-28 22:22:58 Animations saved: True +2025-09-28 22:24:02 Test send for home: mode=animation args=(23, 0, 0) cmd=0x2c ok=True +2025-09-28 22:24:05 Test send for share: mode=solid args=(84, 222, 237) cmd=0x1e ok=True +2025-09-28 22:24:09 Test send for home: mode=animation args=(23, 0, 0) cmd=0x2c ok=True +2025-09-28 22:27:55 Animations saved: True +2025-09-28 22:28:18 Test send for share: mode=solid args=(84, 222, 237) cmd=0x1e ok=True +2025-09-28 22:28:20 Test send for home: mode=animation args=(23, 0, 0) cmd=0x2c ok=True +2025-09-28 22:30:22 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 22:30:22 GUI: initialized (customtkinter) +2025-09-28 22:43:26 GUI: starting custom GUI +2025-09-28 22:43:26 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 22:43:26 GUI: initialized (customtkinter) +2025-09-28 22:43:26 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:27 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:28 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:29 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:30 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:31 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:32 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:33 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:34 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:36 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:37 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:38 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:39 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:40 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:41 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:42 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:43 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:44 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:45 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:46 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:47 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:48 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:49 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:50 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:51 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:52 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:53 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:54 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:55 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:56 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:57 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:58 poll_status import fallback failed: No module named 'src' +2025-09-28 22:43:59 poll_status import fallback failed: No module named 'src' +2025-09-28 22:44:07 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 22:44:07 GUI: initialized (customtkinter) +2025-09-28 22:47:29 GUI: starting custom GUI +2025-09-28 22:47:29 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-28 22:47:29 GUI: initialized (customtkinter) +2025-09-28 22:47:29 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-28 22:47:29 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-28 22:47:29 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-28 22:47:29 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-28 22:47:30 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:31 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:32 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:33 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:34 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:35 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:36 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:37 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:38 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:39 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:40 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:41 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:42 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:43 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:44 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:45 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:46 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:47 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:48 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:49 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:50 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:51 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:52 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:53 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:54 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:55 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:56 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:57 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:58 poll_status import fallback failed: No module named 'src' +2025-09-28 22:47:59 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:00 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:01 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:02 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:03 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:04 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:05 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:06 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:07 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:08 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:09 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:10 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:11 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:12 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:13 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:14 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:15 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:16 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:17 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:18 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:19 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:20 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:21 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:22 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:23 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:24 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:25 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:26 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:27 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:28 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:29 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:30 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:31 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:32 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:33 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:34 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:35 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:36 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:37 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:38 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:39 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:40 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:41 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:42 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:43 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:44 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:45 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:46 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:47 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:48 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:49 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:50 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:51 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:52 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:53 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:54 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:55 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:56 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:57 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:58 poll_status import fallback failed: No module named 'src' +2025-09-28 22:48:59 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:00 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:01 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:02 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:03 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:04 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:05 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:06 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:07 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:08 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:09 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:10 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:11 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:12 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:13 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:14 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:15 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:16 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:17 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:18 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:19 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:20 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:21 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:22 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:23 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:24 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:25 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:26 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:27 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:28 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:30 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:31 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:32 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:33 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:34 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:35 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:36 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:37 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:38 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:39 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:40 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:41 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:42 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:43 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:44 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:45 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:46 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:47 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:48 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:49 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:50 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:51 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:52 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:53 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:54 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:55 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:56 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:57 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:58 poll_status import fallback failed: No module named 'src' +2025-09-28 22:49:59 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:00 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:01 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:02 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:03 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:04 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:05 poll_status import fallback failed: No module named 'src' +2025-09-28 22:50:06 poll_status import fallback failed: No module named 'src' +2025-09-28 22:54:56 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-28 22:54:56 GUI: initialized (customtkinter) +2025-09-28 22:54:56 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-28 22:54:56 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-28 22:54:56 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-28 22:54:56 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:13:19 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-29 00:13:20 GUI: initialized (customtkinter) +2025-09-29 00:13:20 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-29 00:13:20 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-29 00:13:20 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-29 00:13:20 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:13:41 Color chosen for share: #80ff80 +2025-09-29 00:13:54 Color chosen for share: #008000 +2025-09-29 00:13:56 Animations saved: True +2025-09-29 00:14:35 Test send for share: mode=solid args=(0, 128, 0) cmd=0x1e ok=True +2025-09-29 00:14:39 Test send for home: mode=animation args=(23, 0, 0) cmd=0x2c ok=True +2025-09-29 00:15:12 Animations saved: True +2025-09-29 00:15:48 Animations saved: True +2025-09-29 00:16:32 GUI: starting custom GUI +2025-09-29 00:16:33 Comm config loaded for UI: {'comm': {'host': '0.0.0.0', 'port': 8080}, 'ble': {'auto-connect': True, 'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'service-uuid': '0xFFE0', 'characteristic-uuid': '0xFFE1'}} +2025-09-29 00:16:33 GUI: initialized (customtkinter) +2025-09-29 00:16:33 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-29 00:16:33 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-29 00:16:33 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-29 00:16:33 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:16:33 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:34 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:35 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:36 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:37 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:38 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:39 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:40 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:41 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:42 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:43 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:44 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:45 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:46 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:47 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:48 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:49 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:50 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:51 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:52 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:53 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:54 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:55 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:56 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:57 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:58 poll_status import fallback failed: No module named 'src' +2025-09-29 00:16:59 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:00 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:01 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:02 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:03 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:04 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:05 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:06 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:07 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:08 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:09 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:10 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:11 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:12 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:13 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:14 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:15 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:16 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:17 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:18 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:19 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:20 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:21 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:22 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:23 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:24 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:25 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:26 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:27 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:28 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:29 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:30 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:31 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:32 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:33 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:34 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:35 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:36 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:37 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:38 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:39 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:40 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:41 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:42 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:43 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:44 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:45 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:46 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:47 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:48 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:49 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:50 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:52 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:53 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:54 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:55 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:56 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:57 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:58 poll_status import fallback failed: No module named 'src' +2025-09-29 00:17:59 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:00 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:01 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:02 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:03 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:04 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:05 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:06 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:07 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:08 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:09 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:10 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:11 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:12 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:13 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:14 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:15 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:16 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:17 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:18 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:19 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:20 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:21 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:22 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:23 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:24 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:25 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:26 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:27 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:28 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:29 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:30 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:31 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:32 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:33 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:34 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:35 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:36 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:37 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:38 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:39 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:40 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:41 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:42 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:43 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:44 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:45 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:46 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:47 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:48 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:49 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:50 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:51 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:52 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:53 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:54 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:55 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:56 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:57 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:58 poll_status import fallback failed: No module named 'src' +2025-09-29 00:18:59 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:00 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:01 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:02 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:03 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:04 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:05 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:06 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:07 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:08 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:09 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:10 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:11 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:12 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:13 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:14 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:15 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:16 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:17 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:18 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:19 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:20 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:21 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:22 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:23 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:24 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:25 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:26 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:27 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:28 poll_status import fallback failed: No module named 'src' +2025-09-29 00:19:32 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-29 00:19:32 GUI: initialized (customtkinter) +2025-09-29 00:19:32 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-29 00:19:32 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-29 00:19:32 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-29 00:19:32 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:19:48 Color chosen for share: #ff0000 +2025-09-29 00:19:55 Animations saved: True +2025-09-29 00:25:37 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-29 00:25:38 GUI: initialized (customtkinter) +2025-09-29 00:25:38 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-29 00:25:38 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-29 00:25:38 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-29 00:25:38 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:25:54 Color chosen for share: #8000ff +2025-09-29 00:26:16 Color chosen for home: #ff8000 +2025-09-29 00:26:21 Animations saved: True +2025-09-29 00:27:22 Disconnect result: True +2025-09-29 00:27:27 Connect result: False +2025-09-29 00:27:36 Connect result: False +2025-09-29 00:28:47 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-29 00:28:47 GUI: initialized (customtkinter) +2025-09-29 00:28:47 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-29 00:28:47 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-29 00:28:47 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-29 00:28:47 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:29:03 Color chosen for home: #00ff00 +2025-09-29 00:29:11 Color chosen for share: #ff0000 +2025-09-29 00:29:13 Animations saved: True +2025-09-29 00:32:37 Comm config loaded for UI: {'ble': {'address': 'E8:06:90:D5:CA:65', 'device-name': 'SP110E-ATA-64', 'filter-name': 'SP110E-ATA', 'auto-connect': True}} +2025-09-29 00:32:37 GUI: initialized (customtkinter) +2025-09-29 00:32:37 _disable_maximize_button exception: '_tkinter.tkapp' object has no attribute '_disable_maximize_button' +2025-09-29 00:32:37 bind failed: '_tkinter.tkapp' object has no attribute '_on_unmap' +2025-09-29 00:32:37 bind failed: '_tkinter.tkapp' object has no attribute '_on_map' +2025-09-29 00:32:37 protocol WM_DELETE_WINDOW failed: '_tkinter.tkapp' object has no attribute '_on_close' +2025-09-29 00:32:56 Color chosen for share: #008000 +2025-09-29 00:33:05 Color chosen for home: #8000ff +2025-09-29 00:33:07 Animations saved: True +2025-09-29 00:33:07 Updated target_app.LEDAnimations id=2136536444048 module=src.app +2025-09-29 00:34:24 Animations saved: True +2025-09-29 00:34:24 Updated target_app.LEDAnimations id=2136536444048 module=src.app diff --git a/dslrbooth_triggers.jsonl b/dslrbooth_triggers.jsonl new file mode 100644 index 0000000..960a3f7 --- /dev/null +++ b/dslrbooth_triggers.jsonl @@ -0,0 +1,4666 @@ +{"ts": "2025-09-27T05:37:20.975052Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T05:37:21.006378Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T05:37:21.024129Z", "event_type": "file_download", "param1": "20250926_222756_010.jpg"} +{"ts": "2025-09-27T05:47:31.803085Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T05:47:31.824901Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T05:47:31.863487Z", "event_type": "file_download", "param1": "20250926_222756_010.jpg"} +{"ts": "2025-09-27T05:50:16.995120Z", "event_type": "session_end"} +{"ts": "2025-09-27T05:50:27.230548Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T05:50:27.309674Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T05:50:27.420144Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T05:50:27.535919Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T05:50:27.639633Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T05:50:27.738778Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T05:50:27.859595Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T05:50:27.967562Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T05:50:28.076290Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T05:50:28.184981Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T05:50:28.310197Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T05:50:28.421322Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T05:50:28.543602Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T05:50:28.638163Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T05:50:28.739952Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T05:50:28.864965Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-27T05:50:28.978433Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T05:50:29.102824Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T05:50:29.209538Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T05:50:29.305757Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T05:50:29.419028Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T05:50:29.521365Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T05:50:29.629948Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T05:50:29.759145Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T05:50:29.853921Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T05:50:29.971494Z", "event_type": "countdown", "param1": "73"} +{"ts": "2025-09-27T05:50:30.071334Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T05:50:30.174761Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T05:50:30.286792Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T05:50:30.398536Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T05:50:30.511626Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-27T05:50:30.614861Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T05:50:30.685510Z", "event_type": "session_end"} +{"ts": "2025-09-27T06:14:25.524910Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T06:14:25.544189Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T06:14:25.572567Z", "event_type": "file_download", "param1": "20250926_222756_010.jpg"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T06:16:01Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T06:16:02Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T06:16:03Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T06:16:04Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T06:16:05Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T06:16:05Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T06:16:05Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T06:16:05Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T06:16:05Z", "event_type": "capture_start"} +{"ts": "2025-09-27T06:16:05Z", "event_type": "file_download", "param1": "20250926_231605_588.jpg"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T06:16:06Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T06:16:07Z", "event_type": "session_end"} +{"ts": "2025-09-27T06:50:54Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T06:50:54Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T06:50:55Z", "event_type": "file_download", "param1": "20250926_222756_010.jpg"} +{"ts": "2025-09-27T06:51:57Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T06:51:57Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T06:51:57Z", "event_type": "file_download", "param1": "20250926_222756_010.jpg"} +{"ts": "2025-09-27T06:52:51Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T06:52:51Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T06:52:51Z", "event_type": "file_download", "param1": "20250926_222756_010.jpg"} +{"ts": "2025-09-27T06:56:14Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T06:56:14Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T06:56:14Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T06:56:14Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T06:56:14Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T06:56:15Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T06:56:16Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T06:56:17Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T06:56:17Z", "event_type": "session_end"} +{"ts": "2025-09-27T07:03:29Z", "event_type": "session_end"} +{"ts": "2025-09-27T07:03:39Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T07:03:39Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T07:03:39Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T07:03:39Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T07:03:39Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T07:03:39Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T07:03:40Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T07:03:41Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T07:03:42Z", "event_type": "session_end"} +{"ts": "2025-09-27T07:11:45Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T08:52:40Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T08:52:40Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T08:52:53Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T08:52:53Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T08:55:05Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T08:55:10Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T08:58:38Z", "event_type": "session_end"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T08:58:44Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T08:58:45Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T08:58:46Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T08:58:47Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T08:58:47Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T08:58:47Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T08:58:47Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T08:58:47Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T08:58:47Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:05:02Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:05:09Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:05:09Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:05:09Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T09:05:09Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:05:09Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:05:09Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:05:10Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T09:05:11Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T09:05:12Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:05:12Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:07:20Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:07:20Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:07:20Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:07:20Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:07:20Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:07:20Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "40"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:07:21Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:07:22Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:07:23Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:17:03Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:17:03Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:17:04Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:17:05Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:17:06Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:18:21Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:18:21Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:18:21Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T09:18:21Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:18:21Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:18:21Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:18:22Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:18:23Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T09:18:24Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:18:25Z", "event_type": "file_download", "param1": "20250927_021825_852.jpg"} +{"ts": "2025-09-27T09:18:26Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:18:26Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:18:27Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:18:27Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:18:27Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:27:56Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T09:28:26Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:28:26Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:28:26Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:28:27Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:28:28Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:28:29Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:28:30Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:29:35Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:29:35Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:29:35Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:29:35Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:29:35Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:29:35Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:29:36Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:29:37Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T09:29:38Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:29:39Z", "event_type": "file_download", "param1": "20250927_022939_838.jpg"} +{"ts": "2025-09-27T09:29:42Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:29:43Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:29:44Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:29:45Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T09:29:46Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:29:47Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:29:47Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:29:47Z", "event_type": "file_download", "param1": "20250927_022947_395.jpg"} +{"ts": "2025-09-27T09:29:49Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:29:49Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T09:29:49Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:29:49Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:29:49Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:29:50Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:32:49Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:32:49Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:32:49Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:32:49Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:32:49Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:32:49Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:32:50Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T09:32:51Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:32:52Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:32:53Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:32:54Z", "event_type": "file_download", "param1": "20250927_023254_026.jpg"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:32:57Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:32:58Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:32:59Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:33:00Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:33:01Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:33:01Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T09:33:01Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:33:01Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:33:01Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:33:01Z", "event_type": "file_download", "param1": "20250927_023301_581.jpg"} +{"ts": "2025-09-27T09:33:04Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:33:04Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:33:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T09:33:05Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:33:06Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:33:07Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:33:08Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:33:09Z", "event_type": "file_download", "param1": "20250927_023309_052.jpg"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:33:12Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:33:13Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:33:14Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:33:15Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-27T09:33:16Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T09:33:16Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T09:33:16Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:33:16Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:33:16Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:33:16Z", "event_type": "file_download", "param1": "20250927_023316_690.jpg"} +{"ts": "2025-09-27T09:33:20Z", "event_type": "processing_start", "param1": "20250927_023254_026.jpg", "param2": "20250927_023301_581.jpg", "param3": "20250927_023309_052.jpg", "param4": "20250927_023316_690.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_023320_242.jpg"} +{"ts": "2025-09-27T09:33:20Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T09:33:21Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023254_026.jpg", "param2": "https://fotoshare.co/i/scrsza", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:33:21Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_023320_242.jpg", "param2": "https://fotoshare.co/i/43hkjzs", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-27T09:33:22Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_023320_242.mp4", "param2": "https://fotoshare.co/i/pszjsk", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T09:33:22Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023301_581.jpg", "param2": "https://fotoshare.co/i/1xe3r1d", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:33:23Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023309_052.jpg", "param2": "https://fotoshare.co/i/2xsx8a4", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:33:24Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023316_690.jpg", "param2": "https://fotoshare.co/i/3h1xpyy", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:33:50Z", "event_type": "session_end"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:35:43Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:35:44Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T09:35:45Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "93"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-27T09:35:46Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T09:35:47Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T09:35:47Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:35:47Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:35:47Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:35:47Z", "event_type": "file_download", "param1": "20250927_023547_467.jpg"} +{"ts": "2025-09-27T09:35:50Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:35:50Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:35:50Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:35:50Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:35:50Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:35:51Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T09:35:52Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:35:53Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:35:54Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:35:55Z", "event_type": "file_download", "param1": "20250927_023555_067.jpg"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:35:58Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T09:35:59Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:36:00Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:36:01Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:36:02Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T09:36:02Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T09:36:02Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:36:02Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:36:02Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:36:02Z", "event_type": "file_download", "param1": "20250927_023602_522.jpg"} +{"ts": "2025-09-27T09:36:05Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T09:36:05Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T09:36:05Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T09:36:05Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T09:36:06Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T09:36:07Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T09:36:08Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T09:36:09Z", "event_type": "capture_start"} +{"ts": "2025-09-27T09:36:10Z", "event_type": "file_download", "param1": "20250927_023610_038.jpg"} +{"ts": "2025-09-27T09:36:13Z", "event_type": "processing_start", "param1": "20250927_023547_467.jpg", "param2": "20250927_023555_067.jpg", "param3": "20250927_023602_522.jpg", "param4": "20250927_023610_038.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_023613_560.jpg"} +{"ts": "2025-09-27T09:36:13Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T09:36:14Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023547_467.jpg", "param2": "https://fotoshare.co/i/3efss16", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:36:15Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_023613_560.jpg", "param2": "https://fotoshare.co/i/4395ts1", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-27T09:36:15Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_023613_560.mp4", "param2": "https://fotoshare.co/i/2bmcmn4", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T09:36:16Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023555_067.jpg", "param2": "https://fotoshare.co/i/1v2r61v", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:36:17Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023602_522.jpg", "param2": "https://fotoshare.co/i/39w7ktp", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:36:18Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_023610_038.jpg", "param2": "https://fotoshare.co/i/3eskst3", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T09:36:45Z", "event_type": "session_end"} +{"ts": "2025-09-27T16:47:53Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T16:47:53Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:47:53Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:47:54Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:47:55Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:47:56Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T16:47:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:47:58Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:47:58Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:47:58Z", "event_type": "file_download", "param1": "20250927_094758_172.jpg"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:48:01Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:48:02Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:48:03Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:48:04Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:48:05Z", "event_type": "session_end"} +{"ts": "2025-09-27T16:49:40Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T16:49:40Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:49:40Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:49:40Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:49:41Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:49:42Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:49:43Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:49:44Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:49:45Z", "event_type": "file_download", "param1": "20250927_094945_116.jpg"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T16:49:48Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:49:49Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:49:50Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:49:51Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T16:49:52Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:49:52Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:49:52Z", "event_type": "session_end"} +{"ts": "2025-09-27T16:52:24Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T16:52:24Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:52:24Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:52:24Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:52:24Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:52:25Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:52:26Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:52:27Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:52:28Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:52:29Z", "event_type": "file_download", "param1": "20250927_095229_067.jpg"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:52:32Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:52:33Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:52:34Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:52:35Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:52:36Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:52:36Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T16:52:36Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:52:36Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:52:36Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:52:36Z", "event_type": "file_download", "param1": "20250927_095236_548.jpg"} +{"ts": "2025-09-27T16:52:37Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:52:37Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:52:37Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:52:37Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:52:37Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:52:38Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T16:52:39Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:52:40Z", "event_type": "session_end"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:56:43Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:56:44Z", "event_type": "session_end"} +{"ts": "2025-09-27T16:56:52Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T16:56:52Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:56:52Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "40"} +{"ts": "2025-09-27T16:56:53Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:56:54Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:56:55Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T16:56:56Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:56:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:56:57Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:56:57Z", "event_type": "file_download", "param1": "20250927_095657_268.jpg"} +{"ts": "2025-09-27T16:57:00Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:57:00Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:57:00Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:57:00Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:57:00Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:57:00Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:57:01Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:57:02Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:57:03Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:57:04Z", "event_type": "file_download", "param1": "20250927_095704_702.jpg"} +{"ts": "2025-09-27T16:57:07Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:57:07Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "27"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "29"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T16:57:08Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:57:09Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:57:10Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:57:11Z", "event_type": "session_end"} +{"ts": "2025-09-27T16:57:45Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T16:57:45Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:57:45Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:57:45Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:57:45Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:57:45Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:57:46Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T16:57:47Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:57:48Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:57:49Z", "event_type": "file_download", "param1": "20250927_095749_922.jpg"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:57:53Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:57:54Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:57:55Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:57:56Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T16:57:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:57:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:57:57Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:57:57Z", "event_type": "file_download", "param1": "20250927_095757_532.jpg"} +{"ts": "2025-09-27T16:58:00Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:58:00Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T16:58:00Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:58:00Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "29"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T16:58:01Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "60"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T16:58:02Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "71"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "73"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "82"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-27T16:58:03Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "93"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:58:04Z", "event_type": "file_download", "param1": "20250927_095804_994.jpg"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T16:58:08Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T16:58:09Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T16:58:10Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T16:58:11Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T16:58:12Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T16:58:12Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:58:12Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T16:58:12Z", "event_type": "capture_start"} +{"ts": "2025-09-27T16:58:12Z", "event_type": "file_download", "param1": "20250927_095812_570.jpg"} +{"ts": "2025-09-27T16:58:16Z", "event_type": "processing_start", "param1": "20250927_095749_922.jpg", "param2": "20250927_095757_532.jpg", "param3": "20250927_095804_994.jpg", "param4": "20250927_095812_570.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_095816_132.jpg"} +{"ts": "2025-09-27T16:58:16Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T16:58:17Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_095816_132.mp4", "param2": "https://fotoshare.co/i/27v4mbb", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T16:58:19Z", "event_type": "session_end"} +{"ts": "2025-09-27T17:07:35Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T17:07:39Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T17:09:58Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:10:19Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:10:20Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:10:21Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:10:22Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:10:23Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T17:10:23Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T17:10:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:10:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:10:23Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:10:23Z", "event_type": "file_download", "param1": "20250927_101023_712.jpg"} +{"ts": "2025-09-27T17:10:25Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:10:25Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T17:10:25Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:10:25Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:10:25Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:10:25Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:10:26Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T17:10:26Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:10:26Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:10:26Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:10:26Z", "event_type": "session_end"} +{"ts": "2025-09-27T17:11:18Z", "event_type": "countdown", "param1": "3"} +{"ts": "2025-09-27T17:11:46Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:11:47Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T17:11:48Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T17:11:49Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T17:11:50Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T17:11:51Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:11:51Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:11:51Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:11:51Z", "event_type": "file_download", "param1": "20250927_101151_513.jpg"} +{"ts": "2025-09-27T17:11:54Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:11:54Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:11:54Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:11:54Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T17:11:55Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:11:56Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:11:57Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:11:58Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:11:59Z", "event_type": "file_download", "param1": "20250927_101159_057.jpg"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:12:02Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:12:03Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:12:04Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:12:05Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:12:06Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T17:12:06Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T17:12:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:12:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:12:06Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:12:06Z", "event_type": "file_download", "param1": "20250927_101206_600.jpg"} +{"ts": "2025-09-27T17:12:09Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:12:09Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:12:09Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T17:12:10Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T17:12:11Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:12:12Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:12:13Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:12:14Z", "event_type": "file_download", "param1": "20250927_101214_154.jpg"} +{"ts": "2025-09-27T17:12:17Z", "event_type": "processing_start", "param1": "20250927_101151_513.jpg", "param2": "20250927_101159_057.jpg", "param3": "20250927_101206_600.jpg", "param4": "20250927_101214_154.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_101217_655.jpg"} +{"ts": "2025-09-27T17:12:17Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T17:12:19Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_101217_655.mp4", "param2": "https://fotoshare.co/i/1rc1pz1", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T17:12:36Z", "event_type": "session_end"} +{"ts": "2025-09-27T17:16:18Z", "event_type": "session_start", "param1": "Boomerang"} +{"ts": "2025-09-27T17:16:18Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:16:18Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:16:18Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:16:18Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:16:18Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:16:19Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T17:16:20Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T17:16:21Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:16:22Z", "event_type": "session_end"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "session_start", "param1": "Boomerang"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:17:14Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:17:15Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:17:16Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T17:17:17Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:18Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:19Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:19Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:19Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:19Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:17:19Z", "event_type": "session_end"} +{"ts": "2025-09-27T17:17:55Z", "event_type": "session_start", "param1": "Boomerang"} +{"ts": "2025-09-27T17:17:55Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:17:55Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T17:17:55Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T17:17:56Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:17:57Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "80"} +{"ts": "2025-09-27T17:17:58Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:17:59Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:00Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:18:01Z", "event_type": "processing_start", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_101801.mp4"} +{"ts": "2025-09-27T17:18:03Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T17:18:04Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_101801.mp4", "param2": "https://fotoshare.co/i/2pdqbxy", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T17:18:33Z", "event_type": "session_end"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "session_start", "param1": "Video"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T17:18:51Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T17:18:52Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T17:18:53Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "91"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T17:18:54Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:55Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:56Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T17:18:56Z", "event_type": "capture_start"} +{"ts": "2025-09-27T17:19:07Z", "event_type": "file_download", "param1": "20250927_101856_258.mp4"} +{"ts": "2025-09-27T17:19:07Z", "event_type": "processing_start", "param1": "C:\\dslrBooth\\Test Event1\\Videos\\high_resolution\\20250927_101907.mp4"} +{"ts": "2025-09-27T17:19:07Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T17:19:10Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Videos\\web\\20250927_101907.mp4", "param2": "https://fotoshare.co/i/219490m", "param3": "video", "param4": "Test Event1"} +{"ts": "2025-09-27T17:19:38Z", "event_type": "session_end"} +{"ts": "2025-09-27T18:59:23Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T18:59:23Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T18:59:24Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T18:59:25Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T18:59:26Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T18:59:27Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T18:59:28Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T18:59:28Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T18:59:28Z", "event_type": "capture_start"} +{"ts": "2025-09-27T18:59:28Z", "event_type": "file_download", "param1": "20250927_115928_329.jpg"} +{"ts": "2025-09-27T18:59:30Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T18:59:30Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T18:59:30Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T18:59:30Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T18:59:30Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T18:59:30Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T18:59:31Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T18:59:32Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:05:06Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:05:07Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:05:08Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "91"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:05:09Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:05:10Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:05:10Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:05:10Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:05:10Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:05:10Z", "event_type": "file_download", "param1": "20250927_120510_424.jpg"} +{"ts": "2025-09-27T19:05:12Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:05:12Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:05:13Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:05:13Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:05:13Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:05:13Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:05:13Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:05:13Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:07:33Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:07:33Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:07:34Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "45"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T19:07:35Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T19:07:36Z", "event_type": "countdown", "param1": "80"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "91"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:07:37Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:07:38Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:07:38Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:07:38Z", "event_type": "file_download", "param1": "20250927_120738_313.jpg"} +{"ts": "2025-09-27T19:07:41Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:07:41Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:07:41Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:07:41Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:07:41Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:07:41Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:07:42Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:07:43Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:07:44Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:07:45Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:07:46Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:09:22Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:09:23Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:09:24Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "91"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:09:25Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:09:26Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:09:26Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:09:26Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:09:26Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:09:26Z", "event_type": "file_download", "param1": "20250927_120926_635.jpg"} +{"ts": "2025-09-27T19:09:27Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:09:27Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:09:28Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:09:29Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:09:29Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:41:25Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:41:30Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "45"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:41:31Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:41:32Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:41:33Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:41:34Z", "event_type": "file_download", "param1": "20250927_124134_726.jpg"} +{"ts": "2025-09-27T19:41:35Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:41:35Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:41:36Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:45:56Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:45:57Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:45:58Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:45:59Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:46:00Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:46:00Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:46:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:46:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:46:00Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:46:00Z", "event_type": "file_download", "param1": "20250927_124600_567.jpg"} +{"ts": "2025-09-27T19:46:03Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:46:03Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:46:03Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:46:03Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:46:04Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:46:05Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "60"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "71"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "73"} +{"ts": "2025-09-27T19:46:06Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "countdown", "param1": "82"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:46:07Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:49:58Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:49:59Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:50:00Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:50:01Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:50:02Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:50:02Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:50:02Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:50:02Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:50:02Z", "event_type": "file_download", "param1": "20250927_125002_552.jpg"} +{"ts": "2025-09-27T19:50:05Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:50:05Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:50:05Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:50:05Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:50:06Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:50:07Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:50:08Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:50:09Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:50:09Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "29"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:51:46Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:51:47Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:51:48Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:51:49Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:51:50Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:51:50Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:51:50Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:51:50Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:51:50Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:51:50Z", "event_type": "file_download", "param1": "20250927_125150_532.jpg"} +{"ts": "2025-09-27T19:51:53Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:51:53Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:51:53Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:51:53Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:51:54Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:51:55Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:51:56Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:51:57Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:51:58Z", "event_type": "file_download", "param1": "20250927_125158_036.jpg"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:52:01Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:52:02Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:52:03Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:52:04Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:52:05Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:52:05Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:52:05Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:52:05Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:52:05Z", "event_type": "file_download", "param1": "20250927_125205_506.jpg"} +{"ts": "2025-09-27T19:52:08Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:52:08Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:52:08Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:52:08Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "40"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:52:09Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T19:52:10Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:52:11Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:52:12Z", "event_type": "file_download", "param1": "20250927_125212_994.jpg"} +{"ts": "2025-09-27T19:52:16Z", "event_type": "processing_start", "param1": "20250927_125150_532.jpg", "param2": "20250927_125158_036.jpg", "param3": "20250927_125205_506.jpg", "param4": "20250927_125212_994.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125216_552.jpg"} +{"ts": "2025-09-27T19:52:16Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T19:52:18Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125216_552.jpg", "param2": "https://fotoshare.co/i/3va79ta", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-27T19:52:18Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125150_532.jpg", "param2": "https://fotoshare.co/i/2js8g1k", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:52:19Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_125216_552.mp4", "param2": "https://fotoshare.co/i/43tht2n", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T19:52:20Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125158_036.jpg", "param2": "https://fotoshare.co/i/25h9kw1", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:52:21Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125205_506.jpg", "param2": "https://fotoshare.co/i/8q3ntz", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:52:22Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125212_994.jpg", "param2": "https://fotoshare.co/i/2n4wjrm", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:52:47Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:55:25Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:55:25Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:55:25Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:55:25Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:55:25Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:55:25Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:55:26Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:55:27Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:55:28Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:55:29Z", "event_type": "file_download", "param1": "20250927_125529_888.jpg"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:55:33Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:55:34Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:55:35Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:55:36Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:55:37Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:37Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:37Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:55:37Z", "event_type": "file_download", "param1": "20250927_125537_408.jpg"} +{"ts": "2025-09-27T19:55:40Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:55:40Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:55:40Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:55:40Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:55:40Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:55:41Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:55:42Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:55:43Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:55:44Z", "event_type": "file_download", "param1": "20250927_125544_893.jpg"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:55:48Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:55:49Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:55:50Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:55:51Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:55:52Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:52Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:55:52Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:55:52Z", "event_type": "file_download", "param1": "20250927_125552_446.jpg"} +{"ts": "2025-09-27T19:55:55Z", "event_type": "processing_start", "param1": "20250927_125529_888.jpg", "param2": "20250927_125537_408.jpg", "param3": "20250927_125544_893.jpg", "param4": "20250927_125552_446.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125555_972.jpg"} +{"ts": "2025-09-27T19:55:56Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T19:55:57Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125529_888.jpg", "param2": "https://fotoshare.co/i/1sqbtzv", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:55:57Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125555_972.jpg", "param2": "https://fotoshare.co/i/3c7jyjf", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-27T19:55:57Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_125555_972.mp4", "param2": "https://fotoshare.co/i/4fj8qzt", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T19:55:58Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125537_408.jpg", "param2": "https://fotoshare.co/i/4gs880f", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:56:00Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125544_893.jpg", "param2": "https://fotoshare.co/i/2r85hj9", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:56:02Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125552_446.jpg", "param2": "https://fotoshare.co/i/19an7y4", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:56:26Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:58:17Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:58:18Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "73"} +{"ts": "2025-09-27T19:58:19Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:58:20Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:58:21Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:58:21Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:21Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:21Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:58:21Z", "event_type": "file_download", "param1": "20250927_125821_503.jpg"} +{"ts": "2025-09-27T19:58:24Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:58:24Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:58:24Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:58:24Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:58:25Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:58:26Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-27T19:58:27Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:28Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:58:29Z", "event_type": "file_download", "param1": "20250927_125829_003.jpg"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:58:32Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:58:33Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-27T19:58:34Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "93"} +{"ts": "2025-09-27T19:58:35Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-27T19:58:36Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-27T19:58:36Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:36Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:36Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:58:36Z", "event_type": "file_download", "param1": "20250927_125836_525.jpg"} +{"ts": "2025-09-27T19:58:39Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:58:39Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:58:39Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:58:39Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:58:40Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:58:41Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:58:42Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:58:43Z", "event_type": "file_download", "param1": "20250927_125843_988.jpg"} +{"ts": "2025-09-27T19:58:47Z", "event_type": "processing_start", "param1": "20250927_125821_503.jpg", "param2": "20250927_125829_003.jpg", "param3": "20250927_125836_525.jpg", "param4": "20250927_125843_988.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125847_535.jpg"} +{"ts": "2025-09-27T19:58:47Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T19:58:49Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125821_503.jpg", "param2": "https://fotoshare.co/i/29c676v", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:58:49Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125847_535.jpg", "param2": "https://fotoshare.co/i/3vj00g2", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-27T19:58:49Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_125847_535.mp4", "param2": "https://fotoshare.co/i/35mwawc", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T19:58:50Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125829_003.jpg", "param2": "https://fotoshare.co/i/2wt8k61", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:58:51Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125836_525.jpg", "param2": "https://fotoshare.co/i/3448mhb", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:58:53Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_125843_988.jpg", "param2": "https://fotoshare.co/i/30a1jf9", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-27T19:59:00Z", "event_type": "session_end"} +{"ts": "2025-09-27T19:59:05Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-27T19:59:05Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:59:06Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:59:07Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T19:59:08Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:59:09Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:10Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:10Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:59:10Z", "event_type": "file_download", "param1": "20250927_125910_198.jpg"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:59:13Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:59:14Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:59:15Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-27T19:59:16Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:59:17Z", "event_type": "file_download", "param1": "20250927_125917_682.jpg"} +{"ts": "2025-09-27T19:59:20Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:59:20Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:59:21Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:59:22Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:59:23Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:24Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:59:25Z", "event_type": "file_download", "param1": "20250927_125925_243.jpg"} +{"ts": "2025-09-27T19:59:28Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-27T19:59:28Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-27T19:59:28Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-27T19:59:28Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-27T19:59:28Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-27T19:59:28Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-27T19:59:29Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-27T19:59:30Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-27T19:59:31Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "capture_start"} +{"ts": "2025-09-27T19:59:32Z", "event_type": "file_download", "param1": "20250927_125932_725.jpg"} +{"ts": "2025-09-27T19:59:36Z", "event_type": "processing_start", "param1": "20250927_125910_198.jpg", "param2": "20250927_125917_682.jpg", "param3": "20250927_125925_243.jpg", "param4": "20250927_125932_725.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_125936_278.jpg"} +{"ts": "2025-09-27T19:59:36Z", "event_type": "sharing_screen"} +{"ts": "2025-09-27T19:59:37Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_125936_278.mp4", "param2": "https://fotoshare.co/i/2npn8rv", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-27T20:00:07Z", "event_type": "session_end"} +{"ts": "2025-09-28T00:01:59Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:02:00Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:02:01Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:02:02Z", "event_type": "session_end"} +{"ts": "2025-09-28T00:02:30Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-28T00:02:30Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:02:31Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:02:32Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T00:02:33Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-28T00:02:34Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:35Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:35Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:02:35Z", "event_type": "file_download", "param1": "20250927_170235_253.jpg"} +{"ts": "2025-09-28T00:02:38Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:02:38Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:02:38Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:02:38Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:02:38Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:02:38Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:02:39Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:02:40Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T00:02:41Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:02:42Z", "event_type": "file_download", "param1": "20250927_170242_763.jpg"} +{"ts": "2025-09-28T00:02:45Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:02:46Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:02:47Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T00:02:48Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T00:02:49Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:50Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:50Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:02:50Z", "event_type": "file_download", "param1": "20250927_170250_291.jpg"} +{"ts": "2025-09-28T00:02:53Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-28T00:02:53Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:02:53Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:02:53Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:02:53Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:02:53Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:02:54Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-28T00:02:55Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-28T00:02:56Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:02:57Z", "event_type": "file_download", "param1": "20250927_170257_799.jpg"} +{"ts": "2025-09-28T00:03:01Z", "event_type": "processing_start", "param1": "20250927_170235_253.jpg", "param2": "20250927_170242_763.jpg", "param3": "20250927_170250_291.jpg", "param4": "20250927_170257_799.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_170301_292.jpg"} +{"ts": "2025-09-28T00:03:01Z", "event_type": "sharing_screen"} +{"ts": "2025-09-28T00:03:02Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_170301_292.jpg", "param2": "https://fotoshare.co/i/2a6t37k", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-28T00:03:02Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_170235_253.jpg", "param2": "https://fotoshare.co/i/2w838k6", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T00:03:03Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_170301_292.mp4", "param2": "https://fotoshare.co/i/2gxk0zw", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-28T00:03:03Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_170242_763.jpg", "param2": "https://fotoshare.co/i/3jbvp6v", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T00:03:05Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_170250_291.jpg", "param2": "https://fotoshare.co/i/3m5d1hc", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T00:03:06Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250927_170257_799.jpg", "param2": "https://fotoshare.co/i/2n9y0wr", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T00:03:09Z", "event_type": "session_end"} +{"ts": "2025-09-28T00:19:41Z", "event_type": "session_start", "param1": "OnlyGIF"} +{"ts": "2025-09-28T00:19:41Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:19:41Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T00:19:42Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:19:43Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:19:44Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:19:45Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:19:46Z", "event_type": "file_download", "param1": "20250927_171946_221.jpg"} +{"ts": "2025-09-28T00:19:49Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:19:49Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:19:49Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:19:49Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:19:49Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:19:49Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:19:50Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:19:51Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T00:19:52Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:19:53Z", "event_type": "file_download", "param1": "20250927_171953_763.jpg"} +{"ts": "2025-09-28T00:19:56Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:19:57Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:19:58Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-28T00:19:59Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-28T00:20:00Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:20:01Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:20:01Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:20:01Z", "event_type": "file_download", "param1": "20250927_172001_190.jpg"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T00:20:04Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:20:05Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T00:20:06Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T00:20:07Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "capture_start"} +{"ts": "2025-09-28T00:20:08Z", "event_type": "file_download", "param1": "20250927_172008_652.jpg"} +{"ts": "2025-09-28T00:20:12Z", "event_type": "processing_start", "param1": "20250927_171946_221.jpg", "param2": "20250927_171953_763.jpg", "param3": "20250927_172001_190.jpg", "param4": "20250927_172008_652.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250927_172012_179.jpg"} +{"ts": "2025-09-28T00:20:12Z", "event_type": "sharing_screen"} +{"ts": "2025-09-28T00:20:13Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250927_172012_179.mp4", "param2": "https://fotoshare.co/i/1efkyz2", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-28T00:20:25Z", "event_type": "session_end"} +{"ts": "2025-09-28T00:26:23Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-28T00:26:23Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:26:23Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:26:24Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T00:26:25Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T00:26:26Z", "event_type": "session_end"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T00:26:30Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T00:26:31Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T00:26:32Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T00:26:32Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T00:26:32Z", "event_type": "session_end"} +{"ts": "2025-09-28T07:41:19Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-28T07:41:19Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "29"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T07:41:20Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T07:41:21Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T07:41:22Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:23Z", "event_type": "capture_start"} +{"ts": "2025-09-28T07:41:24Z", "event_type": "file_download", "param1": "20250928_004124_289.jpg"} +{"ts": "2025-09-28T07:41:27Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T07:41:27Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T07:41:27Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T07:41:27Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T07:41:27Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T07:41:27Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T07:41:28Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T07:41:29Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T07:41:30Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "capture_start"} +{"ts": "2025-09-28T07:41:31Z", "event_type": "file_download", "param1": "20250928_004131_807.jpg"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T07:41:35Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T07:41:36Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T07:41:37Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T07:41:38Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:39Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:39Z", "event_type": "capture_start"} +{"ts": "2025-09-28T07:41:39Z", "event_type": "file_download", "param1": "20250928_004139_254.jpg"} +{"ts": "2025-09-28T07:41:42Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T07:41:42Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T07:41:42Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T07:41:42Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T07:41:42Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T07:41:42Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T07:41:43Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T07:41:44Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T07:41:45Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "capture_start"} +{"ts": "2025-09-28T07:41:46Z", "event_type": "file_download", "param1": "20250928_004146_761.jpg"} +{"ts": "2025-09-28T07:41:50Z", "event_type": "processing_start", "param1": "20250928_004124_289.jpg", "param2": "20250928_004131_807.jpg", "param3": "20250928_004139_254.jpg", "param4": "20250928_004146_761.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250928_004150_340.jpg"} +{"ts": "2025-09-28T07:41:50Z", "event_type": "sharing_screen"} +{"ts": "2025-09-28T07:41:55Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_004124_289.jpg", "param2": "https://fotoshare.co/i/3k1d35p", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T07:41:55Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250928_004150_340.jpg", "param2": "https://fotoshare.co/i/4b0s377", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-28T07:41:55Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250928_004150_340.mp4", "param2": "https://fotoshare.co/i/3613tmf", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-28T07:41:56Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_004131_807.jpg", "param2": "https://fotoshare.co/i/5q4k9rp", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T07:41:57Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_004139_254.jpg", "param2": "https://fotoshare.co/i/1nt2s4c", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T07:41:58Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_004146_761.jpg", "param2": "https://fotoshare.co/i/4w7xdba", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T07:42:04Z", "event_type": "session_end"} +{"ts": "2025-09-28T08:36:11Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-28T08:36:11Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T08:36:11Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T08:36:11Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T08:36:12Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "60"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-28T08:36:13Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "73"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T08:36:14Z", "event_type": "countdown", "param1": "84"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "95"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:15Z", "event_type": "capture_start"} +{"ts": "2025-09-28T08:36:16Z", "event_type": "file_download", "param1": "20250928_013616_207.jpg"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T08:36:19Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "40"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-28T08:36:20Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T08:36:21Z", "event_type": "countdown", "param1": "73"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T08:36:22Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "capture_start"} +{"ts": "2025-09-28T08:36:23Z", "event_type": "file_download", "param1": "20250928_013623_694.jpg"} +{"ts": "2025-09-28T08:36:26Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T08:36:26Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-28T08:36:27Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-28T08:36:28Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T08:36:29Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:30Z", "event_type": "capture_start"} +{"ts": "2025-09-28T08:36:31Z", "event_type": "file_download", "param1": "20250928_013631_223.jpg"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-28T08:36:34Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-28T08:36:35Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "62"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-28T08:36:36Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-28T08:36:37Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "capture_start"} +{"ts": "2025-09-28T08:36:38Z", "event_type": "file_download", "param1": "20250928_013638_754.jpg"} +{"ts": "2025-09-28T08:36:42Z", "event_type": "processing_start", "param1": "20250928_013616_207.jpg", "param2": "20250928_013623_694.jpg", "param3": "20250928_013631_223.jpg", "param4": "20250928_013638_754.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250928_013642_260.jpg"} +{"ts": "2025-09-28T08:36:42Z", "event_type": "sharing_screen"} +{"ts": "2025-09-28T08:36:43Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250928_013642_260.jpg", "param2": "https://fotoshare.co/i/50awsbs", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-28T08:36:44Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_013616_207.jpg", "param2": "https://fotoshare.co/i/44w9vnr", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T08:36:44Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250928_013642_260.mp4", "param2": "https://fotoshare.co/i/1qgt6bf", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-28T08:36:45Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_013623_694.jpg", "param2": "https://fotoshare.co/i/1xyjevq", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T08:36:46Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_013631_223.jpg", "param2": "https://fotoshare.co/i/2t4yn77", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T08:36:47Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_013638_754.jpg", "param2": "https://fotoshare.co/i/327cqq4", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-28T08:37:04Z", "event_type": "session_end"} +{"ts": "2025-09-29T05:22:09Z", "event_type": "session_end"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T05:23:04Z", "event_type": "countdown", "param1": "31"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T05:23:05Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T05:23:06Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T05:23:07Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "capture_start"} +{"ts": "2025-09-29T05:23:08Z", "event_type": "file_download", "param1": "20250928_222308_719.jpg"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T05:23:12Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T05:23:13Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T05:23:14Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T05:23:15Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "capture_start"} +{"ts": "2025-09-29T05:23:16Z", "event_type": "file_download", "param1": "20250928_222316_786.jpg"} +{"ts": "2025-09-29T05:23:19Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T05:23:20Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T05:23:21Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T05:23:22Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T05:23:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:24Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:24Z", "event_type": "capture_start"} +{"ts": "2025-09-29T05:23:24Z", "event_type": "file_download", "param1": "20250928_222324_306.jpg"} +{"ts": "2025-09-29T05:23:27Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T05:23:27Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T05:23:27Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T05:23:27Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T05:23:27Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T05:23:27Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T05:23:28Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T05:23:29Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T05:23:30Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "capture_start"} +{"ts": "2025-09-29T05:23:31Z", "event_type": "file_download", "param1": "20250928_222331_753.jpg"} +{"ts": "2025-09-29T05:23:35Z", "event_type": "processing_start", "param1": "20250928_222308_719.jpg", "param2": "20250928_222316_786.jpg", "param3": "20250928_222324_306.jpg", "param4": "20250928_222331_753.jpg", "param5": "C:\\dslrBooth\\Test Event1\\Prints\\20250928_222335_265.jpg"} +{"ts": "2025-09-29T05:23:35Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T05:23:37Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Prints\\20250928_222335_265.jpg", "param2": "https://fotoshare.co/i/34nd9ck", "param3": "print", "param4": "Test Event1"} +{"ts": "2025-09-29T05:23:38Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_222308_719.jpg", "param2": "https://fotoshare.co/i/3kkkajr", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-29T05:23:38Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Animated\\20250928_222335_265.mp4", "param2": "https://fotoshare.co/i/2egks18", "param3": "animation", "param4": "Test Event1"} +{"ts": "2025-09-29T05:23:39Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_222316_786.jpg", "param2": "https://fotoshare.co/i/3y6h284", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-29T05:23:41Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_222324_306.jpg", "param2": "https://fotoshare.co/i/34ck6k4", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-29T05:23:42Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Test Event1\\Singles\\20250928_222331_753.jpg", "param2": "https://fotoshare.co/i/2343mw8", "param3": "original", "param4": "Test Event1"} +{"ts": "2025-09-29T05:23:47Z", "event_type": "session_end"} +{"ts": "2025-09-29T05:33:01Z", "event_type": "session_end"} +{"ts": "2025-09-29T05:33:04Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T05:33:04Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T05:33:04Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T05:33:04Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T05:33:05Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T05:33:06Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T05:33:07Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:33:08Z", "event_type": "capture_start"} +{"ts": "2025-09-29T05:33:09Z", "event_type": "file_download", "param1": "20250928_223309_114.jpg"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T05:33:12Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-29T05:33:13Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T05:33:14Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T05:33:15Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T05:33:16Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T05:33:16Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T05:33:16Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:33:16Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T05:33:16Z", "event_type": "capture_start"} +{"ts": "2025-09-29T05:33:16Z", "event_type": "file_download", "param1": "20250928_223316_540.jpg"} +{"ts": "2025-09-29T05:33:20Z", "event_type": "processing_start", "param1": "20250928_223309_114.jpg", "param2": "20250928_223316_540.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250928_223320_054.jpg"} +{"ts": "2025-09-29T05:33:20Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T05:33:21Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250928_223309_114.jpg", "param2": "https://fotoshare.co/i/3a37pr6", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T05:33:21Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250928_223320_054.jpg", "param2": "https://fotoshare.co/i/3z8c80t", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T05:33:21Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250928_223320_054.mp4", "param2": "https://fotoshare.co/i/2z5d455", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T05:33:23Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250928_223316_540.jpg", "param2": "https://fotoshare.co/i/3p7kjab", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T05:33:50Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:14:02Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:14:02Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:14:03Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:14:04Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:14:05Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:14:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:07Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:07Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:14:07Z", "event_type": "file_download", "param1": "20250929_001407_223.jpg"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:14:10Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:14:11Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:14:12Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:14:13Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:14:14Z", "event_type": "file_download", "param1": "20250929_001414_801.jpg"} +{"ts": "2025-09-29T07:14:18Z", "event_type": "processing_start", "param1": "20250929_001407_223.jpg", "param2": "20250929_001414_801.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250929_001418_304.jpg"} +{"ts": "2025-09-29T07:14:18Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:14:19Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001407_223.jpg", "param2": "https://fotoshare.co/i/3dfgzh9", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:14:20Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_001418_304.jpg", "param2": "https://fotoshare.co/i/2wxtt8z", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:14:20Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250929_001418_304.mp4", "param2": "https://fotoshare.co/i/2sf2mfj", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T07:14:20Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001414_801.jpg", "param2": "https://fotoshare.co/i/5x3q68s", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:14:29Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:14:44Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:14:45Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:14:46Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T07:14:47Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:14:48Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:49Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:49Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:14:49Z", "event_type": "file_download", "param1": "20250929_001449_304.jpg"} +{"ts": "2025-09-29T07:14:52Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:14:52Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:14:52Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:14:52Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:14:52Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:14:52Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:14:53Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:14:54Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:14:55Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:14:56Z", "event_type": "file_download", "param1": "20250929_001456_739.jpg"} +{"ts": "2025-09-29T07:15:00Z", "event_type": "processing_start", "param1": "20250929_001449_304.jpg", "param2": "20250929_001456_739.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250929_001500_255.jpg"} +{"ts": "2025-09-29T07:15:00Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:15:01Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001449_304.jpg", "param2": "https://fotoshare.co/i/2zx3kde", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:15:01Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_001500_255.jpg", "param2": "https://fotoshare.co/i/42rrvdq", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:15:01Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250929_001500_255.mp4", "param2": "https://fotoshare.co/i/23kknea", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T07:15:02Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001456_739.jpg", "param2": "https://fotoshare.co/i/3yzzsy3", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:15:06Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:15:08Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "40"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "42"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "49"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "51"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "53"} +{"ts": "2025-09-29T07:15:09Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:15:10Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:15:11Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:15:12Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-29T07:15:12Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:15:12Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:15:12Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:15:12Z", "event_type": "file_download", "param1": "20250929_001512_504.jpg"} +{"ts": "2025-09-29T07:15:15Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:15:15Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:15:15Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:15:15Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:15:16Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:15:17Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:15:18Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:15:19Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:15:20Z", "event_type": "file_download", "param1": "20250929_001520_034.jpg"} +{"ts": "2025-09-29T07:15:23Z", "event_type": "processing_start", "param1": "20250929_001512_504.jpg", "param2": "20250929_001520_034.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250929_001523_505.jpg"} +{"ts": "2025-09-29T07:15:23Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:15:24Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001512_504.jpg", "param2": "https://fotoshare.co/i/3q721g9", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:15:25Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_001523_505.jpg", "param2": "https://fotoshare.co/i/46xzkz0", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:15:25Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001520_034.jpg", "param2": "https://fotoshare.co/i/1jr1zse", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:15:25Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250929_001523_505.mp4", "param2": "https://fotoshare.co/i/1t0cyz3", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T07:15:32Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "countdown", "param1": "29"} +{"ts": "2025-09-29T07:15:55Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:15:56Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:15:57Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:15:58Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:15:59Z", "event_type": "file_download", "param1": "20250929_001559_714.jpg"} +{"ts": "2025-09-29T07:16:02Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:16:02Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:16:03Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:16:04Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:16:05Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "86"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "97"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:16:06Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:16:07Z", "event_type": "file_download", "param1": "20250929_001607_265.jpg"} +{"ts": "2025-09-29T07:16:10Z", "event_type": "processing_start", "param1": "20250929_001559_714.jpg", "param2": "20250929_001607_265.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250929_001610_755.jpg"} +{"ts": "2025-09-29T07:16:11Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:16:12Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001559_714.jpg", "param2": "https://fotoshare.co/i/3p9bkzw", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:16:12Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250929_001610_755.mp4", "param2": "https://fotoshare.co/i/2b5wnjf", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T07:16:13Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_001610_755.jpg", "param2": "https://fotoshare.co/i/1ayvczd", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:16:13Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_001607_265.jpg", "param2": "https://fotoshare.co/i/1n2jmte", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:16:15Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:20:02Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:20:03Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "64"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:20:04Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "75"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "77"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "88"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:20:05Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "countdown", "param1": "99"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:20:06Z", "event_type": "file_download", "param1": "20250929_002006_694.jpg"} +{"ts": "2025-09-29T07:20:09Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:20:09Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:20:09Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:20:10Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:20:11Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:20:12Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:20:13Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:20:14Z", "event_type": "file_download", "param1": "20250929_002014_142.jpg"} +{"ts": "2025-09-29T07:20:17Z", "event_type": "processing_start", "param1": "20250929_002006_694.jpg", "param2": "20250929_002014_142.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250929_002017_608.jpg"} +{"ts": "2025-09-29T07:20:17Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:20:19Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_002017_608.jpg", "param2": "https://fotoshare.co/i/38ka7cm", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:20:19Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_002006_694.jpg", "param2": "https://fotoshare.co/i/30dekpz", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:20:19Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250929_002017_608.mp4", "param2": "https://fotoshare.co/i/2csf7fs", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T07:20:20Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_002014_142.jpg", "param2": "https://fotoshare.co/i/2qzw986", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:20:28Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:29:19Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:29:19Z", "event_type": "countdown", "param1": "21"} +{"ts": "2025-09-29T07:29:19Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:29:19Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:29:19Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:29:19Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:29:20Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "55"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "66"} +{"ts": "2025-09-29T07:29:21Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:29:22Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:29:23Z", "event_type": "file_download", "param1": "20250929_002923_911.jpg"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:29:27Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "44"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:29:28Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:29:29Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "90"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:29:30Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:29:31Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:29:31Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:29:31Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:29:31Z", "event_type": "file_download", "param1": "20250929_002931_337.jpg"} +{"ts": "2025-09-29T07:29:34Z", "event_type": "processing_start", "param1": "20250929_002923_911.jpg", "param2": "20250929_002931_337.jpg", "param3": "C:\\dslrBooth\\Demo\\Prints\\20250929_002934_820.jpg"} +{"ts": "2025-09-29T07:29:35Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:29:37Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_002923_911.jpg", "param2": "https://fotoshare.co/i/2c9m8vt", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:29:37Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_002934_820.jpg", "param2": "https://fotoshare.co/i/1m60702", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:29:37Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Animated\\20250929_002934_820.mp4", "param2": "https://fotoshare.co/i/1paykr2", "param3": "animation", "param4": "Demo"} +{"ts": "2025-09-29T07:29:39Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_002931_337.jpg", "param2": "https://fotoshare.co/i/2pjkkks", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:29:55Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "32"} +{"ts": "2025-09-29T07:29:57Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:29:58Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "68"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:29:59Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:30:00Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:30:29Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:33:19Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:33:19Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:33:19Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:33:19Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:33:20Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "57"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:33:21Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "79"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:33:22Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "92"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:33:23Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:33:24Z", "event_type": "file_download", "param1": "20250929_003324_034.jpg"} +{"ts": "2025-09-29T07:33:27Z", "event_type": "processing_start", "param1": "20250929_003324_034.jpg", "param2": "C:\\dslrBooth\\Demo\\Prints\\20250929_003327_537.jpg"} +{"ts": "2025-09-29T07:33:27Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:33:28Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_003327_537.jpg", "param2": "https://fotoshare.co/i/1w5f1g3", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:33:29Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_003324_034.jpg", "param2": "https://fotoshare.co/i/2d62v1b", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:33:34Z", "event_type": "session_end"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "session_start", "param1": "PrintAndGIF"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "22"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown_start", "param1": "5"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "24"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "26"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "28"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "30"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "33"} +{"ts": "2025-09-29T07:34:29Z", "event_type": "countdown", "param1": "35"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "37"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "39"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "41"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "43"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "46"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "48"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "50"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "52"} +{"ts": "2025-09-29T07:34:30Z", "event_type": "countdown", "param1": "54"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "56"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "59"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "61"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "63"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "65"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "67"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "70"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "72"} +{"ts": "2025-09-29T07:34:31Z", "event_type": "countdown", "param1": "74"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "76"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "78"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "81"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "83"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "85"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "87"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "89"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "91"} +{"ts": "2025-09-29T07:34:32Z", "event_type": "countdown", "param1": "94"} +{"ts": "2025-09-29T07:34:33Z", "event_type": "countdown", "param1": "96"} +{"ts": "2025-09-29T07:34:33Z", "event_type": "countdown", "param1": "98"} +{"ts": "2025-09-29T07:34:33Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:34:33Z", "event_type": "countdown", "param1": "100"} +{"ts": "2025-09-29T07:34:33Z", "event_type": "capture_start"} +{"ts": "2025-09-29T07:34:33Z", "event_type": "file_download", "param1": "20250929_003433_550.jpg"} +{"ts": "2025-09-29T07:34:37Z", "event_type": "processing_start", "param1": "20250929_003433_550.jpg", "param2": "C:\\dslrBooth\\Demo\\Prints\\20250929_003437_073.jpg"} +{"ts": "2025-09-29T07:34:37Z", "event_type": "sharing_screen"} +{"ts": "2025-09-29T07:34:38Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Singles\\20250929_003433_550.jpg", "param2": "https://fotoshare.co/i/2xkc5kq", "param3": "original", "param4": "Demo"} +{"ts": "2025-09-29T07:34:38Z", "event_type": "file_upload", "param1": "C:\\dslrBooth\\Demo\\Prints\\20250929_003437_073.jpg", "param2": "https://fotoshare.co/i/1wmr230", "param3": "print", "param4": "Demo"} +{"ts": "2025-09-29T07:34:42Z", "event_type": "session_end"} diff --git a/dslrbooth_triggers.log b/dslrbooth_triggers.log new file mode 100644 index 0000000..82de17c --- /dev/null +++ b/dslrbooth_triggers.log @@ -0,0 +1,11176 @@ +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +22:37:20.975 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 22:37:20.975 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +22:37:21.006 {"event_type":"countdown","param1":"30"} +Event logged successfully: 22:37:21.006 {"event_type":"countdown","param1":"30"} +=== End Request === +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} + event_type = file_download + param1 = 20250926_222756_010.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +22:37:21.022 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +Event logged successfully: 22:37:21.022 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +=== End Request === +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +22:47:31.802 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 22:47:31.802 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +22:47:31.823 {"event_type":"countdown","param1":"30"} +Event logged successfully: 22:47:31.823 {"event_type":"countdown","param1":"30"} +=== End Request === +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} + event_type = file_download + param1 = 20250926_222756_010.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +22:47:31.863 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +Event logged successfully: 22:47:31.863 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +=== End Request === +GET /?event_type=session_end +2025-09-26T22:50:16.989100-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090', 'Connection': 'Keep-Alive'} +Query Parameters: {'event_type': 'session_end'} + event_type = session_end +Raw Body: Empty +Parsed Payload: {'event_type': 'session_end'} +Normalized Event: {'event_type': 'session_end'} +22:50:16.994 {"event_type":"session_end"} +Event logged successfully: 22:50:16.994 {"event_type":"session_end"} +=== End Request === +GET /?event_type=session_start¶m1=PrintAndGIF +2025-09-26T22:50:27.221962-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +22:50:27.230 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 22:50:27.230 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +GET /?event_type=countdown_start¶m1=5 +2025-09-26T22:50:27.302998-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown_start', 'param1': '5'} + event_type = countdown_start + param1 = 5 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown_start', 'param1': '5'} +Normalized Event: {'event_type': 'countdown_start', 'param1': '5'} +22:50:27.308 {"event_type":"countdown_start","param1":"5"} +Event logged successfully: 22:50:27.308 {"event_type":"countdown_start","param1":"5"} +=== End Request === +GET /?event_type=countdown¶m1=22 +2025-09-26T22:50:27.415622-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '22'} + event_type = countdown + param1 = 22 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '22'} +Normalized Event: {'event_type': 'countdown', 'param1': '22'} +22:50:27.420 {"event_type":"countdown","param1":"22"} +Event logged successfully: 22:50:27.420 {"event_type":"countdown","param1":"22"} +=== End Request === +GET /?event_type=countdown¶m1=24 +2025-09-26T22:50:27.527374-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '24'} + event_type = countdown + param1 = 24 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '24'} +Normalized Event: {'event_type': 'countdown', 'param1': '24'} +22:50:27.535 {"event_type":"countdown","param1":"24"} +Event logged successfully: 22:50:27.535 {"event_type":"countdown","param1":"24"} +=== End Request === +GET /?event_type=countdown¶m1=26 +2025-09-26T22:50:27.628682-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '26'} + event_type = countdown + param1 = 26 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '26'} +Normalized Event: {'event_type': 'countdown', 'param1': '26'} +22:50:27.638 {"event_type":"countdown","param1":"26"} +Event logged successfully: 22:50:27.638 {"event_type":"countdown","param1":"26"} +=== End Request === +GET /?event_type=countdown¶m1=28 +2025-09-26T22:50:27.733205-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '28'} + event_type = countdown + param1 = 28 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '28'} +Normalized Event: {'event_type': 'countdown', 'param1': '28'} +22:50:27.737 {"event_type":"countdown","param1":"28"} +Event logged successfully: 22:50:27.737 {"event_type":"countdown","param1":"28"} +=== End Request === +GET /?event_type=countdown¶m1=30 +2025-09-26T22:50:27.848966-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +22:50:27.858 {"event_type":"countdown","param1":"30"} +Event logged successfully: 22:50:27.858 {"event_type":"countdown","param1":"30"} +=== End Request === +GET /?event_type=countdown¶m1=33 +2025-09-26T22:50:27.952753-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '33'} + event_type = countdown + param1 = 33 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '33'} +Normalized Event: {'event_type': 'countdown', 'param1': '33'} +22:50:27.966 {"event_type":"countdown","param1":"33"} +Event logged successfully: 22:50:27.966 {"event_type":"countdown","param1":"33"} +=== End Request === +GET /?event_type=countdown¶m1=35 +2025-09-26T22:50:28.069013-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '35'} + event_type = countdown + param1 = 35 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '35'} +Normalized Event: {'event_type': 'countdown', 'param1': '35'} +22:50:28.075 {"event_type":"countdown","param1":"35"} +Event logged successfully: 22:50:28.075 {"event_type":"countdown","param1":"35"} +=== End Request === +GET /?event_type=countdown¶m1=37 +2025-09-26T22:50:28.176925-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '37'} + event_type = countdown + param1 = 37 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '37'} +Normalized Event: {'event_type': 'countdown', 'param1': '37'} +22:50:28.183 {"event_type":"countdown","param1":"37"} +Event logged successfully: 22:50:28.183 {"event_type":"countdown","param1":"37"} +=== End Request === +GET /?event_type=countdown¶m1=39 +2025-09-26T22:50:28.297798-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '39'} + event_type = countdown + param1 = 39 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '39'} +Normalized Event: {'event_type': 'countdown', 'param1': '39'} +22:50:28.309 {"event_type":"countdown","param1":"39"} +Event logged successfully: 22:50:28.309 {"event_type":"countdown","param1":"39"} +=== End Request === +GET /?event_type=countdown¶m1=42 +2025-09-26T22:50:28.411896-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '42'} + event_type = countdown + param1 = 42 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '42'} +Normalized Event: {'event_type': 'countdown', 'param1': '42'} +22:50:28.420 {"event_type":"countdown","param1":"42"} +Event logged successfully: 22:50:28.420 {"event_type":"countdown","param1":"42"} +=== End Request === +GET /?event_type=countdown¶m1=44 +2025-09-26T22:50:28.522036-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '44'} + event_type = countdown + param1 = 44 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '44'} +Normalized Event: {'event_type': 'countdown', 'param1': '44'} +22:50:28.541 {"event_type":"countdown","param1":"44"} +Event logged successfully: 22:50:28.541 {"event_type":"countdown","param1":"44"} +=== End Request === +GET /?event_type=countdown¶m1=46 +2025-09-26T22:50:28.630542-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '46'} + event_type = countdown + param1 = 46 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '46'} +Normalized Event: {'event_type': 'countdown', 'param1': '46'} +22:50:28.637 {"event_type":"countdown","param1":"46"} +Event logged successfully: 22:50:28.637 {"event_type":"countdown","param1":"46"} +=== End Request === +GET /?event_type=countdown¶m1=48 +2025-09-26T22:50:28.733353-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '48'} + event_type = countdown + param1 = 48 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '48'} +Normalized Event: {'event_type': 'countdown', 'param1': '48'} +22:50:28.739 {"event_type":"countdown","param1":"48"} +Event logged successfully: 22:50:28.739 {"event_type":"countdown","param1":"48"} +=== End Request === +GET /?event_type=countdown¶m1=51 +2025-09-26T22:50:28.858455-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '51'} + event_type = countdown + param1 = 51 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '51'} +Normalized Event: {'event_type': 'countdown', 'param1': '51'} +22:50:28.863 {"event_type":"countdown","param1":"51"} +Event logged successfully: 22:50:28.863 {"event_type":"countdown","param1":"51"} +=== End Request === +GET /?event_type=countdown¶m1=53 +2025-09-26T22:50:28.974025-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '53'} + event_type = countdown + param1 = 53 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '53'} +Normalized Event: {'event_type': 'countdown', 'param1': '53'} +22:50:28.978 {"event_type":"countdown","param1":"53"} +Event logged successfully: 22:50:28.978 {"event_type":"countdown","param1":"53"} +=== End Request === +GET /?event_type=countdown¶m1=55 +2025-09-26T22:50:29.088924-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '55'} + event_type = countdown + param1 = 55 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '55'} +Normalized Event: {'event_type': 'countdown', 'param1': '55'} +22:50:29.101 {"event_type":"countdown","param1":"55"} +Event logged successfully: 22:50:29.101 {"event_type":"countdown","param1":"55"} +=== End Request === +GET /?event_type=countdown¶m1=57 +2025-09-26T22:50:29.189852-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '57'} + event_type = countdown + param1 = 57 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '57'} +Normalized Event: {'event_type': 'countdown', 'param1': '57'} +22:50:29.208 {"event_type":"countdown","param1":"57"} +Event logged successfully: 22:50:29.208 {"event_type":"countdown","param1":"57"} +=== End Request === +GET /?event_type=countdown¶m1=59 +2025-09-26T22:50:29.300248-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '59'} + event_type = countdown + param1 = 59 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '59'} +Normalized Event: {'event_type': 'countdown', 'param1': '59'} +22:50:29.305 {"event_type":"countdown","param1":"59"} +Event logged successfully: 22:50:29.305 {"event_type":"countdown","param1":"59"} +=== End Request === +GET /?event_type=countdown¶m1=62 +2025-09-26T22:50:29.408393-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '62'} + event_type = countdown + param1 = 62 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '62'} +Normalized Event: {'event_type': 'countdown', 'param1': '62'} +22:50:29.418 {"event_type":"countdown","param1":"62"} +Event logged successfully: 22:50:29.418 {"event_type":"countdown","param1":"62"} +=== End Request === +GET /?event_type=countdown¶m1=64 +2025-09-26T22:50:29.516365-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '64'} + event_type = countdown + param1 = 64 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '64'} +Normalized Event: {'event_type': 'countdown', 'param1': '64'} +22:50:29.521 {"event_type":"countdown","param1":"64"} +Event logged successfully: 22:50:29.521 {"event_type":"countdown","param1":"64"} +=== End Request === +GET /?event_type=countdown¶m1=66 +2025-09-26T22:50:29.626740-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '66'} + event_type = countdown + param1 = 66 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '66'} +Normalized Event: {'event_type': 'countdown', 'param1': '66'} +22:50:29.629 {"event_type":"countdown","param1":"66"} +Event logged successfully: 22:50:29.629 {"event_type":"countdown","param1":"66"} +=== End Request === +GET /?event_type=countdown¶m1=68 +2025-09-26T22:50:29.747070-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '68'} + event_type = countdown + param1 = 68 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '68'} +Normalized Event: {'event_type': 'countdown', 'param1': '68'} +22:50:29.757 {"event_type":"countdown","param1":"68"} +Event logged successfully: 22:50:29.757 {"event_type":"countdown","param1":"68"} +=== End Request === +GET /?event_type=countdown¶m1=70 +2025-09-26T22:50:29.847396-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '70'} + event_type = countdown + param1 = 70 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '70'} +Normalized Event: {'event_type': 'countdown', 'param1': '70'} +22:50:29.853 {"event_type":"countdown","param1":"70"} +Event logged successfully: 22:50:29.853 {"event_type":"countdown","param1":"70"} +=== End Request === +GET /?event_type=countdown¶m1=73 +2025-09-26T22:50:29.956318-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '73'} + event_type = countdown + param1 = 73 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '73'} +Normalized Event: {'event_type': 'countdown', 'param1': '73'} +22:50:29.969 {"event_type":"countdown","param1":"73"} +Event logged successfully: 22:50:29.969 {"event_type":"countdown","param1":"73"} +=== End Request === +GET /?event_type=countdown¶m1=75 +2025-09-26T22:50:30.064789-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '75'} + event_type = countdown + param1 = 75 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '75'} +Normalized Event: {'event_type': 'countdown', 'param1': '75'} +22:50:30.071 {"event_type":"countdown","param1":"75"} +Event logged successfully: 22:50:30.071 {"event_type":"countdown","param1":"75"} +=== End Request === +GET /?event_type=countdown¶m1=77 +2025-09-26T22:50:30.171729-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '77'} + event_type = countdown + param1 = 77 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '77'} +Normalized Event: {'event_type': 'countdown', 'param1': '77'} +22:50:30.174 {"event_type":"countdown","param1":"77"} +Event logged successfully: 22:50:30.174 {"event_type":"countdown","param1":"77"} +=== End Request === +GET /?event_type=countdown¶m1=79 +2025-09-26T22:50:30.284717-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '79'} + event_type = countdown + param1 = 79 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '79'} +Normalized Event: {'event_type': 'countdown', 'param1': '79'} +22:50:30.286 {"event_type":"countdown","param1":"79"} +Event logged successfully: 22:50:30.286 {"event_type":"countdown","param1":"79"} +=== End Request === +GET /?event_type=countdown¶m1=81 +2025-09-26T22:50:30.394393-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '81'} + event_type = countdown + param1 = 81 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '81'} +Normalized Event: {'event_type': 'countdown', 'param1': '81'} +22:50:30.397 {"event_type":"countdown","param1":"81"} +Event logged successfully: 22:50:30.397 {"event_type":"countdown","param1":"81"} +=== End Request === +GET /?event_type=countdown¶m1=84 +2025-09-26T22:50:30.508621-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '84'} + event_type = countdown + param1 = 84 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '84'} +Normalized Event: {'event_type': 'countdown', 'param1': '84'} +22:50:30.510 {"event_type":"countdown","param1":"84"} +Event logged successfully: 22:50:30.510 {"event_type":"countdown","param1":"84"} +=== End Request === +GET /?event_type=countdown¶m1=86 +2025-09-26T22:50:30.610340-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '86'} + event_type = countdown + param1 = 86 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '86'} +Normalized Event: {'event_type': 'countdown', 'param1': '86'} +22:50:30.614 {"event_type":"countdown","param1":"86"} +Event logged successfully: 22:50:30.614 {"event_type":"countdown","param1":"86"} +=== End Request === +GET /?event_type=session_end +2025-09-26T22:50:30.679416-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'session_end'} + event_type = session_end +Raw Body: Empty +Parsed Payload: {'event_type': 'session_end'} +Normalized Event: {'event_type': 'session_end'} +22:50:30.684 {"event_type":"session_end"} +Event logged successfully: 22:50:30.684 {"event_type":"session_end"} +=== End Request === +GET /?event_type=session_start¶m1=PrintAndGIF +2025-09-26T23:14:25.511464-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +23:14:25.524 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 23:14:25.524 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +GET /?event_type=countdown¶m1=30 +2025-09-26T23:14:25.534038-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +23:14:25.543 {"event_type":"countdown","param1":"30"} +Event logged successfully: 23:14:25.543 {"event_type":"countdown","param1":"30"} +=== End Request === +GET /?event_type=file_download¶m1=20250926_222756_010.jpg +2025-09-26T23:14:25.564400-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} + event_type = file_download + param1 = 20250926_222756_010.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +23:14:25.571 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +Event logged successfully: 23:14:25.571 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +=== End Request === +GET /?event_type=session_start¶m1=PrintAndGIF +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090', 'Connection': 'Keep-Alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +23:16:01.162 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 23:16:01.162 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +GET /?event_type=countdown_start¶m1=5 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown_start', 'param1': '5'} + event_type = countdown_start + param1 = 5 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown_start', 'param1': '5'} +Normalized Event: {'event_type': 'countdown_start', 'param1': '5'} +23:16:01.209 {"event_type":"countdown_start","param1":"5"} +Event logged successfully: 23:16:01.209 {"event_type":"countdown_start","param1":"5"} +=== End Request === +GET /?event_type=countdown¶m1=22 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '22'} + event_type = countdown + param1 = 22 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '22'} +Normalized Event: {'event_type': 'countdown', 'param1': '22'} +23:16:01.319 {"event_type":"countdown","param1":"22"} +Event logged successfully: 23:16:01.319 {"event_type":"countdown","param1":"22"} +=== End Request === +GET /?event_type=countdown¶m1=24 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '24'} + event_type = countdown + param1 = 24 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '24'} +Normalized Event: {'event_type': 'countdown', 'param1': '24'} +23:16:01.431 {"event_type":"countdown","param1":"24"} +Event logged successfully: 23:16:01.431 {"event_type":"countdown","param1":"24"} +=== End Request === +GET /?event_type=countdown¶m1=26 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '26'} + event_type = countdown + param1 = 26 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '26'} +Normalized Event: {'event_type': 'countdown', 'param1': '26'} +23:16:01.542 {"event_type":"countdown","param1":"26"} +Event logged successfully: 23:16:01.542 {"event_type":"countdown","param1":"26"} +=== End Request === +GET /?event_type=countdown¶m1=28 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '28'} + event_type = countdown + param1 = 28 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '28'} +Normalized Event: {'event_type': 'countdown', 'param1': '28'} +23:16:01.644 {"event_type":"countdown","param1":"28"} +Event logged successfully: 23:16:01.644 {"event_type":"countdown","param1":"28"} +=== End Request === +GET /?event_type=countdown¶m1=30 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +23:16:01.758 {"event_type":"countdown","param1":"30"} +Event logged successfully: 23:16:01.758 {"event_type":"countdown","param1":"30"} +=== End Request === +GET /?event_type=countdown¶m1=33 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '33'} + event_type = countdown + param1 = 33 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '33'} +Normalized Event: {'event_type': 'countdown', 'param1': '33'} +23:16:01.880 {"event_type":"countdown","param1":"33"} +Event logged successfully: 23:16:01.880 {"event_type":"countdown","param1":"33"} +=== End Request === +GET /?event_type=countdown¶m1=35 +2025-09-26T23:16:01-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '35'} + event_type = countdown + param1 = 35 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '35'} +Normalized Event: {'event_type': 'countdown', 'param1': '35'} +23:16:01.981 {"event_type":"countdown","param1":"35"} +Event logged successfully: 23:16:01.981 {"event_type":"countdown","param1":"35"} +=== End Request === +GET /?event_type=countdown¶m1=37 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '37'} + event_type = countdown + param1 = 37 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '37'} +Normalized Event: {'event_type': 'countdown', 'param1': '37'} +23:16:02.099 {"event_type":"countdown","param1":"37"} +Event logged successfully: 23:16:02.099 {"event_type":"countdown","param1":"37"} +=== End Request === +GET /?event_type=countdown¶m1=39 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '39'} + event_type = countdown + param1 = 39 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '39'} +Normalized Event: {'event_type': 'countdown', 'param1': '39'} +23:16:02.188 {"event_type":"countdown","param1":"39"} +Event logged successfully: 23:16:02.188 {"event_type":"countdown","param1":"39"} +=== End Request === +GET /?event_type=countdown¶m1=41 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '41'} + event_type = countdown + param1 = 41 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '41'} +Normalized Event: {'event_type': 'countdown', 'param1': '41'} +23:16:02.299 {"event_type":"countdown","param1":"41"} +Event logged successfully: 23:16:02.299 {"event_type":"countdown","param1":"41"} +=== End Request === +GET /?event_type=countdown¶m1=44 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '44'} + event_type = countdown + param1 = 44 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '44'} +Normalized Event: {'event_type': 'countdown', 'param1': '44'} +23:16:02.428 {"event_type":"countdown","param1":"44"} +Event logged successfully: 23:16:02.428 {"event_type":"countdown","param1":"44"} +=== End Request === +GET /?event_type=countdown¶m1=46 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '46'} + event_type = countdown + param1 = 46 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '46'} +Normalized Event: {'event_type': 'countdown', 'param1': '46'} +23:16:02.517 {"event_type":"countdown","param1":"46"} +Event logged successfully: 23:16:02.517 {"event_type":"countdown","param1":"46"} +=== End Request === +GET /?event_type=countdown¶m1=48 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '48'} + event_type = countdown + param1 = 48 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '48'} +Normalized Event: {'event_type': 'countdown', 'param1': '48'} +23:16:02.629 {"event_type":"countdown","param1":"48"} +Event logged successfully: 23:16:02.629 {"event_type":"countdown","param1":"48"} +=== End Request === +GET /?event_type=countdown¶m1=50 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '50'} + event_type = countdown + param1 = 50 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '50'} +Normalized Event: {'event_type': 'countdown', 'param1': '50'} +23:16:02.752 {"event_type":"countdown","param1":"50"} +Event logged successfully: 23:16:02.752 {"event_type":"countdown","param1":"50"} +=== End Request === +GET /?event_type=countdown¶m1=53 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '53'} + event_type = countdown + param1 = 53 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '53'} +Normalized Event: {'event_type': 'countdown', 'param1': '53'} +23:16:02.872 {"event_type":"countdown","param1":"53"} +Event logged successfully: 23:16:02.872 {"event_type":"countdown","param1":"53"} +=== End Request === +GET /?event_type=countdown¶m1=55 +2025-09-26T23:16:02-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '55'} + event_type = countdown + param1 = 55 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '55'} +Normalized Event: {'event_type': 'countdown', 'param1': '55'} +23:16:02.984 {"event_type":"countdown","param1":"55"} +Event logged successfully: 23:16:02.984 {"event_type":"countdown","param1":"55"} +=== End Request === +GET /?event_type=countdown¶m1=57 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '57'} + event_type = countdown + param1 = 57 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '57'} +Normalized Event: {'event_type': 'countdown', 'param1': '57'} +23:16:03.092 {"event_type":"countdown","param1":"57"} +Event logged successfully: 23:16:03.092 {"event_type":"countdown","param1":"57"} +=== End Request === +GET /?event_type=countdown¶m1=59 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '59'} + event_type = countdown + param1 = 59 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '59'} +Normalized Event: {'event_type': 'countdown', 'param1': '59'} +23:16:03.199 {"event_type":"countdown","param1":"59"} +Event logged successfully: 23:16:03.199 {"event_type":"countdown","param1":"59"} +=== End Request === +GET /?event_type=countdown¶m1=61 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '61'} + event_type = countdown + param1 = 61 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '61'} +Normalized Event: {'event_type': 'countdown', 'param1': '61'} +23:16:03.307 {"event_type":"countdown","param1":"61"} +Event logged successfully: 23:16:03.307 {"event_type":"countdown","param1":"61"} +=== End Request === +GET /?event_type=countdown¶m1=64 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '64'} + event_type = countdown + param1 = 64 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '64'} +Normalized Event: {'event_type': 'countdown', 'param1': '64'} +23:16:03.415 {"event_type":"countdown","param1":"64"} +Event logged successfully: 23:16:03.415 {"event_type":"countdown","param1":"64"} +=== End Request === +GET /?event_type=countdown¶m1=66 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '66'} + event_type = countdown + param1 = 66 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '66'} +Normalized Event: {'event_type': 'countdown', 'param1': '66'} +23:16:03.531 {"event_type":"countdown","param1":"66"} +Event logged successfully: 23:16:03.531 {"event_type":"countdown","param1":"66"} +=== End Request === +GET /?event_type=countdown¶m1=68 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '68'} + event_type = countdown + param1 = 68 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '68'} +Normalized Event: {'event_type': 'countdown', 'param1': '68'} +23:16:03.642 {"event_type":"countdown","param1":"68"} +Event logged successfully: 23:16:03.642 {"event_type":"countdown","param1":"68"} +=== End Request === +GET /?event_type=countdown¶m1=70 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '70'} + event_type = countdown + param1 = 70 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '70'} +Normalized Event: {'event_type': 'countdown', 'param1': '70'} +23:16:03.755 {"event_type":"countdown","param1":"70"} +Event logged successfully: 23:16:03.755 {"event_type":"countdown","param1":"70"} +=== End Request === +GET /?event_type=countdown¶m1=72 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '72'} + event_type = countdown + param1 = 72 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '72'} +Normalized Event: {'event_type': 'countdown', 'param1': '72'} +23:16:03.860 {"event_type":"countdown","param1":"72"} +Event logged successfully: 23:16:03.860 {"event_type":"countdown","param1":"72"} +=== End Request === +GET /?event_type=countdown¶m1=75 +2025-09-26T23:16:03-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '75'} + event_type = countdown + param1 = 75 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '75'} +Normalized Event: {'event_type': 'countdown', 'param1': '75'} +23:16:03.981 {"event_type":"countdown","param1":"75"} +Event logged successfully: 23:16:03.981 {"event_type":"countdown","param1":"75"} +=== End Request === +GET /?event_type=countdown¶m1=77 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '77'} + event_type = countdown + param1 = 77 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '77'} +Normalized Event: {'event_type': 'countdown', 'param1': '77'} +23:16:04.090 {"event_type":"countdown","param1":"77"} +Event logged successfully: 23:16:04.090 {"event_type":"countdown","param1":"77"} +=== End Request === +GET /?event_type=countdown¶m1=79 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '79'} + event_type = countdown + param1 = 79 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '79'} +Normalized Event: {'event_type': 'countdown', 'param1': '79'} +23:16:04.213 {"event_type":"countdown","param1":"79"} +Event logged successfully: 23:16:04.213 {"event_type":"countdown","param1":"79"} +=== End Request === +GET /?event_type=countdown¶m1=81 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '81'} + event_type = countdown + param1 = 81 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '81'} +Normalized Event: {'event_type': 'countdown', 'param1': '81'} +23:16:04.311 {"event_type":"countdown","param1":"81"} +Event logged successfully: 23:16:04.311 {"event_type":"countdown","param1":"81"} +=== End Request === +GET /?event_type=countdown¶m1=83 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '83'} + event_type = countdown + param1 = 83 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '83'} +Normalized Event: {'event_type': 'countdown', 'param1': '83'} +23:16:04.419 {"event_type":"countdown","param1":"83"} +Event logged successfully: 23:16:04.419 {"event_type":"countdown","param1":"83"} +=== End Request === +GET /?event_type=countdown¶m1=86 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '86'} + event_type = countdown + param1 = 86 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '86'} +Normalized Event: {'event_type': 'countdown', 'param1': '86'} +23:16:04.521 {"event_type":"countdown","param1":"86"} +Event logged successfully: 23:16:04.521 {"event_type":"countdown","param1":"86"} +=== End Request === +GET /?event_type=countdown¶m1=88 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '88'} + event_type = countdown + param1 = 88 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '88'} +Normalized Event: {'event_type': 'countdown', 'param1': '88'} +23:16:04.644 {"event_type":"countdown","param1":"88"} +Event logged successfully: 23:16:04.644 {"event_type":"countdown","param1":"88"} +=== End Request === +GET /?event_type=countdown¶m1=90 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '90'} + event_type = countdown + param1 = 90 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '90'} +Normalized Event: {'event_type': 'countdown', 'param1': '90'} +23:16:04.738 {"event_type":"countdown","param1":"90"} +Event logged successfully: 23:16:04.738 {"event_type":"countdown","param1":"90"} +=== End Request === +GET /?event_type=countdown¶m1=92 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '92'} + event_type = countdown + param1 = 92 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '92'} +Normalized Event: {'event_type': 'countdown', 'param1': '92'} +23:16:04.850 {"event_type":"countdown","param1":"92"} +Event logged successfully: 23:16:04.850 {"event_type":"countdown","param1":"92"} +=== End Request === +GET /?event_type=countdown¶m1=94 +2025-09-26T23:16:04-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '94'} + event_type = countdown + param1 = 94 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '94'} +Normalized Event: {'event_type': 'countdown', 'param1': '94'} +23:16:04.970 {"event_type":"countdown","param1":"94"} +Event logged successfully: 23:16:04.970 {"event_type":"countdown","param1":"94"} +=== End Request === +GET /?event_type=countdown¶m1=97 +2025-09-26T23:16:05-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '97'} + event_type = countdown + param1 = 97 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '97'} +Normalized Event: {'event_type': 'countdown', 'param1': '97'} +23:16:05.080 {"event_type":"countdown","param1":"97"} +Event logged successfully: 23:16:05.080 {"event_type":"countdown","param1":"97"} +=== End Request === +GET /?event_type=countdown¶m1=99 +2025-09-26T23:16:05-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '99'} + event_type = countdown + param1 = 99 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '99'} +Normalized Event: {'event_type': 'countdown', 'param1': '99'} +23:16:05.177 {"event_type":"countdown","param1":"99"} +Event logged successfully: 23:16:05.177 {"event_type":"countdown","param1":"99"} +=== End Request === +GET /?event_type=countdown¶m1=100 +2025-09-26T23:16:05-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '100'} + event_type = countdown + param1 = 100 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '100'} +Normalized Event: {'event_type': 'countdown', 'param1': '100'} +23:16:05.286 {"event_type":"countdown","param1":"100"} +Event logged successfully: 23:16:05.286 {"event_type":"countdown","param1":"100"} +=== End Request === +GET /?event_type=countdown¶m1=100 +2025-09-26T23:16:05-07:00 +GET /?event_type=capture_start +127.0.0.1 +2025-09-26T23:16:05-07:00 +=== Incoming Request to / === +127.0.0.1 +Method: GET +=== Incoming Request to / === +Remote Address: 127.0.0.1 +Method: GET +User Agent: N/A +Remote Address: 127.0.0.1 +Headers: {'Host': '127.0.0.1:8090'} +User Agent: N/A +Query Parameters: {'event_type': 'countdown', 'param1': '100'} +Headers: {'Host': '127.0.0.1:8090'} + event_type = countdown +Query Parameters: {'event_type': 'capture_start'} + param1 = 100 + event_type = capture_start +Raw Body: Empty +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '100'} +Parsed Payload: {'event_type': 'capture_start'} +Normalized Event: {'event_type': 'countdown', 'param1': '100'} +Normalized Event: {'event_type': 'capture_start'} +23:16:05.410 {"event_type":"countdown","param1":"100"} +23:16:05.410 {"event_type":"capture_start"} +Event logged successfully: 23:16:05.410 {"event_type":"countdown","param1":"100"} +Event logged successfully: 23:16:05.410 {"event_type":"capture_start"} +=== End Request === +=== End Request === +GET /?event_type=file_download¶m1=20250926_231605_588.jpg +2025-09-26T23:16:05-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_231605_588.jpg'} + event_type = file_download + param1 = 20250926_231605_588.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_231605_588.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_231605_588.jpg'} +23:16:05.598 {"event_type":"file_download","param1":"20250926_231605_588.jpg"} +Event logged successfully: 23:16:05.598 {"event_type":"file_download","param1":"20250926_231605_588.jpg"} +=== End Request === +GET /?event_type=countdown_start¶m1=5 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown_start', 'param1': '5'} + event_type = countdown_start + param1 = 5 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown_start', 'param1': '5'} +Normalized Event: {'event_type': 'countdown_start', 'param1': '5'} +23:16:06.177 {"event_type":"countdown_start","param1":"5"} +Event logged successfully: 23:16:06.177 {"event_type":"countdown_start","param1":"5"} +=== End Request === +GET /?event_type=countdown¶m1=22 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '22'} + event_type = countdown + param1 = 22 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '22'} +Normalized Event: {'event_type': 'countdown', 'param1': '22'} +23:16:06.286 {"event_type":"countdown","param1":"22"} +Event logged successfully: 23:16:06.286 {"event_type":"countdown","param1":"22"} +=== End Request === +GET /?event_type=countdown¶m1=24 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '24'} + event_type = countdown + param1 = 24 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '24'} +Normalized Event: {'event_type': 'countdown', 'param1': '24'} +23:16:06.394 {"event_type":"countdown","param1":"24"} +Event logged successfully: 23:16:06.394 {"event_type":"countdown","param1":"24"} +=== End Request === +GET /?event_type=countdown¶m1=26 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '26'} + event_type = countdown + param1 = 26 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '26'} +Normalized Event: {'event_type': 'countdown', 'param1': '26'} +23:16:06.505 {"event_type":"countdown","param1":"26"} +Event logged successfully: 23:16:06.505 {"event_type":"countdown","param1":"26"} +=== End Request === +GET /?event_type=countdown¶m1=28 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '28'} + event_type = countdown + param1 = 28 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '28'} +Normalized Event: {'event_type': 'countdown', 'param1': '28'} +23:16:06.624 {"event_type":"countdown","param1":"28"} +Event logged successfully: 23:16:06.624 {"event_type":"countdown","param1":"28"} +=== End Request === +GET /?event_type=countdown¶m1=31 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '31'} + event_type = countdown + param1 = 31 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '31'} +Normalized Event: {'event_type': 'countdown', 'param1': '31'} +23:16:06.744 {"event_type":"countdown","param1":"31"} +Event logged successfully: 23:16:06.744 {"event_type":"countdown","param1":"31"} +=== End Request === +GET /?event_type=countdown¶m1=33 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '33'} + event_type = countdown + param1 = 33 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '33'} +Normalized Event: {'event_type': 'countdown', 'param1': '33'} +23:16:06.836 {"event_type":"countdown","param1":"33"} +Event logged successfully: 23:16:06.836 {"event_type":"countdown","param1":"33"} +=== End Request === +GET /?event_type=countdown¶m1=35 +2025-09-26T23:16:06-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'countdown', 'param1': '35'} + event_type = countdown + param1 = 35 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '35'} +Normalized Event: {'event_type': 'countdown', 'param1': '35'} +23:16:06.943 {"event_type":"countdown","param1":"35"} +Event logged successfully: 23:16:06.943 {"event_type":"countdown","param1":"35"} +=== End Request === +GET /?event_type=session_end +2025-09-26T23:16:07-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: N/A +Headers: {'Host': '127.0.0.1:8090'} +Query Parameters: {'event_type': 'session_end'} + event_type = session_end +Raw Body: Empty +Parsed Payload: {'event_type': 'session_end'} +Normalized Event: {'event_type': 'session_end'} +23:16:07.015 {"event_type":"session_end"} +Event logged successfully: 23:16:07.015 {"event_type":"session_end"} +=== End Request === +GET /?event_type=session_start¶m1=PrintAndGIF +2025-09-26T23:50:54-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +23:50:54.976 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 23:50:54.976 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +GET /?event_type=countdown¶m1=30 +2025-09-26T23:50:54-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +23:50:54.999 {"event_type":"countdown","param1":"30"} +Event logged successfully: 23:50:54.999 {"event_type":"countdown","param1":"30"} +=== End Request === +GET /?event_type=file_download¶m1=20250926_222756_010.jpg +2025-09-26T23:50:55-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} + event_type = file_download + param1 = 20250926_222756_010.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +23:50:55.004 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +Event logged successfully: 23:50:55.004 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +=== End Request === +GET /?event_type=session_start¶m1=PrintAndGIF +2025-09-26T23:51:57-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +23:51:57.673 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 23:51:57.673 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +GET /?event_type=countdown¶m1=30 +2025-09-26T23:51:57-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +23:51:57.687 {"event_type":"countdown","param1":"30"} +Event logged successfully: 23:51:57.687 {"event_type":"countdown","param1":"30"} +=== End Request === +GET /?event_type=file_download¶m1=20250926_222756_010.jpg +2025-09-26T23:51:57-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} + event_type = file_download + param1 = 20250926_222756_010.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +23:51:57.703 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +Event logged successfully: 23:51:57.703 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +=== End Request === +GET /?event_type=session_start¶m1=PrintAndGIF +2025-09-26T23:52:51-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} + event_type = session_start + param1 = PrintAndGIF +Raw Body: Empty +Parsed Payload: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +Normalized Event: {'event_type': 'session_start', 'param1': 'PrintAndGIF'} +23:52:51.821 {"event_type":"session_start","param1":"PrintAndGIF"} +Event logged successfully: 23:52:51.821 {"event_type":"session_start","param1":"PrintAndGIF"} +=== End Request === +GET /?event_type=countdown¶m1=30 +2025-09-26T23:52:51-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'countdown', 'param1': '30'} + event_type = countdown + param1 = 30 +Raw Body: Empty +Parsed Payload: {'event_type': 'countdown', 'param1': '30'} +Normalized Event: {'event_type': 'countdown', 'param1': '30'} +23:52:51.832 {"event_type":"countdown","param1":"30"} +Event logged successfully: 23:52:51.832 {"event_type":"countdown","param1":"30"} +=== End Request === +GET /?event_type=file_download¶m1=20250926_222756_010.jpg +2025-09-26T23:52:51-07:00 +127.0.0.1 +=== Incoming Request to / === +Method: GET +Remote Address: 127.0.0.1 +User Agent: python-requests/2.32.5 +Headers: {'Host': '127.0.0.1:8090', 'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} +Query Parameters: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} + event_type = file_download + param1 = 20250926_222756_010.jpg +Raw Body: Empty +Parsed Payload: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +Normalized Event: {'event_type': 'file_download', 'param1': '20250926_222756_010.jpg'} +23:52:51.840 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +Event logged successfully: 23:52:51.840 {"event_type":"file_download","param1":"20250926_222756_010.jpg"} +=== End Request === +Event: session_start, param1: PrintAndGIF +23:56:14.602 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: countdown_start, param1: 5 +23:56:14.642 {"event_type":"countdown_start","param1":"5"} +Event: countdown, param1: 22 +23:56:14.750 {"event_type":"countdown","param1":"22"} +Event: countdown, param1: 24 +23:56:14.863 {"event_type":"countdown","param1":"24"} +Event: countdown, param1: 26 +23:56:14.970 {"event_type":"countdown","param1":"26"} +Event: countdown, param1: 28 +23:56:15.079 {"event_type":"countdown","param1":"28"} +Event: countdown, param1: 30 +23:56:15.191 {"event_type":"countdown","param1":"30"} +Event: countdown, param1: 33 +23:56:15.297 {"event_type":"countdown","param1":"33"} +Event: countdown, param1: 35 +23:56:15.410 {"event_type":"countdown","param1":"35"} +Event: countdown, param1: 37 +23:56:15.531 {"event_type":"countdown","param1":"37"} +Event: countdown, param1: 39 +23:56:15.642 {"event_type":"countdown","param1":"39"} +Event: countdown, param1: 42 +23:56:15.759 {"event_type":"countdown","param1":"42"} +Event: countdown, param1: 44 +23:56:15.861 {"event_type":"countdown","param1":"44"} +Event: countdown, param1: 46 +23:56:15.966 {"event_type":"countdown","param1":"46"} +Event: countdown, param1: 48 +23:56:16.086 {"event_type":"countdown","param1":"48"} +Event: countdown, param1: 50 +23:56:16.189 {"event_type":"countdown","param1":"50"} +Event: countdown, param1: 53 +23:56:16.297 {"event_type":"countdown","param1":"53"} +Event: countdown, param1: 55 +23:56:16.409 {"event_type":"countdown","param1":"55"} +Event: countdown, param1: 57 +23:56:16.524 {"event_type":"countdown","param1":"57"} +Event: countdown, param1: 59 +23:56:16.633 {"event_type":"countdown","param1":"59"} +Event: countdown, param1: 61 +23:56:16.740 {"event_type":"countdown","param1":"61"} +Event: countdown, param1: 64 +23:56:16.851 {"event_type":"countdown","param1":"64"} +Event: countdown, param1: 66 +23:56:16.959 {"event_type":"countdown","param1":"66"} +Event: countdown, param1: 68 +23:56:17.063 {"event_type":"countdown","param1":"68"} +Event: session_end +23:56:17.080 {"event_type":"session_end"} +Event: session_end +00:03:29.534 {"event_type":"session_end"} +Event: session_start, param1: PrintAndGIF +00:03:39.440 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: countdown_start, param1: 5 +00:03:39.494 {"event_type":"countdown_start","param1":"5"} +Event: countdown, param1: 21 +00:03:39.592 {"event_type":"countdown","param1":"21"} +Event: countdown, param1: 24 +00:03:39.707 {"event_type":"countdown","param1":"24"} +Event: countdown, param1: 26 +00:03:39.818 {"event_type":"countdown","param1":"26"} +Event: countdown, param1: 28 +00:03:39.923 {"event_type":"countdown","param1":"28"} +Event: countdown, param1: 30 +00:03:40.031 {"event_type":"countdown","param1":"30"} +Event: countdown, param1: 32 +00:03:40.140 {"event_type":"countdown","param1":"32"} +Event: countdown, param1: 35 +00:03:40.248 {"event_type":"countdown","param1":"35"} +Event: countdown, param1: 37 +00:03:40.364 {"event_type":"countdown","param1":"37"} +Event: countdown, param1: 39 +00:03:40.472 {"event_type":"countdown","param1":"39"} +Event: countdown, param1: 41 +00:03:40.580 {"event_type":"countdown","param1":"41"} +Event: countdown, param1: 43 +00:03:40.687 {"event_type":"countdown","param1":"43"} +Event: countdown, param1: 46 +00:03:40.802 {"event_type":"countdown","param1":"46"} +Event: countdown, param1: 48 +00:03:40.915 {"event_type":"countdown","param1":"48"} +Event: countdown, param1: 50 +00:03:41.014 {"event_type":"countdown","param1":"50"} +Event: countdown, param1: 52 +00:03:41.129 {"event_type":"countdown","param1":"52"} +Event: countdown, param1: 54 +00:03:41.239 {"event_type":"countdown","param1":"54"} +Event: countdown, param1: 56 +00:03:41.346 {"event_type":"countdown","param1":"56"} +Event: countdown, param1: 59 +00:03:41.458 {"event_type":"countdown","param1":"59"} +Event: countdown, param1: 61 +00:03:41.563 {"event_type":"countdown","param1":"61"} +Event: countdown, param1: 63 +00:03:41.678 {"event_type":"countdown","param1":"63"} +Event: countdown, param1: 65 +00:03:41.782 {"event_type":"countdown","param1":"65"} +Event: countdown, param1: 67 +00:03:41.891 {"event_type":"countdown","param1":"67"} +Event: countdown, param1: 70 +00:03:41.998 {"event_type":"countdown","param1":"70"} +Event: countdown, param1: 72 +00:03:42.117 {"event_type":"countdown","param1":"72"} +Event: countdown, param1: 74 +00:03:42.224 {"event_type":"countdown","param1":"74"} +Event: countdown, param1: 76 +00:03:42.327 {"event_type":"countdown","param1":"76"} +Event: countdown, param1: 78 +00:03:42.440 {"event_type":"countdown","param1":"78"} +Event: countdown, param1: 81 +00:03:42.546 {"event_type":"countdown","param1":"81"} +Event: countdown, param1: 83 +00:03:42.655 {"event_type":"countdown","param1":"83"} +Event: session_end +00:03:42.721 {"event_type":"session_end"} +Event: session_start, param1: PrintAndGIF +Handler: session started +00:11:45.159 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: +Event: +Exception on / [GET] +Traceback (most recent call last): + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\app.py", line 1511, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\app.py", line 919, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\app.py", line 917, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\app.py", line 902, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\src\app.py", line 333, in config_index + return render_template('index.html', config=cfg) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\templating.py", line 149, in render_template + template = app.jinja_env.get_or_select_template(template_name_or_list) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\jinja2\environment.py", line 1087, in get_or_select_template + return self.get_template(template_name_or_list, parent, globals) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\jinja2\environment.py", line 1016, in get_template + return self._load_template(name, globals) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\jinja2\environment.py", line 975, in _load_template + template = self.loader.load(self, name, self.make_globals(globals)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\jinja2\loaders.py", line 126, in load + source, filename, uptodate = self.get_source(environment, name) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\templating.py", line 65, in get_source + return self._get_source_fast(environment, template) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Repositories\Development\DslrDirector\.venv\Lib\site-packages\flask\templating.py", line 99, in _get_source_fast + raise TemplateNotFound(template) +jinja2.exceptions.TemplateNotFound: index.html +Event: session_start, param1: PrintAndGIF +01:52:40.183 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: countdown, param1: 3 +Handler: countdown started - 3 seconds +01:52:40.185 {"event_type":"countdown","param1":"3"} +Event: session_start, param1: PrintAndGIF +01:52:53.881 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: countdown, param1: 3 +Handler: countdown started - 3 seconds +01:52:53.882 {"event_type":"countdown","param1":"3"} +Event: countdown, param1: 3 +Handler: countdown started - 3 seconds +01:55:05.634 {"event_type":"countdown","param1":"3"} +Event: countdown, param1: 3 +Handler: countdown started - 3 seconds +01:55:10.662 {"event_type":"countdown","param1":"3"} +Event: session_end +Handler: session ended +01:58:38.575 {"event_type":"session_end"} +Event: session_start, param1: PrintAndGIF +Handler: session started - PrintAndGIF +01:58:44.079 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: countdown_start, param1: 5 +Handler: countdown started - 5 seconds +01:58:44.153 {"event_type":"countdown_start","param1":"5"} +Event: countdown, param1: 22 +Handler: countdown started - unknown duration +01:58:44.255 {"event_type":"countdown","param1":"22"} +Event: countdown, param1: 24 +Handler: countdown started - unknown duration +01:58:44.363 {"event_type":"countdown","param1":"24"} +Event: countdown, param1: 26 +Handler: countdown started - unknown duration +01:58:44.471 {"event_type":"countdown","param1":"26"} +Event: countdown, param1: 28 +Handler: countdown started - unknown duration +01:58:44.583 {"event_type":"countdown","param1":"28"} +Event: countdown, param1: 30 +Handler: countdown started - unknown duration +01:58:44.704 {"event_type":"countdown","param1":"30"} +Event: countdown, param1: 33 +Handler: countdown started - unknown duration +01:58:44.817 {"event_type":"countdown","param1":"33"} +Event: countdown, param1: 35 +Handler: countdown started - unknown duration +01:58:44.930 {"event_type":"countdown","param1":"35"} +Event: countdown, param1: 37 +Handler: countdown started - unknown duration +01:58:45.037 {"event_type":"countdown","param1":"37"} +Event: countdown, param1: 39 +Handler: countdown started - unknown duration +01:58:45.147 {"event_type":"countdown","param1":"39"} +Event: countdown, param1: 42 +Handler: countdown started - unknown duration +01:58:45.271 {"event_type":"countdown","param1":"42"} +Event: countdown, param1: 44 +Handler: countdown started - unknown duration +01:58:45.384 {"event_type":"countdown","param1":"44"} +Event: countdown, param1: 46 +Handler: countdown started - unknown duration +01:58:45.489 {"event_type":"countdown","param1":"46"} +Event: countdown, param1: 48 +Handler: countdown started - unknown duration +01:58:45.595 {"event_type":"countdown","param1":"48"} +Event: countdown, param1: 51 +Handler: countdown started - unknown duration +01:58:45.706 {"event_type":"countdown","param1":"51"} +Event: countdown, param1: 53 +Handler: countdown started - unknown duration +01:58:45.814 {"event_type":"countdown","param1":"53"} +Event: countdown, param1: 55 +Handler: countdown started - unknown duration +01:58:45.925 {"event_type":"countdown","param1":"55"} +Event: countdown, param1: 57 +Handler: countdown started - unknown duration +01:58:46.030 {"event_type":"countdown","param1":"57"} +Event: countdown, param1: 59 +Handler: countdown started - unknown duration +01:58:46.144 {"event_type":"countdown","param1":"59"} +Event: countdown, param1: 62 +Handler: countdown started - unknown duration +01:58:46.253 {"event_type":"countdown","param1":"62"} +Event: countdown, param1: 64 +Handler: countdown started - unknown duration +01:58:46.358 {"event_type":"countdown","param1":"64"} +Event: countdown, param1: 66 +Handler: countdown started - unknown duration +01:58:46.470 {"event_type":"countdown","param1":"66"} +Event: countdown, param1: 68 +Handler: countdown started - unknown duration +01:58:46.582 {"event_type":"countdown","param1":"68"} +Event: countdown, param1: 70 +Handler: countdown started - unknown duration +01:58:46.700 {"event_type":"countdown","param1":"70"} +Event: countdown, param1: 72 +Handler: countdown started - unknown duration +01:58:46.798 {"event_type":"countdown","param1":"72"} +Event: countdown, param1: 75 +Handler: countdown started - unknown duration +01:58:46.909 {"event_type":"countdown","param1":"75"} +Event: countdown, param1: 77 +Handler: countdown started - unknown duration +01:58:47.017 {"event_type":"countdown","param1":"77"} +Event: countdown, param1: 79 +Handler: countdown started - unknown duration +01:58:47.130 {"event_type":"countdown","param1":"79"} +Event: countdown, param1: 81 +Handler: countdown started - unknown duration +01:58:47.239 {"event_type":"countdown","param1":"81"} +Event: countdown, param1: 83 +Handler: countdown started - unknown duration +01:58:47.349 {"event_type":"countdown","param1":"83"} +Event: countdown, param1: 86 +Handler: countdown started - unknown duration +01:58:47.457 {"event_type":"countdown","param1":"86"} +Event: session_end +Handler: session ended +01:58:47.527 {"event_type":"session_end"} +Event: session_end +Handler: session ended +02:05:02.810 {"event_type":"session_end"} +Event: session_start, param1: PrintAndGIF +Handler: session started - PrintAndGIF +02:05:09.492 {"event_type":"session_start","param1":"PrintAndGIF"} +Event: countdown_start, param1: 5 +Handler: countdown started - 5 seconds +02:05:09.544 {"event_type":"countdown_start","param1":"5"} +Event: countdown, param1: 21 +Handler: countdown started - unknown duration +02:05:09.640 {"event_type":"countdown","param1":"21"} +Event: countdown, param1: 24 +Handler: countdown started - unknown duration +02:05:09.757 {"event_type":"countdown","param1":"24"} +Event: countdown, param1: 26 +Handler: countdown started - unknown duration +02:05:09.866 {"event_type":"countdown","param1":"26"} +Event: countdown, param1: 28 +Handler: countdown started - unknown duration +02:05:09.977 {"event_type":"countdown","param1":"28"} +Event: countdown, param1: 30 +Handler: countdown started - unknown duration +02:05:10.081 {"event_type":"countdown","param1":"30"} +Event: countdown, param1: 32 +Handler: countdown started - unknown duration +02:05:10.188 {"event_type":"countdown","param1":"32"} +Event: countdown, param1: 35 +Handler: countdown started - unknown duration +02:05:10.308 {"event_type":"countdown","param1":"35"} +Event: countdown, param1: 37 +Handler: countdown started - unknown duration +02:05:10.408 {"event_type":"countdown","param1":"37"} +Event: countdown, param1: 39 +Handler: countdown started - unknown duration +02:05:10.518 {"event_type":"countdown","param1":"39"} +Event: countdown, param1: 41 +Handler: countdown started - unknown duration +02:05:10.631 {"event_type":"countdown","param1":"41"} +Event: countdown, param1: 43 +Handler: countdown started - unknown duration +02:05:10.746 {"event_type":"countdown","param1":"43"} +Event: countdown, param1: 46 +Handler: countdown started - unknown duration +02:05:10.849 {"event_type":"countdown","param1":"46"} +Event: countdown, param1: 48 +Handler: countdown started - unknown duration +02:05:10.961 {"event_type":"countdown","param1":"48"} +Event: countdown, param1: 50 +Handler: countdown started - unknown duration +02:05:11.065 {"event_type":"countdown","param1":"50"} +Event: countdown, param1: 52 +Handler: countdown started - unknown duration +02:05:11.173 {"event_type":"countdown","param1":"52"} +Event: countdown, param1: 54 +Handler: countdown started - unknown duration +02:05:11.286 {"event_type":"countdown","param1":"54"} +Event: countdown, param1: 56 +Handler: countdown started - unknown duration +02:05:11.394 {"event_type":"countdown","param1":"56"} +Event: countdown, param1: 59 +Handler: countdown started - unknown duration +02:05:11.504 {"event_type":"countdown","param1":"59"} +Event: countdown, param1: 61 +Handler: countdown started - unknown duration +02:05:11.613 {"event_type":"countdown","param1":"61"} +Event: countdown, param1: 63 +Handler: countdown started - unknown duration +02:05:11.720 {"event_type":"countdown","param1":"63"} +Event: countdown, param1: 65 +Handler: countdown started - unknown duration +02:05:11.840 {"event_type":"countdown","param1":"65"} +Event: countdown, param1: 67 +Handler: countdown started - unknown duration +02:05:11.939 {"event_type":"countdown","param1":"67"} +Event: countdown, param1: 70 +Handler: countdown started - unknown duration +02:05:12.053 {"event_type":"countdown","param1":"70"} +Event: session_end +Handler: session ended +02:05:12.132 {"event_type":"session_end"} +Handler: session started - PrintAndGIF +02:07:20.456 {"event_type":"session_start","param1":"PrintAndGIF"} +Handler: countdown started - 5 seconds +02:07:20.520 {"event_type":"countdown_start","param1":"5"} +Handler: unhandled event_type 'countdown' +02:07:20.626 {"event_type":"countdown","param1":"22"} +Handler: unhandled event_type 'countdown' +02:07:20.738 {"event_type":"countdown","param1":"24"} +Handler: unhandled event_type 'countdown' +02:07:20.856 {"event_type":"countdown","param1":"26"} +Handler: unhandled event_type 'countdown' +02:07:20.957 {"event_type":"countdown","param1":"28"} +Handler: unhandled event_type 'countdown' +02:07:21.067 {"event_type":"countdown","param1":"30"} +Handler: unhandled event_type 'countdown' +02:07:21.175 {"event_type":"countdown","param1":"33"} +Handler: unhandled event_type 'countdown' +02:07:21.282 {"event_type":"countdown","param1":"35"} +Handler: unhandled event_type 'countdown' +02:07:21.403 {"event_type":"countdown","param1":"37"} +Handler: unhandled event_type 'countdown' +02:07:21.521 {"event_type":"countdown","param1":"40"} +Handler: unhandled event_type 'countdown' +02:07:21.636 {"event_type":"countdown","param1":"42"} +Handler: unhandled event_type 'countdown' +02:07:21.738 {"event_type":"countdown","param1":"44"} +Handler: unhandled event_type 'countdown' +02:07:21.849 {"event_type":"countdown","param1":"46"} +Handler: unhandled event_type 'countdown' +02:07:21.954 {"event_type":"countdown","param1":"48"} +Handler: unhandled event_type 'countdown' +02:07:22.064 {"event_type":"countdown","param1":"50"} +Handler: unhandled event_type 'countdown' +02:07:22.172 {"event_type":"countdown","param1":"53"} +Handler: unhandled event_type 'countdown' +02:07:22.281 {"event_type":"countdown","param1":"55"} +Handler: unhandled event_type 'countdown' +02:07:22.403 {"event_type":"countdown","param1":"57"} +Handler: unhandled event_type 'countdown' +02:07:22.505 {"event_type":"countdown","param1":"59"} +Handler: unhandled event_type 'countdown' +02:07:22.616 {"event_type":"countdown","param1":"61"} +Handler: unhandled event_type 'countdown' +02:07:22.721 {"event_type":"countdown","param1":"64"} +Handler: unhandled event_type 'countdown' +02:07:22.829 {"event_type":"countdown","param1":"66"} +Handler: unhandled event_type 'countdown' +02:07:22.937 {"event_type":"countdown","param1":"68"} +Handler: unhandled event_type 'countdown' +02:07:23.045 {"event_type":"countdown","param1":"70"} +Handler: unhandled event_type 'countdown' +02:07:23.166 {"event_type":"countdown","param1":"72"} +Handler: unhandled event_type 'countdown' +02:07:23.266 {"event_type":"countdown","param1":"74"} +Handler: unhandled event_type 'countdown' +02:07:23.381 {"event_type":"countdown","param1":"77"} +Handler: unhandled event_type 'countdown' +02:07:23.489 {"event_type":"countdown","param1":"79"} +Handler: unhandled event_type 'countdown' +02:07:23.593 {"event_type":"countdown","param1":"81"} +Handler: session ended +02:07:23.599 {"event_type":"session_end"} +Handler: session started - PrintAndGIF +02:17:03.864 {"event_type":"session_start","param1":"PrintAndGIF"} +Handler: countdown started - 5 seconds +02:17:03.910 {"event_type":"countdown_start","param1":"5"} +02:17:04.024 {"event_type":"countdown","param1":"22"} +02:17:04.128 {"event_type":"countdown","param1":"24"} +02:17:04.236 {"event_type":"countdown","param1":"26"} +02:17:04.344 {"event_type":"countdown","param1":"28"} +02:17:04.455 {"event_type":"countdown","param1":"30"} +02:17:04.564 {"event_type":"countdown","param1":"33"} +02:17:04.676 {"event_type":"countdown","param1":"35"} +02:17:04.788 {"event_type":"countdown","param1":"37"} +02:17:04.894 {"event_type":"countdown","param1":"39"} +02:17:04.998 {"event_type":"countdown","param1":"41"} +02:17:05.112 {"event_type":"countdown","param1":"44"} +02:17:05.219 {"event_type":"countdown","param1":"46"} +02:17:05.335 {"event_type":"countdown","param1":"48"} +02:17:05.444 {"event_type":"countdown","param1":"50"} +02:17:05.554 {"event_type":"countdown","param1":"52"} +02:17:05.663 {"event_type":"countdown","param1":"55"} +02:17:05.768 {"event_type":"countdown","param1":"57"} +02:17:05.874 {"event_type":"countdown","param1":"59"} +02:17:05.987 {"event_type":"countdown","param1":"61"} +02:17:06.095 {"event_type":"countdown","param1":"63"} +02:17:06.214 {"event_type":"countdown","param1":"66"} +02:17:06.311 {"event_type":"countdown","param1":"68"} +02:17:06.423 {"event_type":"countdown","param1":"70"} +02:17:06.530 {"event_type":"countdown","param1":"72"} +02:17:06.648 {"event_type":"countdown","param1":"74"} +02:17:06.761 {"event_type":"countdown","param1":"77"} +02:17:06.861 {"event_type":"countdown","param1":"79"} +Handler: session ended +02:17:06.964 {"event_type":"session_end"} +Handler: session started - PrintAndGIF +Handler: countdown started - 5 seconds +Handler: capture started +Handler: unhandled event_type 'file_download' +Handler: countdown started - 5 seconds +Handler: session ended +Handler: session started - PrintAndGIF +Handler: countdown started - 5 seconds +Handler: unhandled event_type 'file_download' +Handler: countdown started - 5 seconds +Handler: unhandled event_type 'file_download' +Handler: countdown started - 5 seconds +Handler: countdown started - 5 seconds +Handler: session ended +Session started - PrintAndGIF +Countdown started - 5 seconds +Start White Countdown Animation +File downloaded: 20250927_023254_026.jpg +Countdown started - 5 seconds +Start White Countdown Animation +File downloaded: 20250927_023301_581.jpg +Countdown started - 5 seconds +Start White Countdown Animation +File downloaded: 20250927_023309_052.jpg +Countdown started - 5 seconds +Start White Countdown Animation +File downloaded: 20250927_023316_690.jpg +Handler: unhandled event_type 'processing_start' +Sharing screen active +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Session ended +Session started - PrintAndGIF +Countdown started - 5 seconds +File downloaded: 20250927_023547_467.jpg +Countdown started - 5 seconds +File downloaded: 20250927_023555_067.jpg +Countdown started - 5 seconds +File downloaded: 20250927_023602_522.jpg +Countdown started - 5 seconds +File downloaded: 20250927_023610_038.jpg +Handler: unhandled event_type 'processing_start' +Sharing screen Animation +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Handler: unhandled event_type 'file_upload' +Session ended +Session started - PrintAndGIF +Countdown started - 5 seconds +File downloaded: 20250927_094758_172.jpg +Countdown started - 5 seconds +Countdown started - 5 seconds +Session ended... default attaction animation +Session started - unknown mode +Countdown started - 5 seconds +File downloaded: 20250927_094945_116.jpg +Countdown started - 5 seconds +Countdown started - 5 seconds +Session ended... default attaction animation +Session started - unknown mode +Countdown started - 5 seconds +File downloaded: 20250927_095229_067.jpg +Countdown started - 5 seconds +File downloaded: 20250927_095236_548.jpg +Countdown started - 5 seconds +Countdown started - 5 seconds +Session ended... default attaction animation +2025-09-27T09:56:43 INFO:app:Session started - PrintAndGIF +2025-09-27T09:56:43 INFO:app:Countdown started - 5 seconds +2025-09-27T09:56:44 INFO:app:Session ended... default attaction animation +2025-09-27T09:56:52 INFO:app:Session started - unknown mode: 'OnlyGIF' +2025-09-27T09:56:52 INFO:app:Countdown started - 5 seconds +2025-09-27T09:56:57 INFO:app:File downloaded: 20250927_095657_268.jpg +2025-09-27T09:57:00 INFO:app:Countdown started - 5 seconds +2025-09-27T09:57:04 INFO:app:File downloaded: 20250927_095704_702.jpg +2025-09-27T09:57:07 INFO:app:Countdown started - 5 seconds +2025-09-27T09:57:08 INFO:app:Countdown started - 5 seconds +2025-09-27T09:57:09 INFO:app:Countdown started - 5 seconds +2025-09-27T09:57:11 INFO:app:Session ended... default attaction animation +2025-09-27T09:57:45 INFO:app:Session started - OnlyGIF +2025-09-27T09:57:45 INFO:app:Countdown started - 5 seconds +2025-09-27T09:57:49 INFO:app:File downloaded: 20250927_095749_922.jpg +2025-09-27T09:57:53 INFO:app:Countdown started - 5 seconds +2025-09-27T09:57:57 INFO:app:File downloaded: 20250927_095757_532.jpg +2025-09-27T09:58:00 INFO:app:Countdown started - 5 seconds +2025-09-27T09:58:04 INFO:app:File downloaded: 20250927_095804_994.jpg +2025-09-27T09:58:08 INFO:app:Countdown started - 5 seconds +2025-09-27T09:58:12 INFO:app:File downloaded: 20250927_095812_570.jpg +2025-09-27T09:58:16 WARNING:app:Handler: unhandled event_type 'processing_start' +2025-09-27T09:58:16 INFO:app:Sharing screen Animation +2025-09-27T09:58:17 WARNING:app:Handler: unhandled event_type 'file_upload' +2025-09-27T09:58:19 INFO:app:Session ended... default attaction animation +2025-09-27T10:10:19 INFO:app:Session started - OnlyGIF +2025-09-27T10:10:19 INFO:app:Countdown started - 5 seconds +2025-09-27T10:10:23 INFO:app:[2025-09-27T10:10:23.716493] File downloaded: 20250927_101023_712.jpg +2025-09-27T10:10:25 INFO:app:Countdown started - 5 seconds +2025-09-27T10:10:26 INFO:app:Session ended... default attaction animation +2025-09-27T10:11:46.995 INFO:app:Session started - OnlyGIF +2025-09-27T10:11:47.037 INFO:app:Countdown started - 5 seconds +2025-09-27T10:11:51.520 INFO:app:[2025-09-27T10:11:51.520800] File downloaded: 20250927_101151_513.jpg +2025-09-27T10:11:54.629 INFO:app:Countdown started - 5 seconds +2025-09-27T10:11:59.062 INFO:app:[2025-09-27T10:11:59.062086] File downloaded: 20250927_101159_057.jpg +2025-09-27T10:12:02.178 INFO:app:Countdown started - 5 seconds +2025-09-27T10:12:06.605 INFO:app:[2025-09-27T10:12:06.605687] File downloaded: 20250927_101206_600.jpg +2025-09-27T10:12:09.710 INFO:app:Countdown started - 5 seconds +2025-09-27T10:12:14.160 INFO:app:[2025-09-27T10:12:14.160378] File downloaded: 20250927_101214_154.jpg +2025-09-27T10:12:17.657 WARNING:app:Handler: unhandled event_type 'processing_start' +2025-09-27T10:12:17.915 INFO:app:Sharing screen Animation +2025-09-27T10:12:19.530 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_101217_655.mp4 +2025-09-27T10:12:36.896 INFO:app:Session ended... default attaction animation +2025-09-27T10:16:18.426 INFO:app:Session started - unknown mode: 'Boomerang' +2025-09-27T10:16:18.487 INFO:app:Countdown started - 5 seconds +2025-09-27T10:16:22.579 INFO:app:Session ended... default attaction animation +2025-09-27T10:17:14.181 INFO:app:Session started - unknown mode: 'Boomerang' +2025-09-27T10:17:14.252 INFO:app:Countdown started - 5 seconds +2025-09-27T10:17:19.321 INFO:app:capture_start event received +2025-09-27T10:17:19.488 INFO:app:Session ended... default attaction animation +2025-09-27T10:17:55.726 INFO:app:Session started - Boomerang +2025-09-27T10:17:55.777 INFO:app:Countdown started - 5 seconds +2025-09-27T10:18:00.813 INFO:app:capture_start event received +2025-09-27T10:18:01.945 INFO:app:Processing started... +2025-09-27T10:18:03.314 INFO:app:Sharing screen Animation +2025-09-27T10:18:04.411 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_101801.mp4 +2025-09-27T10:18:33.655 INFO:app:Session ended... default attaction animation +2025-09-27T10:18:51.003 INFO:app:Session started - Video +2025-09-27T10:18:51.058 INFO:app:Countdown started - 5 seconds +2025-09-27T10:18:56.096 INFO:app:capture_start event received +2025-09-27T10:19:07.274 INFO:app:[2025-09-27T10:19:07.274939] File downloaded: 20250927_101856_258.mp4 +2025-09-27T10:19:07.328 INFO:app:Processing started... +2025-09-27T10:19:07.727 INFO:app:Sharing screen Animation +2025-09-27T10:19:10.981 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Videos\web\20250927_101907.mp4 +2025-09-27T10:19:38.077 INFO:app:Session ended... default attaction animation +2025-09-27T11:47:40.587 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:47:40.588 INFO:src.app:BLE background loop started +2025-09-27T11:47:40.588 INFO:src.app:BleComm started +2025-09-27T11:48:37.096 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:48:37.098 INFO:src.app:BLE background loop started +2025-09-27T11:48:37.098 INFO:app:BleComm started +2025-09-27T11:48:37.099 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:48:37.099 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:48:42.235 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:48:47.248 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:48:47.249 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:48:52.305 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:48:57.318 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:48:57.319 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:49:02.364 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:49:07.378 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:49:07.379 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:49:12.412 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:49:17.426 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:49:17.426 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:49:22.456 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:49:27.467 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:49:27.467 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:49:32.496 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:49:37.498 INFO:src.app:Loaded BLE config: address='' name='ATALIGHTS' service='0xFFE0' char='0xFFE1' +2025-09-27T11:49:37.498 INFO:src.app:Scanning for BLE device name 'ATALIGHTS' (timeout=5.0s) +2025-09-27T11:49:42.545 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T11:49:47.557 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T11:49:47.557 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T11:50:01.840 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T11:50:01.842 INFO:src.app:BLE background loop started +2025-09-27T11:50:01.843 INFO:app:BleComm started +2025-09-27T11:50:01.843 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T11:50:01.843 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T11:50:06.991 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T11:50:07.007 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T11:50:10.318 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T11:58:53.965 INFO:src.app:Scheduling BLE disconnect +2025-09-27T11:59:01.686 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T11:59:01.686 INFO:src.app:BLE background loop started +2025-09-27T11:59:01.686 INFO:app:BleComm started +2025-09-27T11:59:01.688 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T11:59:01.689 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T11:59:06.787 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T11:59:06.808 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T11:59:09.240 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T11:59:23.887 INFO:app:Event: session_start, param1: PrintAndGIF +2025-09-27T11:59:23.888 INFO:app:Session started - PrintAndGIF +2025-09-27T11:59:23.888 INFO:app:11.59.23.888 {"event_type":"session_start","param1":"PrintAndGIF"} +2025-09-27T11:59:23.960 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T11:59:23.960 INFO:app:Countdown started - 5 seconds +2025-09-27T11:59:23.962 INFO:app:11.59.23.962 {"event_type":"countdown_start","param1":"5"} +2025-09-27T11:59:24.060 INFO:app:Event: countdown, param1: 22 +2025-09-27T11:59:24.061 INFO:app:11.59.24.061 {"event_type":"countdown","param1":"22"} +2025-09-27T11:59:24.175 INFO:app:Event: countdown, param1: 24 +2025-09-27T11:59:24.176 INFO:app:11.59.24.176 {"event_type":"countdown","param1":"24"} +2025-09-27T11:59:24.292 INFO:app:Event: countdown, param1: 26 +2025-09-27T11:59:24.294 INFO:app:11.59.24.294 {"event_type":"countdown","param1":"26"} +2025-09-27T11:59:24.390 INFO:app:Event: countdown, param1: 28 +2025-09-27T11:59:24.391 INFO:app:11.59.24.391 {"event_type":"countdown","param1":"28"} +2025-09-27T11:59:24.503 INFO:app:Event: countdown, param1: 30 +2025-09-27T11:59:24.503 INFO:app:11.59.24.503 {"event_type":"countdown","param1":"30"} +2025-09-27T11:59:24.614 INFO:app:Event: countdown, param1: 33 +2025-09-27T11:59:24.615 INFO:app:11.59.24.615 {"event_type":"countdown","param1":"33"} +2025-09-27T11:59:24.726 INFO:app:Event: countdown, param1: 35 +2025-09-27T11:59:24.727 INFO:app:11.59.24.727 {"event_type":"countdown","param1":"35"} +2025-09-27T11:59:24.831 INFO:app:Event: countdown, param1: 37 +2025-09-27T11:59:24.832 INFO:app:11.59.24.832 {"event_type":"countdown","param1":"37"} +2025-09-27T11:59:24.937 INFO:app:Event: countdown, param1: 39 +2025-09-27T11:59:24.938 INFO:app:11.59.24.938 {"event_type":"countdown","param1":"39"} +2025-09-27T11:59:25.061 INFO:app:Event: countdown, param1: 41 +2025-09-27T11:59:25.062 INFO:app:11.59.25.062 {"event_type":"countdown","param1":"41"} +2025-09-27T11:59:25.178 INFO:app:Event: countdown, param1: 44 +2025-09-27T11:59:25.180 INFO:app:11.59.25.180 {"event_type":"countdown","param1":"44"} +2025-09-27T11:59:25.285 INFO:app:Event: countdown, param1: 46 +2025-09-27T11:59:25.286 INFO:app:11.59.25.286 {"event_type":"countdown","param1":"46"} +2025-09-27T11:59:25.399 INFO:app:Event: countdown, param1: 48 +2025-09-27T11:59:25.400 INFO:app:11.59.25.400 {"event_type":"countdown","param1":"48"} +2025-09-27T11:59:25.512 INFO:app:Event: countdown, param1: 51 +2025-09-27T11:59:25.514 INFO:app:11.59.25.513 {"event_type":"countdown","param1":"51"} +2025-09-27T11:59:25.614 INFO:app:Event: countdown, param1: 53 +2025-09-27T11:59:25.615 INFO:app:11.59.25.615 {"event_type":"countdown","param1":"53"} +2025-09-27T11:59:25.724 INFO:app:Event: countdown, param1: 55 +2025-09-27T11:59:25.726 INFO:app:11.59.25.726 {"event_type":"countdown","param1":"55"} +2025-09-27T11:59:25.834 INFO:app:Event: countdown, param1: 57 +2025-09-27T11:59:25.834 INFO:app:11.59.25.834 {"event_type":"countdown","param1":"57"} +2025-09-27T11:59:25.940 INFO:app:Event: countdown, param1: 59 +2025-09-27T11:59:25.943 INFO:app:11.59.25.943 {"event_type":"countdown","param1":"59"} +2025-09-27T11:59:26.048 INFO:app:Event: countdown, param1: 61 +2025-09-27T11:59:26.049 INFO:app:11.59.26.049 {"event_type":"countdown","param1":"61"} +2025-09-27T11:59:26.161 INFO:app:Event: countdown, param1: 64 +2025-09-27T11:59:26.161 INFO:app:11.59.26.161 {"event_type":"countdown","param1":"64"} +2025-09-27T11:59:26.274 INFO:app:Event: countdown, param1: 66 +2025-09-27T11:59:26.275 INFO:app:11.59.26.275 {"event_type":"countdown","param1":"66"} +2025-09-27T11:59:26.380 INFO:app:Event: countdown, param1: 68 +2025-09-27T11:59:26.382 INFO:app:11.59.26.382 {"event_type":"countdown","param1":"68"} +2025-09-27T11:59:26.487 INFO:app:Event: countdown, param1: 70 +2025-09-27T11:59:26.488 INFO:app:11.59.26.488 {"event_type":"countdown","param1":"70"} +2025-09-27T11:59:26.597 INFO:app:Event: countdown, param1: 72 +2025-09-27T11:59:26.598 INFO:app:11.59.26.598 {"event_type":"countdown","param1":"72"} +2025-09-27T11:59:26.704 INFO:app:Event: countdown, param1: 74 +2025-09-27T11:59:26.704 INFO:app:11.59.26.704 {"event_type":"countdown","param1":"74"} +2025-09-27T11:59:26.814 INFO:app:Event: countdown, param1: 77 +2025-09-27T11:59:26.814 INFO:app:11.59.26.814 {"event_type":"countdown","param1":"77"} +2025-09-27T11:59:26.929 INFO:app:Event: countdown, param1: 79 +2025-09-27T11:59:26.931 INFO:app:11.59.26.931 {"event_type":"countdown","param1":"79"} +2025-09-27T11:59:27.042 INFO:app:Event: countdown, param1: 81 +2025-09-27T11:59:27.043 INFO:app:11.59.27.043 {"event_type":"countdown","param1":"81"} +2025-09-27T11:59:27.144 INFO:app:Event: countdown, param1: 83 +2025-09-27T11:59:27.146 INFO:app:11.59.27.146 {"event_type":"countdown","param1":"83"} +2025-09-27T11:59:27.254 INFO:app:Event: countdown, param1: 85 +2025-09-27T11:59:27.255 INFO:app:11.59.27.255 {"event_type":"countdown","param1":"85"} +2025-09-27T11:59:27.361 INFO:app:Event: countdown, param1: 88 +2025-09-27T11:59:27.362 INFO:app:11.59.27.362 {"event_type":"countdown","param1":"88"} +2025-09-27T11:59:27.467 INFO:app:Event: countdown, param1: 90 +2025-09-27T11:59:27.469 INFO:app:11.59.27.469 {"event_type":"countdown","param1":"90"} +2025-09-27T11:59:27.578 INFO:app:Event: countdown, param1: 92 +2025-09-27T11:59:27.579 INFO:app:11.59.27.579 {"event_type":"countdown","param1":"92"} +2025-09-27T11:59:27.693 INFO:app:Event: countdown, param1: 94 +2025-09-27T11:59:27.695 INFO:app:11.59.27.694 {"event_type":"countdown","param1":"94"} +2025-09-27T11:59:27.803 INFO:app:Event: countdown, param1: 96 +2025-09-27T11:59:27.804 INFO:app:11.59.27.804 {"event_type":"countdown","param1":"96"} +2025-09-27T11:59:27.907 INFO:app:Event: countdown, param1: 98 +2025-09-27T11:59:27.908 INFO:app:11.59.27.908 {"event_type":"countdown","param1":"98"} +2025-09-27T11:59:28.017 INFO:app:Event: countdown, param1: 100 +2025-09-27T11:59:28.018 INFO:app:11.59.28.018 {"event_type":"countdown","param1":"100"} +2025-09-27T11:59:28.124 INFO:app:Event: countdown, param1: 100 +2025-09-27T11:59:28.125 INFO:app:11.59.28.125 {"event_type":"countdown","param1":"100"} +2025-09-27T11:59:28.125 INFO:app:Event: capture_start +2025-09-27T11:59:28.127 INFO:app:capture_start event received +2025-09-27T11:59:28.127 INFO:app:11.59.28.127 {"event_type":"capture_start"} +2025-09-27T11:59:28.331 INFO:app:Event: file_download, param1: 20250927_115928_329.jpg +2025-09-27T11:59:28.332 INFO:app:File downloaded: 20250927_115928_329.jpg +2025-09-27T11:59:28.332 INFO:app:11.59.28.332 {"event_type":"file_download","param1":"20250927_115928_329.jpg"} +2025-09-27T11:59:30.432 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T11:59:30.433 INFO:app:Countdown started - 5 seconds +2025-09-27T11:59:30.433 INFO:app:11.59.30.433 {"event_type":"countdown_start","param1":"5"} +2025-09-27T11:59:30.530 INFO:app:Event: countdown, param1: 21 +2025-09-27T11:59:30.531 INFO:app:11.59.30.531 {"event_type":"countdown","param1":"21"} +2025-09-27T11:59:30.639 INFO:app:Event: countdown, param1: 24 +2025-09-27T11:59:30.640 INFO:app:11.59.30.640 {"event_type":"countdown","param1":"24"} +2025-09-27T11:59:30.758 INFO:app:Event: countdown, param1: 26 +2025-09-27T11:59:30.758 INFO:app:11.59.30.758 {"event_type":"countdown","param1":"26"} +2025-09-27T11:59:30.863 INFO:app:Event: countdown, param1: 28 +2025-09-27T11:59:30.864 INFO:app:11.59.30.864 {"event_type":"countdown","param1":"28"} +2025-09-27T11:59:30.970 INFO:app:Event: countdown, param1: 30 +2025-09-27T11:59:30.970 INFO:app:11.59.30.970 {"event_type":"countdown","param1":"30"} +2025-09-27T11:59:31.094 INFO:app:Event: countdown, param1: 33 +2025-09-27T11:59:31.095 INFO:app:11.59.31.095 {"event_type":"countdown","param1":"33"} +2025-09-27T11:59:31.212 INFO:app:Event: countdown, param1: 35 +2025-09-27T11:59:31.214 INFO:app:11.59.31.214 {"event_type":"countdown","param1":"35"} +2025-09-27T11:59:31.314 INFO:app:Event: countdown, param1: 37 +2025-09-27T11:59:31.315 INFO:app:11.59.31.315 {"event_type":"countdown","param1":"37"} +2025-09-27T11:59:31.424 INFO:app:Event: countdown, param1: 39 +2025-09-27T11:59:31.425 INFO:app:11.59.31.425 {"event_type":"countdown","param1":"39"} +2025-09-27T11:59:31.532 INFO:app:Event: countdown, param1: 41 +2025-09-27T11:59:31.533 INFO:app:11.59.31.533 {"event_type":"countdown","param1":"41"} +2025-09-27T11:59:31.648 INFO:app:Event: countdown, param1: 44 +2025-09-27T11:59:31.650 INFO:app:11.59.31.650 {"event_type":"countdown","param1":"44"} +2025-09-27T11:59:31.762 INFO:app:Event: countdown, param1: 46 +2025-09-27T11:59:31.762 INFO:app:11.59.31.762 {"event_type":"countdown","param1":"46"} +2025-09-27T11:59:31.866 INFO:app:Event: countdown, param1: 48 +2025-09-27T11:59:31.868 INFO:app:11.59.31.868 {"event_type":"countdown","param1":"48"} +2025-09-27T11:59:31.981 INFO:app:Event: countdown, param1: 50 +2025-09-27T11:59:31.983 INFO:app:11.59.31.983 {"event_type":"countdown","param1":"50"} +2025-09-27T11:59:32.027 INFO:app:Event: session_end +2025-09-27T11:59:32.028 INFO:app:Session ended... default attaction animation +2025-09-27T11:59:32.029 INFO:app:11.59.32.029 {"event_type":"session_end"} +2025-09-27T12:03:04.895 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-27T12:03:09.902 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:03:09.902 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:03:14.926 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T12:03:19.930 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:03:19.931 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:03:24.966 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T12:03:29.974 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:03:29.975 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:03:35.008 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T12:03:40.020 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:03:40.020 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:03:45.032 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T12:03:50.038 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:03:50.038 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:03:55.078 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T12:04:00.083 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:04:00.084 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:04:38.890 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:04:38.890 INFO:src.app:BLE background loop started +2025-09-27T12:04:38.890 INFO:app:BleComm started +2025-09-27T12:04:38.891 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:04:38.891 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:04:44.019 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:04:44.024 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:04:45.896 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:05:06.045 INFO:app:Event: session_start, param1: PrintAndGIF +2025-09-27T12:05:06.047 INFO:app:Session started - PrintAndGIF +2025-09-27T12:05:06.047 INFO:app:12.05.06.047 {"event_type":"session_start","param1":"PrintAndGIF"} +2025-09-27T12:05:06.104 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T12:05:06.104 INFO:app:Countdown started - 5 seconds +2025-09-27T12:05:06.104 INFO:app:12.05.06.104 {"event_type":"countdown_start","param1":"5"} +2025-09-27T12:05:06.201 INFO:app:Event: countdown, param1: 21 +2025-09-27T12:05:06.202 INFO:app:12.05.06.202 {"event_type":"countdown","param1":"21"} +2025-09-27T12:05:06.318 INFO:app:Event: countdown, param1: 24 +2025-09-27T12:05:06.320 INFO:app:12.05.06.320 {"event_type":"countdown","param1":"24"} +2025-09-27T12:05:06.430 INFO:app:Event: countdown, param1: 26 +2025-09-27T12:05:06.432 INFO:app:12.05.06.431 {"event_type":"countdown","param1":"26"} +2025-09-27T12:05:06.532 INFO:app:Event: countdown, param1: 28 +2025-09-27T12:05:06.533 INFO:app:12.05.06.533 {"event_type":"countdown","param1":"28"} +2025-09-27T12:05:06.639 INFO:app:Event: countdown, param1: 30 +2025-09-27T12:05:06.639 INFO:app:12.05.06.639 {"event_type":"countdown","param1":"30"} +2025-09-27T12:05:06.753 INFO:app:Event: countdown, param1: 32 +2025-09-27T12:05:06.754 INFO:app:12.05.06.754 {"event_type":"countdown","param1":"32"} +2025-09-27T12:05:06.868 INFO:app:Event: countdown, param1: 35 +2025-09-27T12:05:06.868 INFO:app:12.05.06.868 {"event_type":"countdown","param1":"35"} +2025-09-27T12:05:06.967 INFO:app:Event: countdown, param1: 37 +2025-09-27T12:05:06.968 INFO:app:12.05.06.968 {"event_type":"countdown","param1":"37"} +2025-09-27T12:05:07.083 INFO:app:Event: countdown, param1: 39 +2025-09-27T12:05:07.083 INFO:app:12.05.07.083 {"event_type":"countdown","param1":"39"} +2025-09-27T12:05:07.190 INFO:app:Event: countdown, param1: 41 +2025-09-27T12:05:07.190 INFO:app:12.05.07.190 {"event_type":"countdown","param1":"41"} +2025-09-27T12:05:07.302 INFO:app:Event: countdown, param1: 43 +2025-09-27T12:05:07.303 INFO:app:12.05.07.303 {"event_type":"countdown","param1":"43"} +2025-09-27T12:05:07.409 INFO:app:Event: countdown, param1: 46 +2025-09-27T12:05:07.411 INFO:app:12.05.07.410 {"event_type":"countdown","param1":"46"} +2025-09-27T12:05:07.518 INFO:app:Event: countdown, param1: 48 +2025-09-27T12:05:07.520 INFO:app:12.05.07.520 {"event_type":"countdown","param1":"48"} +2025-09-27T12:05:07.622 INFO:app:Event: countdown, param1: 50 +2025-09-27T12:05:07.623 INFO:app:12.05.07.623 {"event_type":"countdown","param1":"50"} +2025-09-27T12:05:07.737 INFO:app:Event: countdown, param1: 52 +2025-09-27T12:05:07.737 INFO:app:12.05.07.737 {"event_type":"countdown","param1":"52"} +2025-09-27T12:05:07.845 INFO:app:Event: countdown, param1: 54 +2025-09-27T12:05:07.845 INFO:app:12.05.07.845 {"event_type":"countdown","param1":"54"} +2025-09-27T12:05:07.952 INFO:app:Event: countdown, param1: 56 +2025-09-27T12:05:07.953 INFO:app:12.05.07.953 {"event_type":"countdown","param1":"56"} +2025-09-27T12:05:08.061 INFO:app:Event: countdown, param1: 59 +2025-09-27T12:05:08.061 INFO:app:12.05.08.061 {"event_type":"countdown","param1":"59"} +2025-09-27T12:05:08.174 INFO:app:Event: countdown, param1: 61 +2025-09-27T12:05:08.174 INFO:app:12.05.08.174 {"event_type":"countdown","param1":"61"} +2025-09-27T12:05:08.287 INFO:app:Event: countdown, param1: 63 +2025-09-27T12:05:08.288 INFO:app:12.05.08.288 {"event_type":"countdown","param1":"63"} +2025-09-27T12:05:08.399 INFO:app:Event: countdown, param1: 65 +2025-09-27T12:05:08.400 INFO:app:12.05.08.400 {"event_type":"countdown","param1":"65"} +2025-09-27T12:05:08.503 INFO:app:Event: countdown, param1: 67 +2025-09-27T12:05:08.505 INFO:app:12.05.08.505 {"event_type":"countdown","param1":"67"} +2025-09-27T12:05:08.613 INFO:app:Event: countdown, param1: 70 +2025-09-27T12:05:08.614 INFO:app:12.05.08.614 {"event_type":"countdown","param1":"70"} +2025-09-27T12:05:08.717 INFO:app:Event: countdown, param1: 72 +2025-09-27T12:05:08.718 INFO:app:12.05.08.718 {"event_type":"countdown","param1":"72"} +2025-09-27T12:05:08.827 INFO:app:Event: countdown, param1: 74 +2025-09-27T12:05:08.828 INFO:app:12.05.08.828 {"event_type":"countdown","param1":"74"} +2025-09-27T12:05:08.939 INFO:app:Event: countdown, param1: 76 +2025-09-27T12:05:08.940 INFO:app:12.05.08.940 {"event_type":"countdown","param1":"76"} +2025-09-27T12:05:09.057 INFO:app:Event: countdown, param1: 79 +2025-09-27T12:05:09.058 INFO:app:12.05.09.057 {"event_type":"countdown","param1":"79"} +2025-09-27T12:05:09.162 INFO:app:Event: countdown, param1: 81 +2025-09-27T12:05:09.163 INFO:app:12.05.09.163 {"event_type":"countdown","param1":"81"} +2025-09-27T12:05:09.267 INFO:app:Event: countdown, param1: 83 +2025-09-27T12:05:09.268 INFO:app:12.05.09.268 {"event_type":"countdown","param1":"83"} +2025-09-27T12:05:09.376 INFO:app:Event: countdown, param1: 85 +2025-09-27T12:05:09.376 INFO:app:12.05.09.376 {"event_type":"countdown","param1":"85"} +2025-09-27T12:05:09.482 INFO:app:Event: countdown, param1: 87 +2025-09-27T12:05:09.483 INFO:app:12.05.09.483 {"event_type":"countdown","param1":"87"} +2025-09-27T12:05:09.594 INFO:app:Event: countdown, param1: 89 +2025-09-27T12:05:09.595 INFO:app:12.05.09.595 {"event_type":"countdown","param1":"89"} +2025-09-27T12:05:09.704 INFO:app:Event: countdown, param1: 91 +2025-09-27T12:05:09.705 INFO:app:12.05.09.705 {"event_type":"countdown","param1":"91"} +2025-09-27T12:05:09.819 INFO:app:Event: countdown, param1: 94 +2025-09-27T12:05:09.819 INFO:app:12.05.09.819 {"event_type":"countdown","param1":"94"} +2025-09-27T12:05:09.927 INFO:app:Event: countdown, param1: 96 +2025-09-27T12:05:09.928 INFO:app:12.05.09.928 {"event_type":"countdown","param1":"96"} +2025-09-27T12:05:10.034 INFO:app:Event: countdown, param1: 98 +2025-09-27T12:05:10.034 INFO:app:12.05.10.034 {"event_type":"countdown","param1":"98"} +2025-09-27T12:05:10.141 INFO:app:Event: countdown, param1: 100 +2025-09-27T12:05:10.143 INFO:app:12.05.10.143 {"event_type":"countdown","param1":"100"} +2025-09-27T12:05:10.249 INFO:app:Event: countdown, param1: 100 +2025-09-27T12:05:10.250 INFO:app:Event: capture_start +2025-09-27T12:05:10.251 INFO:app:12.05.10.251 {"event_type":"countdown","param1":"100"} +2025-09-27T12:05:10.252 INFO:app:capture_start event received +2025-09-27T12:05:10.253 INFO:app:12.05.10.253 {"event_type":"capture_start"} +2025-09-27T12:05:10.429 INFO:app:Event: file_download, param1: 20250927_120510_424.jpg +2025-09-27T12:05:10.430 INFO:app:File downloaded: 20250927_120510_424.jpg +2025-09-27T12:05:10.430 INFO:app:12.05.10.430 {"event_type":"file_download","param1":"20250927_120510_424.jpg"} +2025-09-27T12:05:12.794 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T12:05:12.794 INFO:app:Countdown started - 5 seconds +2025-09-27T12:05:12.795 INFO:app:12.05.12.795 {"event_type":"countdown_start","param1":"5"} +2025-09-27T12:05:12.893 INFO:app:Event: countdown, param1: 21 +2025-09-27T12:05:12.894 INFO:app:12.05.12.894 {"event_type":"countdown","param1":"21"} +2025-09-27T12:05:12.999 INFO:app:Event: countdown, param1: 24 +2025-09-27T12:05:13.001 INFO:app:12.05.13.001 {"event_type":"countdown","param1":"24"} +2025-09-27T12:05:13.119 INFO:app:Event: countdown, param1: 26 +2025-09-27T12:05:13.121 INFO:app:12.05.13.121 {"event_type":"countdown","param1":"26"} +2025-09-27T12:05:13.219 INFO:app:Event: countdown, param1: 28 +2025-09-27T12:05:13.220 INFO:app:12.05.13.220 {"event_type":"countdown","param1":"28"} +2025-09-27T12:05:13.339 INFO:app:Event: countdown, param1: 30 +2025-09-27T12:05:13.340 INFO:app:12.05.13.340 {"event_type":"countdown","param1":"30"} +2025-09-27T12:05:13.449 INFO:app:Event: countdown, param1: 33 +2025-09-27T12:05:13.450 INFO:app:12.05.13.450 {"event_type":"countdown","param1":"33"} +2025-09-27T12:05:13.533 INFO:app:Event: session_end +2025-09-27T12:05:13.535 INFO:app:Session ended... default attaction animation +2025-09-27T12:05:13.536 INFO:app:12.05.13.536 {"event_type":"session_end"} +2025-09-27T12:07:24.266 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:07:26.018 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:07:26.018 INFO:src.app:BLE background loop started +2025-09-27T12:07:26.019 INFO:app:BleComm started +2025-09-27T12:07:26.020 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:07:26.020 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:07:31.161 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:07:31.168 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:07:33.089 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:07:33.903 INFO:app:Event: session_start, param1: PrintAndGIF +2025-09-27T12:07:33.904 INFO:app:Session started - PrintAndGIF +2025-09-27T12:07:33.951 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T12:07:33.951 INFO:app:Countdown started - 5 seconds +2025-09-27T12:07:34.050 INFO:app:Event: countdown, param1: 21 +2025-09-27T12:07:34.157 INFO:app:Event: countdown, param1: 24 +2025-09-27T12:07:34.264 INFO:app:Event: countdown, param1: 26 +2025-09-27T12:07:34.382 INFO:app:Event: countdown, param1: 28 +2025-09-27T12:07:34.483 INFO:app:Event: countdown, param1: 30 +2025-09-27T12:07:34.601 INFO:app:Event: countdown, param1: 33 +2025-09-27T12:07:34.708 INFO:app:Event: countdown, param1: 35 +2025-09-27T12:07:34.815 INFO:app:Event: countdown, param1: 37 +2025-09-27T12:07:34.925 INFO:app:Event: countdown, param1: 39 +2025-09-27T12:07:35.029 INFO:app:Event: countdown, param1: 41 +2025-09-27T12:07:35.140 INFO:app:Event: countdown, param1: 43 +2025-09-27T12:07:35.249 INFO:app:Event: countdown, param1: 45 +2025-09-27T12:07:35.359 INFO:app:Event: countdown, param1: 48 +2025-09-27T12:07:35.472 INFO:app:Event: countdown, param1: 50 +2025-09-27T12:07:35.584 INFO:app:Event: countdown, param1: 52 +2025-09-27T12:07:35.688 INFO:app:Event: countdown, param1: 54 +2025-09-27T12:07:35.796 INFO:app:Event: countdown, param1: 56 +2025-09-27T12:07:35.917 INFO:app:Event: countdown, param1: 59 +2025-09-27T12:07:36.014 INFO:app:Event: countdown, param1: 61 +2025-09-27T12:07:36.127 INFO:app:Event: countdown, param1: 63 +2025-09-27T12:07:36.233 INFO:app:Event: countdown, param1: 65 +2025-09-27T12:07:36.349 INFO:app:Event: countdown, param1: 67 +2025-09-27T12:07:36.459 INFO:app:Event: countdown, param1: 70 +2025-09-27T12:07:36.566 INFO:app:Event: countdown, param1: 72 +2025-09-27T12:07:36.676 INFO:app:Event: countdown, param1: 74 +2025-09-27T12:07:36.778 INFO:app:Event: countdown, param1: 76 +2025-09-27T12:07:36.889 INFO:app:Event: countdown, param1: 78 +2025-09-27T12:07:36.998 INFO:app:Event: countdown, param1: 80 +2025-09-27T12:07:37.113 INFO:app:Event: countdown, param1: 83 +2025-09-27T12:07:37.225 INFO:app:Event: countdown, param1: 85 +2025-09-27T12:07:37.332 INFO:app:Event: countdown, param1: 87 +2025-09-27T12:07:37.438 INFO:app:Event: countdown, param1: 89 +2025-09-27T12:07:37.546 INFO:app:Event: countdown, param1: 91 +2025-09-27T12:07:37.657 INFO:app:Event: countdown, param1: 94 +2025-09-27T12:07:37.765 INFO:app:Event: countdown, param1: 96 +2025-09-27T12:07:37.877 INFO:app:Event: countdown, param1: 98 +2025-09-27T12:07:37.982 INFO:app:Event: countdown, param1: 100 +2025-09-27T12:07:38.093 INFO:app:Event: countdown, param1: 100 +2025-09-27T12:07:38.094 INFO:app:Event: capture_start +2025-09-27T12:07:38.094 INFO:app:capture_start event received +2025-09-27T12:07:38.316 INFO:app:Event: file_download, param1: 20250927_120738_313.jpg +2025-09-27T12:07:38.316 INFO:app:File downloaded: 20250927_120738_313.jpg +2025-09-27T12:07:41.410 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T12:07:41.410 INFO:app:Countdown started - 5 seconds +2025-09-27T12:07:41.516 INFO:app:Event: countdown, param1: 22 +2025-09-27T12:07:41.629 INFO:app:Event: countdown, param1: 24 +2025-09-27T12:07:41.736 INFO:app:Event: countdown, param1: 26 +2025-09-27T12:07:41.843 INFO:app:Event: countdown, param1: 28 +2025-09-27T12:07:41.952 INFO:app:Event: countdown, param1: 30 +2025-09-27T12:07:42.067 INFO:app:Event: countdown, param1: 33 +2025-09-27T12:07:42.178 INFO:app:Event: countdown, param1: 35 +2025-09-27T12:07:42.282 INFO:app:Event: countdown, param1: 37 +2025-09-27T12:07:42.396 INFO:app:Event: countdown, param1: 39 +2025-09-27T12:07:42.498 INFO:app:Event: countdown, param1: 41 +2025-09-27T12:07:42.611 INFO:app:Event: countdown, param1: 44 +2025-09-27T12:07:42.718 INFO:app:Event: countdown, param1: 46 +2025-09-27T12:07:42.835 INFO:app:Event: countdown, param1: 48 +2025-09-27T12:07:42.945 INFO:app:Event: countdown, param1: 50 +2025-09-27T12:07:43.049 INFO:app:Event: countdown, param1: 52 +2025-09-27T12:07:43.159 INFO:app:Event: countdown, param1: 54 +2025-09-27T12:07:43.265 INFO:app:Event: countdown, param1: 57 +2025-09-27T12:07:43.373 INFO:app:Event: countdown, param1: 59 +2025-09-27T12:07:43.485 INFO:app:Event: countdown, param1: 61 +2025-09-27T12:07:43.597 INFO:app:Event: countdown, param1: 63 +2025-09-27T12:07:43.706 INFO:app:Event: countdown, param1: 65 +2025-09-27T12:07:43.815 INFO:app:Event: countdown, param1: 68 +2025-09-27T12:07:43.928 INFO:app:Event: countdown, param1: 70 +2025-09-27T12:07:44.031 INFO:app:Event: countdown, param1: 72 +2025-09-27T12:07:44.140 INFO:app:Event: countdown, param1: 74 +2025-09-27T12:07:44.248 INFO:app:Event: countdown, param1: 76 +2025-09-27T12:07:44.366 INFO:app:Event: countdown, param1: 79 +2025-09-27T12:07:44.467 INFO:app:Event: countdown, param1: 81 +2025-09-27T12:07:44.561 INFO:app:Event: countdown_start, param1: 5 +2025-09-27T12:07:44.562 INFO:app:Countdown started - 5 seconds +2025-09-27T12:07:44.676 INFO:app:Event: countdown, param1: 22 +2025-09-27T12:07:44.783 INFO:app:Event: countdown, param1: 24 +2025-09-27T12:07:44.888 INFO:app:Event: countdown, param1: 26 +2025-09-27T12:07:44.998 INFO:app:Event: countdown, param1: 28 +2025-09-27T12:07:45.119 INFO:app:Event: countdown, param1: 31 +2025-09-27T12:07:45.224 INFO:app:Event: countdown, param1: 33 +2025-09-27T12:07:45.330 INFO:app:Event: countdown, param1: 35 +2025-09-27T12:07:45.439 INFO:app:Event: countdown, param1: 37 +2025-09-27T12:07:45.547 INFO:app:Event: countdown, param1: 39 +2025-09-27T12:07:45.665 INFO:app:Event: countdown, param1: 42 +2025-09-27T12:07:45.771 INFO:app:Event: countdown, param1: 44 +2025-09-27T12:07:45.880 INFO:app:Event: countdown, param1: 46 +2025-09-27T12:07:45.989 INFO:app:Event: countdown, param1: 48 +2025-09-27T12:07:46.051 INFO:app:Event: session_end +2025-09-27T12:07:46.052 INFO:app:Session ended... default attaction animation +2025-09-27T12:09:15.314 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:09:17.529 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:09:17.530 INFO:src.app:BLE background loop started +2025-09-27T12:09:17.531 INFO:app:BleComm started +2025-09-27T12:09:17.532 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:09:17.532 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:09:22.031 INFO:app:Session started - PrintAndGIF +2025-09-27T12:09:22.103 INFO:app:Countdown started - 5 seconds +2025-09-27T12:09:22.691 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:09:22.712 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:09:25.126 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:09:26.257 INFO:app:capture_start event received +2025-09-27T12:09:26.642 INFO:app:File downloaded: 20250927_120926_635.jpg +2025-09-27T12:09:27.840 INFO:app:Countdown started - 5 seconds +2025-09-27T12:09:29.044 INFO:app:Session ended... default attaction animation +2025-09-27T12:09:42.688 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:41:14.752 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:41:14.753 INFO:src.app:BLE background loop started +2025-09-27T12:41:14.753 INFO:app:BleComm started +2025-09-27T12:41:14.753 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:41:14.755 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:41:19.883 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:41:19.892 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:41:22.501 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:41:25.340 INFO:app:Session ended... default attaction animation +2025-09-27T12:41:30.310 INFO:app:Session started - PrintAndGIF +2025-09-27T12:41:30.371 INFO:app:Countdown started - 5 seconds +2025-09-27T12:41:34.549 INFO:app:capture_start event received +2025-09-27T12:41:34.733 INFO:app:File downloaded: 20250927_124134_726.jpg +2025-09-27T12:41:35.776 INFO:app:Countdown started - 5 seconds +2025-09-27T12:41:36.918 INFO:app:Session ended... default attaction animation +2025-09-27T12:45:38.159 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:45:40.977 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:45:40.978 INFO:src.app:BLE background loop started +2025-09-27T12:45:40.978 INFO:app:BleComm started +2025-09-27T12:45:40.979 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:45:40.979 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:45:46.139 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:45:46.149 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:45:48.702 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:45:56.133 INFO:app:Session started - PrintAndGIF +2025-09-27T12:45:56.193 WARNING:app:Failed to send BLE command for countdown animation +2025-09-27T12:45:56.194 INFO:app:Countdown started - 5 seconds +2025-09-27T12:46:00.362 INFO:app:capture_start event received +2025-09-27T12:46:00.571 INFO:app:File downloaded: 20250927_124600_567.jpg +2025-09-27T12:46:03.660 WARNING:app:Failed to send BLE command for countdown animation +2025-09-27T12:46:03.661 INFO:app:Countdown started - 5 seconds +2025-09-27T12:46:04.132 WARNING:app:Failed to send BLE command for countdown animation +2025-09-27T12:46:04.133 INFO:app:Countdown started - 5 seconds +2025-09-27T12:46:07.663 WARNING:app:Failed to send BLE command for session end animation +2025-09-27T12:49:01.327 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:49:06.167 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:49:06.168 INFO:src.app:BLE background loop started +2025-09-27T12:49:06.168 INFO:app:BleComm started +2025-09-27T12:49:06.169 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:49:06.169 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:49:11.316 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:49:11.326 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:49:14.055 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:49:58.032 INFO:app:Session started - PrintAndGIF +2025-09-27T12:49:58.260 WARNING:app:Failed to send BLE command for countdown animation +2025-09-27T12:49:58.261 INFO:app:Countdown started - 5 seconds +2025-09-27T12:50:02.289 INFO:app:capture_start event received +2025-09-27T12:50:02.558 INFO:app:File downloaded: 20250927_125002_552.jpg +2025-09-27T12:50:05.661 WARNING:app:Failed to send BLE command for countdown animation +2025-09-27T12:50:05.662 INFO:app:Countdown started - 5 seconds +2025-09-27T12:50:08.246 WARNING:app:Failed to send BLE command for countdown animation +2025-09-27T12:50:08.247 INFO:app:Countdown started - 5 seconds +2025-09-27T12:50:09.151 WARNING:app:Failed to send BLE command for session end animation +2025-09-27T12:51:30.390 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:51:33.877 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:51:33.877 INFO:src.app:BLE background loop started +2025-09-27T12:51:33.879 INFO:app:BleComm started +2025-09-27T12:51:33.879 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:51:33.879 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:51:39.012 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:51:39.025 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:51:41.447 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:51:46.122 INFO:app:Session started - PrintAndGIF +2025-09-27T12:51:46.243 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=56616, thread=47860) args=(5,0,0,44) +2025-09-27T12:51:46.245 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:51:46.412 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:51:46.413 INFO:app:Countdown started - 5 seconds +2025-09-27T12:51:50.364 INFO:app:capture_start event received +2025-09-27T12:51:50.537 INFO:app:File downloaded: 20250927_125150_532.jpg +2025-09-27T12:51:53.672 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=56616, thread=20924) args=(5,0,0,44) +2025-09-27T12:51:53.674 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:51:53.855 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:51:53.858 INFO:app:Countdown started - 5 seconds +2025-09-27T12:51:57.850 INFO:app:capture_start event received +2025-09-27T12:51:58.038 INFO:app:File downloaded: 20250927_125158_036.jpg +2025-09-27T12:52:01.139 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=56616, thread=28956) args=(5,0,0,44) +2025-09-27T12:52:01.140 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:52:01.292 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:52:01.292 INFO:app:Countdown started - 5 seconds +2025-09-27T12:52:05.295 INFO:app:capture_start event received +2025-09-27T12:52:05.511 INFO:app:File downloaded: 20250927_125205_506.jpg +2025-09-27T12:52:08.649 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=56616, thread=54884) args=(5,0,0,44) +2025-09-27T12:52:08.651 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:52:08.792 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:52:08.793 INFO:app:Countdown started - 5 seconds +2025-09-27T12:52:12.829 INFO:app:capture_start event received +2025-09-27T12:52:12.997 INFO:app:File downloaded: 20250927_125212_994.jpg +2025-09-27T12:52:16.556 INFO:app:Processing started... +2025-09-27T12:52:16.822 INFO:app:Sharing screen Animation +2025-09-27T12:52:18.380 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250927_125216_552.jpg +2025-09-27T12:52:18.421 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125150_532.jpg +2025-09-27T12:52:19.286 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_125216_552.mp4 +2025-09-27T12:52:20.109 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125158_036.jpg +2025-09-27T12:52:21.081 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125205_506.jpg +2025-09-27T12:52:22.296 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125212_994.jpg +2025-09-27T12:52:47.190 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=56616, thread=45760) args=(23,0,0,44) +2025-09-27T12:52:47.192 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:52:47.373 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T12:55:14.059 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:55:16.754 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:55:16.755 INFO:src.app:BLE background loop started +2025-09-27T12:55:16.755 INFO:app:BleComm started +2025-09-27T12:55:16.756 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:55:16.756 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:55:21.904 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:55:21.913 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:55:24.338 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:55:25.471 INFO:app:Session started - PrintAndGIF +2025-09-27T12:55:25.566 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=17676, thread=54952) args=(5,0,0,44) +2025-09-27T12:55:25.566 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:55:25.595 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:55:25.596 INFO:app:Countdown started - 5 seconds +2025-09-27T12:55:29.708 INFO:app:capture_start event received +2025-09-27T12:55:29.893 INFO:app:File downloaded: 20250927_125529_888.jpg +2025-09-27T12:55:33.029 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=17676, thread=53552) args=(5,0,0,44) +2025-09-27T12:55:33.031 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:55:33.215 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:55:33.216 INFO:app:Countdown started - 5 seconds +2025-09-27T12:55:37.203 INFO:app:capture_start event received +2025-09-27T12:55:37.412 INFO:app:File downloaded: 20250927_125537_408.jpg +2025-09-27T12:55:40.503 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=17676, thread=9156) args=(5,0,0,44) +2025-09-27T12:55:40.504 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:55:40.656 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:55:40.657 INFO:app:Countdown started - 5 seconds +2025-09-27T12:55:44.658 INFO:app:capture_start event received +2025-09-27T12:55:44.896 INFO:app:File downloaded: 20250927_125544_893.jpg +2025-09-27T12:55:47.983 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=17676, thread=51048) args=(5,0,0,44) +2025-09-27T12:55:47.985 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:55:48.155 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:55:48.157 INFO:app:Countdown started - 5 seconds +2025-09-27T12:55:52.134 INFO:app:capture_start event received +2025-09-27T12:55:52.451 INFO:app:File downloaded: 20250927_125552_446.jpg +2025-09-27T12:55:55.974 INFO:app:Processing started... +2025-09-27T12:55:56.183 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=17676, thread=57860) args=(23,0,0,44) +2025-09-27T12:55:56.186 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:55:56.316 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T12:55:56.317 INFO:app:Sharing screen Animation +2025-09-27T12:55:57.325 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125529_888.jpg +2025-09-27T12:55:57.523 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250927_125555_972.jpg +2025-09-27T12:55:57.858 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_125555_972.mp4 +2025-09-27T12:55:58.652 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125537_408.jpg +2025-09-27T12:56:00.503 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125544_893.jpg +2025-09-27T12:56:02.032 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125552_446.jpg +2025-09-27T12:56:26.618 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=17676, thread=32984) args=(200,0,0,30) +2025-09-27T12:56:26.619 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:56:26.798 INFO:src.app:Wrote payload to characteristic 0xFFE1: c800001e +2025-09-27T12:57:37.294 INFO:src.app:Scheduling BLE disconnect +2025-09-27T12:57:39.731 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:57:39.732 INFO:src.app:BLE background loop started +2025-09-27T12:57:39.732 INFO:app:BleComm started +2025-09-27T12:57:39.733 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T12:57:39.733 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T12:57:44.857 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T12:57:44.863 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T12:57:46.824 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T12:58:17.069 INFO:app:Session started - PrintAndGIF +2025-09-27T12:58:17.169 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=50972) args=(5,0,0,44) +2025-09-27T12:58:17.169 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:58:17.319 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:58:17.319 INFO:app:Countdown started - 5 seconds +2025-09-27T12:58:21.319 INFO:app:capture_start event received +2025-09-27T12:58:21.513 INFO:app:File downloaded: 20250927_125821_503.jpg +2025-09-27T12:58:24.650 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=3424) args=(5,0,0,44) +2025-09-27T12:58:24.652 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:58:24.819 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:58:24.820 INFO:app:Countdown started - 5 seconds +2025-09-27T12:58:28.830 INFO:app:capture_start event received +2025-09-27T12:58:29.009 INFO:app:File downloaded: 20250927_125829_003.jpg +2025-09-27T12:58:32.127 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=52656) args=(5,0,0,44) +2025-09-27T12:58:32.132 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:58:32.318 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:58:32.319 INFO:app:Countdown started - 5 seconds +2025-09-27T12:58:36.234 INFO:app:capture_start event received +2025-09-27T12:58:36.528 INFO:app:File downloaded: 20250927_125836_525.jpg +2025-09-27T12:58:39.605 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=564) args=(5,0,0,44) +2025-09-27T12:58:39.607 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:58:39.758 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:58:39.759 INFO:app:Countdown started - 5 seconds +2025-09-27T12:58:43.773 INFO:app:capture_start event received +2025-09-27T12:58:43.992 INFO:app:File downloaded: 20250927_125843_988.jpg +2025-09-27T12:58:47.537 INFO:app:Processing started... +2025-09-27T12:58:47.751 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=56208) args=(0,0,150,30) +2025-09-27T12:58:47.753 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:58:47.918 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0000961e +2025-09-27T12:58:47.919 INFO:app:Sharing screen Animation +2025-09-27T12:58:49.191 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125821_503.jpg +2025-09-27T12:58:49.365 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250927_125847_535.jpg +2025-09-27T12:58:49.492 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_125847_535.mp4 +2025-09-27T12:58:50.553 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125829_003.jpg +2025-09-27T12:58:51.923 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125836_525.jpg +2025-09-27T12:58:53.905 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_125843_988.jpg +2025-09-27T12:59:00.733 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=56444) args=(23,0,0,44) +2025-09-27T12:59:00.734 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:59:00.880 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T12:59:05.830 INFO:app:Session started - OnlyGIF +2025-09-27T12:59:05.884 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=47268) args=(5,0,0,44) +2025-09-27T12:59:05.884 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:59:06.039 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:59:06.039 INFO:app:Countdown started - 5 seconds +2025-09-27T12:59:10.037 INFO:app:capture_start event received +2025-09-27T12:59:10.201 INFO:app:File downloaded: 20250927_125910_198.jpg +2025-09-27T12:59:13.312 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=584) args=(5,0,0,44) +2025-09-27T12:59:13.313 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:59:13.480 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:59:13.481 INFO:app:Countdown started - 5 seconds +2025-09-27T12:59:17.481 INFO:app:capture_start event received +2025-09-27T12:59:17.685 INFO:app:File downloaded: 20250927_125917_682.jpg +2025-09-27T12:59:20.818 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=59132) args=(5,0,0,44) +2025-09-27T12:59:20.818 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:59:20.979 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:59:20.981 INFO:app:Countdown started - 5 seconds +2025-09-27T12:59:24.979 INFO:app:capture_start event received +2025-09-27T12:59:25.249 INFO:app:File downloaded: 20250927_125925_243.jpg +2025-09-27T12:59:28.383 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=55752) args=(5,0,0,44) +2025-09-27T12:59:28.385 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:59:28.538 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T12:59:28.539 INFO:app:Countdown started - 5 seconds +2025-09-27T12:59:32.537 INFO:app:capture_start event received +2025-09-27T12:59:32.728 INFO:app:File downloaded: 20250927_125932_725.jpg +2025-09-27T12:59:36.283 INFO:app:Processing started... +2025-09-27T12:59:36.577 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=57404) args=(0,0,150,30) +2025-09-27T12:59:36.579 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T12:59:36.758 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0000961e +2025-09-27T12:59:36.759 INFO:app:Sharing screen Animation +2025-09-27T12:59:37.985 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_125936_278.mp4 +2025-09-27T13:00:06.991 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=55200) args=(23,0,0,44) +2025-09-27T13:00:06.993 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T13:00:07.180 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T17:01:59.903 INFO:app:Session started - PrintAndGIF +2025-09-27T17:02:00.034 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=17152) args=(5,0,0,44) +2025-09-27T17:02:00.036 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:02:00.187 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:02:00.187 INFO:app:Countdown started - 5 seconds +2025-09-27T17:02:02.784 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=31476) args=(23,0,0,44) +2025-09-27T17:02:02.786 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:02:02.947 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T17:02:16.916 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-27T17:02:21.919 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T17:02:21.919 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T17:02:26.974 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T17:02:26.975 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T17:02:29.544 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T17:02:30.831 INFO:app:Session started - PrintAndGIF +2025-09-27T17:02:30.895 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=53688) args=(5,0,0,44) +2025-09-27T17:02:30.896 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:02:30.966 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:02:30.967 INFO:app:Countdown started - 5 seconds +2025-09-27T17:02:35.054 INFO:app:capture_start event received +2025-09-27T17:02:35.258 INFO:app:File downloaded: 20250927_170235_253.jpg +2025-09-27T17:02:38.399 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=16096) args=(5,0,0,44) +2025-09-27T17:02:38.400 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:02:38.587 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:02:38.587 INFO:app:Countdown started - 5 seconds +2025-09-27T17:02:42.587 INFO:app:capture_start event received +2025-09-27T17:02:42.767 INFO:app:File downloaded: 20250927_170242_763.jpg +2025-09-27T17:02:45.861 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=26960) args=(5,0,0,44) +2025-09-27T17:02:45.863 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:02:46.030 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:02:46.033 INFO:app:Countdown started - 5 seconds +2025-09-27T17:02:50.050 INFO:app:capture_start event received +2025-09-27T17:02:50.298 INFO:app:File downloaded: 20250927_170250_291.jpg +2025-09-27T17:02:53.438 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=44780) args=(5,0,0,44) +2025-09-27T17:02:53.442 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:02:53.587 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:02:53.587 INFO:app:Countdown started - 5 seconds +2025-09-27T17:02:57.584 INFO:app:capture_start event received +2025-09-27T17:02:57.804 INFO:app:File downloaded: 20250927_170257_799.jpg +2025-09-27T17:03:01.295 INFO:app:Processing started... +2025-09-27T17:03:01.525 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=57852) args=(0,0,150,30) +2025-09-27T17:03:01.527 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:03:01.686 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0000961e +2025-09-27T17:03:01.688 INFO:app:Sharing screen Animation +2025-09-27T17:03:02.851 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250927_170301_292.jpg +2025-09-27T17:03:02.856 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_170235_253.jpg +2025-09-27T17:03:03.378 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_170301_292.mp4 +2025-09-27T17:03:03.918 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_170242_763.jpg +2025-09-27T17:03:05.176 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_170250_291.jpg +2025-09-27T17:03:06.297 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250927_170257_799.jpg +2025-09-27T17:03:09.693 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=41420, thread=26324) args=(23,0,0,44) +2025-09-27T17:03:09.694 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:03:09.848 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T17:17:49.996 INFO:src.app:Scheduling BLE disconnect +2025-09-27T17:18:13.252 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T17:18:13.253 INFO:src.app:BLE background loop started +2025-09-27T17:18:13.253 INFO:app:BleComm started +2025-09-27T17:18:13.254 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-27T17:18:13.254 INFO:src.app:Scanning for BLE device name 'SP110E-ATA-64' (timeout=5.0s) +2025-09-27T17:18:18.417 INFO:src.app:Found device by name: SP110E-ATA-64 -> E8:06:90:D5:CA:65 +2025-09-27T17:18:18.429 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-27T17:18:21.039 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-27T17:19:41.719 INFO:app:Session started - OnlyGIF +2025-09-27T17:19:41.924 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=51716) args=(5,0,0,44) +2025-09-27T17:19:41.924 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:19:42.086 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:19:42.086 INFO:app:Countdown started - 5 seconds +2025-09-27T17:19:45.950 INFO:app:capture_start event received +2025-09-27T17:19:46.226 INFO:app:File downloaded: 20250927_171946_221.jpg +2025-09-27T17:19:49.362 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=45632) args=(5,0,0,44) +2025-09-27T17:19:49.362 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:19:49.524 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:19:49.524 INFO:app:Countdown started - 5 seconds +2025-09-27T17:19:53.534 INFO:app:capture_start event received +2025-09-27T17:19:53.765 INFO:app:File downloaded: 20250927_171953_763.jpg +2025-09-27T17:19:56.859 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=36876) args=(5,0,0,44) +2025-09-27T17:19:56.861 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:19:57.026 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:19:57.026 INFO:app:Countdown started - 5 seconds +2025-09-27T17:20:01.019 INFO:app:capture_start event received +2025-09-27T17:20:01.194 INFO:app:File downloaded: 20250927_172001_190.jpg +2025-09-27T17:20:04.290 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=6816) args=(5,0,0,44) +2025-09-27T17:20:04.291 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:20:04.464 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:20:04.464 INFO:app:Countdown started - 5 seconds +2025-09-27T17:20:08.474 INFO:app:capture_start event received +2025-09-27T17:20:08.658 INFO:app:File downloaded: 20250927_172008_652.jpg +2025-09-27T17:20:12.182 INFO:app:Processing started... +2025-09-27T17:20:12.487 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=13404) args=(0,0,150,30) +2025-09-27T17:20:12.488 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:20:12.624 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0000961e +2025-09-27T17:20:12.624 INFO:app:Sharing screen Animation +2025-09-27T17:20:13.769 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250927_172012_179.mp4 +2025-09-27T17:20:25.598 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=30840) args=(23,0,0,44) +2025-09-27T17:20:25.599 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:20:25.766 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T17:26:23.762 INFO:app:Session started - PrintAndGIF +2025-09-27T17:26:23.829 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=10300) args=(5,0,0,44) +2025-09-27T17:26:23.830 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:26:23.977 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:26:23.979 INFO:app:Countdown started - 5 seconds +2025-09-27T17:26:25.924 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=21108) args=(23,0,0,44) +2025-09-27T17:26:25.926 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:26:26.014 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T17:26:30.328 INFO:app:Session started - PrintAndGIF +2025-09-27T17:26:30.362 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=55160) args=(5,0,0,44) +2025-09-27T17:26:30.363 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:26:30.512 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-27T17:26:30.513 INFO:app:Countdown started - 5 seconds +2025-09-27T17:26:32.218 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:34 (pid=58800, thread=20148) args=(23,0,0,44) +2025-09-27T17:26:32.220 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-27T17:26:32.373 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-27T17:56:37.500 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-27T17:56:42.511 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:56:42.514 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:56:47.562 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:56:52.567 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:56:52.568 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:56:57.618 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:57:02.620 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:57:02.621 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:57:07.670 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:57:12.681 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:57:12.682 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:57:17.736 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:57:22.749 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:57:22.750 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:57:27.796 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:57:32.811 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:57:32.812 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:57:37.861 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:57:42.868 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:57:42.869 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:57:47.905 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:57:52.912 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:57:52.912 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:57:57.948 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:58:02.962 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:58:02.963 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:58:07.998 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:58:12.999 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:58:13.000 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:58:18.041 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:58:23.057 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:58:23.058 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:58:28.083 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:58:33.095 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:58:33.095 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:58:38.145 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:58:43.153 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:58:43.154 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:58:48.201 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:58:53.201 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:58:53.202 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:58:58.238 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:59:03.242 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:59:03.244 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:59:08.283 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:59:13.292 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:59:13.292 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:59:18.329 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:59:23.337 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:59:23.337 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:59:28.365 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:59:33.372 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:59:33.372 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:59:38.425 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:59:43.430 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:59:43.431 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:59:48.471 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T17:59:53.478 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T17:59:53.479 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T17:59:58.528 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:00:03.543 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:00:03.544 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:00:08.587 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:00:13.588 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:00:13.589 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:00:18.616 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:00:23.626 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:00:23.627 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:00:28.668 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:00:33.678 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:00:33.679 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:00:38.714 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:00:43.723 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:00:43.723 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:00:48.762 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:00:53.775 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:00:53.776 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:00:58.803 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:01:03.809 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:01:03.814 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:01:08.865 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:01:13.880 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:01:13.880 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:01:18.925 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:01:23.935 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:01:23.935 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:01:28.992 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:01:34.007 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:01:34.007 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:01:39.050 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:01:44.057 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:01:44.058 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:01:49.083 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:01:54.095 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:01:54.097 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:01:59.136 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:02:04.152 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:02:04.152 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:02:09.181 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:02:14.188 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:02:14.189 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:02:19.239 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:02:24.248 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:02:24.248 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:02:29.295 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:02:34.304 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:02:34.305 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:02:39.332 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:02:44.336 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:02:44.337 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:02:49.371 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:02:54.383 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:02:54.384 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:02:59.411 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:03:04.413 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:03:04.414 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:03:09.455 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:03:14.460 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:03:14.461 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:03:19.491 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:03:24.499 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:03:24.500 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:03:29.545 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:03:34.552 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:03:34.554 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:03:39.595 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:03:44.600 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:03:44.601 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:03:49.629 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:03:54.641 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:03:54.642 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:03:59.684 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:04:04.700 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:04:04.701 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:04:09.755 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:04:14.763 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:04:14.763 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:04:19.813 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:04:24.817 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:04:24.817 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:04:29.861 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:04:34.865 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:04:34.865 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:04:39.904 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:04:44.910 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:04:44.910 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:04:49.963 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:04:54.977 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:04:54.977 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:05:00.014 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:05:05.024 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:05:05.026 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:05:10.047 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:05:15.062 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:05:15.062 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:05:20.111 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:05:25.114 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:05:25.115 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:05:30.141 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:05:35.152 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:05:35.152 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:05:40.181 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:05:45.185 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:05:45.185 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:05:50.228 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:05:55.239 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:05:55.239 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:06:00.284 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:06:05.296 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:06:05.298 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:06:10.326 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:06:15.337 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:06:15.338 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:06:20.369 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:06:25.374 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:06:25.374 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:06:30.425 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:06:35.439 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:06:35.441 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:06:40.490 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:06:45.493 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:06:45.494 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:06:50.534 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:06:55.548 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:06:55.549 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:07:00.591 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:07:05.606 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:07:05.607 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:07:10.672 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:07:15.675 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:07:15.676 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:07:20.710 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:07:25.725 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:07:25.725 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:07:30.761 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:07:35.769 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:07:35.769 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:07:40.818 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:07:45.831 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:07:45.833 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:07:50.883 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:07:55.883 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:07:55.885 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:08:00.926 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:08:05.930 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:08:05.932 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:08:10.960 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:08:15.977 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:08:15.978 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:08:21.012 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:08:26.029 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:08:26.030 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:08:31.068 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:08:36.074 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:08:36.075 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:08:41.120 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:08:46.123 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:08:46.125 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:08:51.169 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:08:56.170 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:08:56.171 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:09:01.212 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:09:06.227 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:09:06.228 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:09:11.261 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:09:16.265 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:09:16.266 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:09:21.317 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:09:26.322 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:09:26.323 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:09:31.352 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:09:36.367 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:09:36.368 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:09:41.410 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:09:46.416 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:09:46.417 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:09:51.455 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:09:56.467 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:09:56.468 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:10:01.512 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:10:06.530 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:10:06.532 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:10:11.598 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:10:16.611 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:10:16.611 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:10:21.652 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:10:26.655 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:10:26.656 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:10:31.705 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:10:36.717 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:10:36.719 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:10:41.762 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:10:46.774 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:10:46.775 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:10:51.824 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:10:56.834 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:10:56.834 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:11:01.851 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:11:06.854 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:11:06.855 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:11:11.900 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:11:16.904 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:11:16.904 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:11:21.951 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:11:26.959 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:11:26.960 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:11:31.998 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:11:37.012 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:11:37.013 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:11:42.051 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:11:47.053 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:11:47.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:11:52.099 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:11:57.108 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:11:57.109 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:12:02.153 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:12:07.166 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:12:07.166 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:12:12.196 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:12:17.198 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:12:17.199 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:12:22.228 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:12:27.226 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:12:27.226 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:12:32.251 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:12:37.264 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:12:37.265 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:12:42.312 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:12:47.315 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:12:47.318 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:12:52.376 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:12:57.393 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:12:57.395 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:13:02.433 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:13:07.448 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:13:07.449 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:13:12.487 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:13:17.490 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:13:17.491 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:13:22.534 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:13:27.549 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:13:27.550 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:13:32.593 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:13:37.594 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:13:37.595 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:13:42.632 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:13:47.636 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:13:47.636 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:13:52.673 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:13:57.688 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:13:57.689 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:14:02.745 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:14:07.752 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:14:07.752 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:14:12.790 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:14:17.800 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:14:17.800 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:14:22.821 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:14:27.837 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:14:27.838 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:14:32.868 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:14:37.877 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:14:37.877 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:14:42.926 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:14:47.928 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:14:47.928 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:14:52.961 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:14:57.971 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:14:57.971 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:15:03.016 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:15:08.018 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:15:08.018 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:15:13.057 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:15:18.062 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:15:18.063 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:15:23.110 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:15:28.125 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:15:28.126 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:15:33.170 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:15:38.172 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:15:38.172 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:15:43.206 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:15:48.216 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:15:48.217 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:15:53.269 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:15:58.270 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:15:58.271 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:16:03.307 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:16:08.321 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:16:08.323 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:16:13.372 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:16:18.374 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:16:18.375 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:16:23.412 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:16:28.422 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:16:28.423 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:16:33.470 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:16:38.480 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:16:38.481 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:16:43.531 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:16:48.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:16:48.536 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:16:53.582 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:16:58.593 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:16:58.593 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:17:03.630 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:17:08.638 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:17:08.639 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:17:13.684 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:17:18.698 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:17:18.699 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:17:23.730 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:17:28.742 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:17:28.743 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:17:33.766 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:17:38.769 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:17:38.769 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:17:43.809 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:17:48.815 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:17:48.816 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:17:53.850 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:17:58.866 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:17:58.869 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:18:03.924 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:18:08.935 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:18:08.935 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:18:13.977 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:18:18.990 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:18:18.991 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:18:24.037 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:18:29.052 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:18:29.052 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:18:34.075 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:18:39.080 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:18:39.081 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:18:44.128 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:18:49.136 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:18:49.136 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:18:54.174 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:18:59.179 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:18:59.180 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:19:04.209 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:19:09.213 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:19:09.214 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:19:14.246 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:19:19.256 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:19:19.258 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:19:24.306 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:19:29.308 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:19:29.308 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:19:34.356 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:19:39.359 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:19:39.360 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:19:44.394 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:19:49.405 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:19:49.407 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:19:54.461 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:19:59.475 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:19:59.476 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:20:04.520 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:20:09.526 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:20:09.527 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:20:14.567 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:20:19.569 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:20:19.570 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:20:24.630 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:20:29.638 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:20:29.639 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:20:34.686 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:20:39.699 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:20:39.700 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:20:44.735 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:20:49.743 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:20:49.744 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:20:54.782 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:20:59.786 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:20:59.787 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:21:04.824 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:21:09.836 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:21:09.836 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:21:14.880 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:21:19.893 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:21:19.893 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:21:24.936 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:21:29.941 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:21:29.941 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:21:34.992 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:21:40.005 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:21:40.006 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:21:45.034 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:21:50.040 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:21:50.041 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:21:55.060 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:22:00.074 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:22:00.074 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:22:05.123 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:22:10.125 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:22:10.126 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:22:15.166 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:22:20.173 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:22:20.173 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:22:25.202 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:22:30.218 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:22:30.218 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:22:35.274 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:22:40.288 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:22:40.288 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:22:45.322 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:22:50.336 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:22:50.336 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:22:55.364 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:23:00.377 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:23:00.378 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:23:05.409 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:23:10.421 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:23:10.422 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:23:15.471 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:23:20.485 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:23:20.485 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:23:25.530 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:23:30.540 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:23:30.540 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:23:35.576 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:23:40.577 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:23:40.578 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:23:45.636 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:23:50.647 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:23:50.647 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:23:55.692 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:24:00.703 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:24:00.704 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:24:05.744 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:24:10.750 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:24:10.750 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:24:15.799 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:24:20.809 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:24:20.810 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:24:25.862 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:24:30.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:24:30.875 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:24:35.922 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:24:40.931 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:24:40.932 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:24:45.968 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:24:50.976 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:24:50.977 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:24:56.018 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:25:01.018 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:25:01.018 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:25:06.057 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:25:11.069 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:25:11.071 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:25:16.110 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:25:21.118 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:25:21.119 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:25:26.149 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:25:31.157 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:25:31.158 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:25:36.217 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:25:41.222 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:25:41.222 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:25:46.248 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:25:51.261 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:25:51.261 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:25:56.296 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:26:01.307 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:26:01.308 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:26:06.347 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:26:11.350 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:26:11.350 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:26:16.387 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:26:21.399 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:26:21.400 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:26:26.443 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:26:31.447 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:26:31.447 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:26:36.477 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:26:41.483 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:26:41.484 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:26:46.531 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:26:51.533 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:26:51.534 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:26:56.573 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:27:01.576 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:27:01.577 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:27:06.621 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:27:11.628 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:27:11.628 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:27:16.659 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:27:21.667 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:27:21.668 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:27:26.703 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:27:31.713 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:27:31.713 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:27:36.734 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:27:41.738 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:27:41.739 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:27:46.766 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:27:51.782 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:27:51.782 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:27:56.830 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:28:01.836 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:28:01.837 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:28:06.873 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:28:11.888 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:28:11.889 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:28:16.933 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:28:21.937 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:28:21.938 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:28:27.003 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:28:32.003 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:28:32.003 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:28:37.045 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:28:42.055 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:28:42.056 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:28:47.089 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:28:52.104 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:28:52.104 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:28:57.134 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:29:02.145 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:29:02.146 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:29:07.177 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:29:12.181 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:29:12.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:29:17.220 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:29:22.225 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:29:22.226 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:29:27.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:29:32.267 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:29:32.269 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:29:37.322 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:29:42.331 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:29:42.332 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:29:47.365 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:29:52.378 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:29:52.379 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:29:57.411 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:30:02.418 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:30:02.419 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:30:07.444 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:30:12.452 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:30:12.452 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:30:17.503 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:30:22.515 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:30:22.516 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:30:27.553 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:30:32.567 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:30:32.568 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:30:37.614 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:30:42.620 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:30:42.620 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:30:47.670 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:30:52.675 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:30:52.675 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:30:57.696 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:31:02.700 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:31:02.702 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:31:07.750 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:31:12.759 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:31:12.760 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:31:17.789 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:31:22.802 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:31:22.803 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:31:27.842 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:31:32.847 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:31:32.848 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:31:37.902 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:31:42.903 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:31:42.904 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:31:47.949 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:31:52.962 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:31:52.963 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:31:58.005 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:32:03.018 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:32:03.020 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:32:08.052 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:32:13.055 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:32:13.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:32:18.098 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:32:23.107 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:32:23.109 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:32:28.150 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:32:33.164 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:32:33.164 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:32:38.212 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:32:43.218 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:32:43.218 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:32:48.261 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:32:53.262 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:32:53.263 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:32:58.308 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:33:03.319 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:33:03.320 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:33:08.358 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:33:13.368 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:33:13.368 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:33:18.402 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:33:23.418 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:33:23.419 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:33:28.461 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:33:33.477 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:33:33.478 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:33:38.521 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:33:43.525 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:33:43.526 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:33:48.567 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:33:53.578 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:33:53.579 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:33:58.636 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:34:03.638 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:34:03.638 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:34:08.682 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:34:13.688 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:34:13.689 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:34:18.727 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:34:23.739 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:34:23.739 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:34:28.785 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:34:33.788 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:34:33.789 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:34:38.821 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:34:43.825 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:34:43.826 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:34:48.875 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:34:53.890 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:34:53.891 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:34:58.926 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:35:03.938 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:35:03.940 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:35:08.993 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:35:14.005 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:35:14.006 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:35:19.043 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:35:24.048 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:35:24.050 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:35:29.095 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:35:34.098 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:35:34.099 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:35:39.137 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:35:44.141 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:35:44.142 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:35:49.172 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:35:54.188 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:35:54.190 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:35:59.246 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:36:04.253 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:36:04.254 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:36:09.300 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:36:14.309 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:36:14.311 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:36:19.359 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:36:24.365 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:36:24.366 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:36:29.408 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:36:34.415 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:36:34.416 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:36:39.453 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:36:44.466 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:36:44.467 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:36:49.522 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:36:54.530 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:36:54.531 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:36:59.569 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:37:04.580 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:37:04.581 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:37:09.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:37:14.652 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:37:14.654 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:37:19.697 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:37:24.700 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:37:24.701 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:37:29.753 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:37:34.760 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:37:34.761 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:37:39.794 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:37:44.797 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:37:44.798 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:37:49.839 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:37:54.843 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:37:54.844 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:37:59.891 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:38:04.901 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:38:04.903 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:38:09.935 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:38:14.939 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:38:14.941 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:38:19.991 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:38:24.997 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:38:24.997 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:38:30.046 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:38:35.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:38:35.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:38:40.096 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:38:45.110 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:38:45.112 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:38:50.159 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:38:55.175 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:38:55.177 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:39:00.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:39:05.225 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:39:05.226 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:39:10.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:39:15.273 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:39:15.274 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:39:20.314 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:39:25.325 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:39:25.326 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:39:30.371 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:39:35.373 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:39:35.375 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:39:40.423 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:39:45.435 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:39:45.436 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:39:50.478 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:39:55.490 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:39:55.491 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:40:00.533 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:40:05.540 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:40:05.541 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:40:10.572 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:40:15.582 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:40:15.584 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:40:20.628 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:40:25.635 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:40:25.636 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:40:30.683 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:40:35.686 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:40:35.687 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:40:40.729 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:40:45.738 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:40:45.739 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:40:50.784 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:40:55.800 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:40:55.801 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:41:00.852 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:41:05.855 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:41:05.856 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:41:10.895 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:41:15.901 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:41:15.903 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:41:20.931 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:41:25.942 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:41:25.943 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:41:30.973 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:41:35.982 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:41:35.984 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:41:41.032 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:41:46.041 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:41:46.042 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:41:51.082 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:41:56.092 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:41:56.093 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:42:01.128 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:42:06.133 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:42:06.133 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:42:11.172 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:42:16.175 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:42:16.177 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:42:21.231 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:42:26.242 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:42:26.243 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:42:31.282 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:42:36.289 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:42:36.290 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:42:41.331 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:42:46.334 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:42:46.335 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:42:51.377 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:42:56.384 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:42:56.385 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:43:01.424 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:43:06.437 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:43:06.438 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:43:11.482 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:43:16.491 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:43:16.492 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:43:21.524 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:43:26.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:43:26.536 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:43:31.568 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:43:36.582 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:43:36.583 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:43:41.617 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:43:46.626 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:43:46.626 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:43:51.662 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:43:56.667 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:43:56.667 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:44:01.718 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:44:06.729 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:44:06.729 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:44:11.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:44:16.762 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:44:16.762 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:44:21.808 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:44:26.815 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:44:26.816 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:44:31.859 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:44:36.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:44:36.874 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:44:41.919 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:44:46.924 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:44:46.925 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:44:51.978 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:44:56.990 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:44:56.991 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:45:02.028 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:45:07.036 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:45:07.038 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:45:12.086 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:45:17.090 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:45:17.091 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:45:22.132 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:45:27.134 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:45:27.136 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:45:32.162 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:45:37.175 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:45:37.176 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:45:42.218 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:45:47.222 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:45:47.222 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:45:52.256 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:45:57.270 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:45:57.271 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:46:02.303 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:46:07.320 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:46:07.321 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:46:12.377 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:46:17.390 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:46:17.391 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:46:22.445 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:46:27.458 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:46:27.458 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:46:32.490 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:46:37.498 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:46:37.498 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:46:42.545 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:46:47.560 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:46:47.560 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:46:52.579 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:46:57.592 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:46:57.592 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:47:02.641 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:47:07.651 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:47:07.651 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:47:12.696 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:47:17.705 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:47:17.705 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:47:22.749 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:47:27.754 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:47:27.754 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:47:32.788 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:47:37.790 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:47:37.790 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:47:42.831 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:47:47.844 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:47:47.844 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:47:52.882 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:47:57.895 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:47:57.895 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:48:02.943 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:48:07.955 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:48:07.955 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:48:12.997 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:48:18.010 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:48:18.010 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:48:23.051 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:48:28.065 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:48:28.065 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:48:33.110 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:48:38.117 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:48:38.117 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:48:43.139 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:48:48.148 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:48:48.148 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:48:53.172 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:48:58.182 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:48:58.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:49:03.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:49:08.221 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:49:08.222 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:49:13.258 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:49:18.266 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:49:18.266 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:49:23.298 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:49:28.312 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:49:28.313 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:49:33.372 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:49:38.383 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:49:38.384 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:49:43.426 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:49:48.440 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:49:48.440 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:49:53.492 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:49:58.508 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:49:58.509 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:50:03.546 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:50:08.551 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:50:08.551 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:50:13.572 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:50:18.587 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:50:18.589 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:50:23.624 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:50:28.634 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:50:28.634 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:50:33.680 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:50:38.681 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:50:38.682 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:50:43.736 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:50:48.742 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:50:48.743 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:50:53.776 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:50:58.784 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:50:58.785 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:51:03.825 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:51:08.838 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:51:08.839 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:51:13.872 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:51:18.881 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:51:18.882 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:51:23.915 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:51:28.924 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:51:28.924 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:51:33.973 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:51:38.973 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:51:38.974 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:51:44.010 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:51:49.017 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:51:49.018 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:51:54.071 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:51:59.086 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:51:59.087 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:52:04.122 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:52:09.133 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:52:09.134 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:52:14.166 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:52:19.172 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:52:19.172 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:52:24.216 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:52:29.220 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:52:29.221 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:52:34.265 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:52:39.280 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:52:39.281 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:52:44.324 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:52:49.334 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:52:49.334 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:52:54.376 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:52:59.385 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:52:59.386 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:53:04.424 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:53:09.427 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:53:09.428 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:53:14.473 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:53:19.485 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:53:19.486 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:53:24.532 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:53:29.544 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:53:29.545 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:53:34.596 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:53:39.608 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:53:39.609 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:53:44.650 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:53:49.651 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:53:49.652 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:53:54.679 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:53:59.688 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:53:59.689 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:54:04.728 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:54:09.731 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:54:09.732 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:54:14.777 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:54:19.792 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:54:19.793 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:54:24.826 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:54:29.835 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:54:29.836 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:54:34.870 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:54:39.872 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:54:39.873 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:54:44.927 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:54:49.930 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:54:49.930 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:54:54.956 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:54:59.972 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:54:59.972 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:55:05.011 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:55:10.021 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:55:10.021 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:55:15.059 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:55:20.066 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:55:20.067 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:55:25.106 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:55:30.120 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:55:30.120 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:55:35.160 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:55:40.174 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:55:40.174 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:55:45.213 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:55:50.217 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:55:50.218 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:55:55.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:56:00.269 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:56:00.269 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:56:05.291 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:56:10.296 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:56:10.297 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:56:15.339 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:56:20.345 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:56:20.346 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:56:25.392 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:56:30.404 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:56:30.405 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:56:35.459 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:56:40.470 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:56:40.470 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:56:45.523 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:56:50.529 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:56:50.529 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:56:55.590 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:57:00.599 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:57:00.599 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:57:05.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:57:10.639 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:57:10.639 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:57:15.665 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:57:20.677 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:57:20.678 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:57:25.709 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:57:30.712 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:57:30.712 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:57:35.742 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:57:40.747 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:57:40.748 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:57:45.806 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:57:50.822 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:57:50.825 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:57:55.859 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:58:00.861 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:58:00.862 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:58:05.905 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:58:10.919 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:58:10.920 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:58:15.966 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:58:20.976 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:58:20.978 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:58:26.010 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:58:31.015 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:58:31.016 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:58:36.064 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:58:41.079 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:58:41.080 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:58:46.130 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:58:51.141 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:58:51.142 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:58:56.175 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:59:01.190 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:59:01.192 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:59:06.238 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:59:11.248 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:59:11.248 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:59:16.288 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:59:21.302 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:59:21.303 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:59:26.341 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:59:31.347 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:59:31.347 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:59:36.387 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:59:41.397 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:59:41.398 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:59:46.423 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T18:59:51.433 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T18:59:51.434 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T18:59:56.466 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:00:01.469 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:00:01.470 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:00:06.521 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:00:11.529 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:00:11.530 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:00:16.581 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:00:21.589 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:00:21.590 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:00:26.647 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:00:31.652 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:00:31.653 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:00:36.702 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:00:41.714 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:00:41.716 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:00:46.749 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:00:51.764 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:00:51.765 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:00:56.813 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:01:01.824 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:01:01.825 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:01:06.868 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:01:11.881 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:01:11.882 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:01:16.911 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:01:21.913 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:01:21.914 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:01:26.947 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:01:31.962 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:01:31.963 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:01:36.993 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:01:42.009 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:01:42.009 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:01:47.050 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:01:52.067 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:01:52.069 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:01:57.116 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:02:02.128 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:02:02.131 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:02:07.160 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:02:12.164 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:02:12.164 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:02:17.192 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:02:22.201 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:02:22.202 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:02:27.244 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:02:32.246 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:02:32.247 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:02:37.298 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:02:42.310 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:02:42.310 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:02:47.331 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:02:52.334 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:02:52.336 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:02:57.373 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:03:02.376 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:03:02.377 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:03:07.433 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:03:12.440 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:03:12.441 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:03:17.479 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:03:22.489 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:03:22.490 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:03:27.522 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:03:32.535 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:03:32.536 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:03:37.585 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:03:42.585 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:03:42.586 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:03:47.622 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:03:52.634 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:03:52.635 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:03:57.668 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:04:02.680 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:04:02.680 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:04:07.713 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:04:12.714 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:04:12.715 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:04:17.751 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:04:22.759 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:04:22.760 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:04:27.802 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:04:32.815 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:04:32.816 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:04:37.845 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:04:42.848 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:04:42.849 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:04:47.894 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:04:52.909 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:04:52.910 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:04:57.934 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:05:02.949 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:05:02.951 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:05:07.971 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:05:12.972 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:05:12.974 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:05:18.009 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:05:23.018 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:05:23.019 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:05:28.061 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:05:33.074 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:05:33.075 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:05:38.111 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:05:43.127 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:05:43.128 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:05:48.178 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:05:53.192 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:05:53.194 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:05:58.232 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:06:03.249 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:06:03.251 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:06:08.305 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:06:13.305 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:06:13.307 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:06:18.335 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:06:23.338 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:06:23.339 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:06:28.363 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:06:33.365 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:06:33.367 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:06:38.406 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:06:43.412 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:06:43.413 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:06:48.447 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:06:53.460 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:06:53.461 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:06:58.501 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:07:03.514 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:07:03.515 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:07:08.565 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:07:13.572 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:07:13.573 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:07:18.615 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:07:23.624 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:07:23.624 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:07:28.672 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:07:33.683 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:07:33.684 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:07:38.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:07:43.732 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:07:43.732 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:07:48.767 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:07:53.776 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:07:53.777 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:07:58.821 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:08:03.824 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:08:03.825 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:08:08.857 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:08:13.868 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:08:13.870 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:08:18.898 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:08:23.911 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:08:23.911 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:08:28.951 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:08:33.962 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:08:33.962 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:08:39.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:08:44.015 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:08:44.017 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:08:49.063 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:08:54.079 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:08:54.079 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:08:59.122 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:09:04.136 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:09:04.137 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:09:09.173 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:09:14.181 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:09:14.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:09:19.209 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:09:24.214 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:09:24.215 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:09:29.261 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:09:34.267 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:09:34.269 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:09:39.324 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:09:44.324 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:09:44.325 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:09:49.369 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:09:54.383 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:09:54.384 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:09:59.430 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:10:04.442 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:10:04.443 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:10:09.489 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:10:14.505 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:10:14.508 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:10:19.544 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:10:24.553 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:10:24.554 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:10:29.603 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:10:34.613 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:10:34.615 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:10:39.655 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:10:44.661 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:10:44.661 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:10:49.680 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:10:54.692 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:10:54.693 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:10:59.736 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:11:04.745 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:11:04.746 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:11:09.791 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:11:14.794 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:11:14.795 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:11:19.845 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:11:24.860 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:11:24.860 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:11:29.890 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:11:34.903 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:11:34.904 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:11:39.953 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:11:44.967 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:11:44.968 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:11:50.018 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:11:55.030 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:11:55.031 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:12:00.074 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:12:05.079 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:12:05.080 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:12:10.134 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:12:15.142 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:12:15.143 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:12:20.179 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:12:25.184 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:12:25.184 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:12:30.228 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:12:35.241 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:12:35.242 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:12:40.278 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:12:45.281 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:12:45.282 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:12:50.331 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:12:55.333 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:12:55.334 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:13:00.361 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:13:05.369 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:13:05.369 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:13:10.401 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:13:15.411 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:13:15.412 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:13:20.450 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:13:25.458 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:13:25.459 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:13:30.498 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:13:35.502 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:13:35.502 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:13:40.524 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:13:45.537 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:13:45.537 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:13:50.565 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:13:55.579 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:13:55.580 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:14:00.620 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:14:05.636 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:14:05.637 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:14:10.671 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:14:15.673 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:14:15.675 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:14:20.714 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:14:25.724 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:14:25.725 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:14:30.764 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:14:35.766 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:14:35.768 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:14:40.815 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:14:45.829 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:14:45.830 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:14:50.864 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:14:55.869 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:14:55.870 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:15:00.905 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:15:05.915 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:15:05.916 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:15:10.970 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:15:15.978 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:15:15.979 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:15:21.008 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:15:26.023 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:15:26.025 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:15:31.061 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:15:36.070 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:15:36.071 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:15:41.103 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:15:46.109 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:15:46.112 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:15:51.167 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:15:56.179 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:15:56.180 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:16:01.214 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:16:06.217 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:16:06.218 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:16:11.273 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:16:16.286 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:16:16.287 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:16:21.330 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:16:26.336 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:16:26.340 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:16:31.374 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:16:36.388 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:16:36.388 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:16:41.429 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:16:46.431 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:16:46.432 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:16:51.474 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:16:56.487 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:16:56.488 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:17:01.541 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:17:06.546 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:17:06.546 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:17:11.598 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:17:16.610 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:17:16.611 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:17:21.646 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:17:26.656 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:17:26.657 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:17:31.703 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:17:36.716 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:17:36.717 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:17:41.767 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:17:46.773 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:17:46.774 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:17:51.806 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:17:56.819 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:17:56.820 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:18:01.852 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:18:06.855 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:18:06.856 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:18:11.906 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:18:16.913 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:18:16.914 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:18:21.959 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:18:26.966 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:18:26.966 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:18:32.012 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:18:37.022 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:18:37.023 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:18:42.068 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:18:47.083 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:18:47.083 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:18:52.127 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:18:57.142 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:18:57.143 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:19:02.190 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:19:07.196 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:19:07.197 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:19:12.222 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:19:17.238 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:19:17.239 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:19:22.280 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:19:27.290 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:19:27.291 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:19:32.311 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:19:37.320 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:19:37.320 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:19:42.350 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:19:47.355 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:19:47.356 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:19:52.388 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:19:57.400 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:19:57.401 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:20:02.441 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:20:07.442 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:20:07.442 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:20:12.491 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:20:17.499 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:20:17.499 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:20:22.548 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:20:27.558 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:20:27.558 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:20:32.581 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:20:37.582 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:20:37.582 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:20:42.607 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:20:47.615 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:20:47.615 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:20:52.640 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:20:57.646 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:20:57.646 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:21:02.670 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:21:07.678 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:21:07.678 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:21:12.709 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:21:17.724 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:21:17.725 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:21:22.753 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:21:27.758 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:21:27.759 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:21:32.796 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:21:37.804 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:21:37.805 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:21:42.834 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:21:47.847 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:21:47.847 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:21:52.877 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:21:57.886 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:21:57.886 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:22:02.918 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:22:07.929 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:22:07.929 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:22:12.987 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:22:17.995 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:22:17.995 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:22:23.040 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:22:28.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:22:28.054 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:22:33.088 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:22:38.103 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:22:38.104 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:22:43.138 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:22:48.149 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:22:48.151 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:22:53.185 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:22:58.188 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:22:58.189 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:23:03.231 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:23:08.240 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:23:08.240 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:23:13.270 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:23:18.277 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:23:18.277 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:23:23.307 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:23:28.317 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:23:28.318 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:23:33.359 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:23:38.372 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:23:38.373 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:23:43.419 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:23:48.431 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:23:48.432 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:23:53.475 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:23:58.486 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:23:58.487 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:24:03.532 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:24:08.537 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:24:08.538 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:24:13.582 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:24:18.596 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:24:18.596 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:24:23.633 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:24:28.636 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:24:28.637 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:24:33.668 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:24:38.680 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:24:38.681 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:24:43.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:24:48.729 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:24:48.730 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:24:53.761 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:24:58.769 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:24:58.770 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:25:03.810 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:25:08.815 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:25:08.816 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:25:13.864 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:25:18.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:25:18.875 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:25:23.917 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:25:28.928 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:25:28.928 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:25:33.955 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:25:38.959 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:25:38.960 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:25:44.003 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:25:49.012 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:25:49.013 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:25:54.062 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:25:59.065 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:25:59.066 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:26:04.118 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:26:09.133 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:26:09.134 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:26:14.167 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:26:19.169 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:26:19.170 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:26:24.211 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:26:29.224 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:26:29.226 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:26:34.258 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:26:39.267 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:26:39.269 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:26:44.316 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:26:49.325 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:26:49.326 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:26:54.372 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:26:59.374 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:26:59.376 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:27:04.431 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:27:09.436 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:27:09.436 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:27:14.475 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:27:19.481 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:27:19.482 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:27:24.532 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:27:29.538 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:27:29.539 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:27:34.574 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:27:39.588 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:27:39.589 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:27:44.633 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:27:49.639 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:27:49.640 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:27:54.689 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:27:59.698 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:27:59.699 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:28:04.730 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:28:09.744 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:28:09.744 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:28:14.766 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:28:19.777 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:28:19.777 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:28:24.839 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:28:29.845 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:28:29.846 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:28:34.881 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:28:39.896 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:28:39.896 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:28:44.936 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:28:49.943 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:28:49.943 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:28:54.985 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:29:00.000 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:29:00.000 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:29:05.027 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:29:10.033 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:29:10.034 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:29:15.074 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:29:20.075 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:29:20.076 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:29:25.130 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:29:30.133 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:29:30.134 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:29:35.174 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:29:40.181 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:29:40.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:29:45.217 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:29:50.232 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:29:50.232 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:29:55.271 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:30:00.286 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:30:00.287 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:30:05.334 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:30:10.349 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:30:10.350 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:30:15.385 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:30:20.398 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:30:20.399 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:30:25.414 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:30:30.428 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:30:30.428 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:30:35.458 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:30:40.464 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:30:40.464 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:30:45.511 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:30:50.514 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:30:50.515 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:30:55.575 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:31:00.583 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:31:00.584 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:31:05.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:31:10.649 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:31:10.650 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:31:15.679 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:31:20.692 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:31:20.694 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:31:25.739 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:31:30.753 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:31:30.753 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:31:35.795 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:31:40.796 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:31:40.797 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:31:45.842 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:31:50.853 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:31:50.854 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:31:55.882 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:32:00.883 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:32:00.884 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:32:05.920 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:32:10.930 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:32:10.931 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:32:15.969 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:32:20.971 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:32:20.971 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:32:26.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:32:31.012 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:32:31.015 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:32:36.080 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:32:41.093 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:32:41.093 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:32:46.132 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:32:51.138 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:32:51.139 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:32:56.184 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:33:01.191 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:33:01.192 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:33:06.231 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:33:11.247 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:33:11.249 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:33:16.286 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:33:21.297 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:33:21.298 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:33:26.343 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:33:31.347 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:33:31.348 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:33:36.381 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:33:41.388 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:33:41.389 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:33:46.444 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:33:51.457 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:33:51.458 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:33:56.497 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:34:01.498 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:34:01.499 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:34:06.548 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:34:11.552 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:34:11.552 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:34:16.587 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:34:21.594 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:34:21.595 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:34:26.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:34:31.644 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:34:31.644 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:34:36.673 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:34:41.679 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:34:41.679 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:34:46.718 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:34:51.723 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:34:51.724 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:34:56.760 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:35:01.771 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:35:01.772 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:35:06.817 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:35:11.822 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:35:11.823 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:35:16.851 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:35:21.858 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:35:21.861 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:35:26.906 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:35:31.911 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:35:31.911 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:35:36.949 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:35:41.950 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:35:41.951 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:35:47.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:35:52.020 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:35:52.020 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:35:57.058 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:36:02.062 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:36:02.063 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:36:07.104 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:36:12.112 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:36:12.113 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:36:17.156 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:36:22.172 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:36:22.174 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:36:27.216 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:36:32.224 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:36:32.225 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:36:37.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:36:42.277 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:36:42.278 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:36:47.320 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:36:52.329 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:36:52.330 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:36:57.384 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:37:02.392 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:37:02.392 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:37:07.429 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:37:12.434 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:37:12.436 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:37:17.492 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:37:22.504 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:37:22.505 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:37:27.543 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:37:32.551 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:37:32.552 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:37:37.584 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:37:42.590 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:37:42.591 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:37:47.633 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:37:52.638 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:37:52.639 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:37:57.685 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:38:02.692 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:38:02.693 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:38:07.729 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:38:12.733 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:38:12.734 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:38:17.779 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:38:22.779 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:38:22.780 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:38:27.831 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:38:32.835 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:38:32.837 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:38:37.877 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:38:42.883 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:38:42.883 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:38:47.922 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:38:52.927 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:38:52.929 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:38:57.968 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:39:02.978 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:39:02.979 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:39:08.004 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:39:13.009 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:39:13.011 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:39:18.050 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:39:23.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:39:23.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:39:28.091 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:39:33.100 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:39:33.100 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:39:38.151 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:39:43.162 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:39:43.163 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:39:48.210 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:39:53.212 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:39:53.213 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:39:58.241 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:40:03.250 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:40:03.251 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:40:08.284 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:40:13.299 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:40:13.300 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:40:18.341 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:40:23.346 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:40:23.346 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:40:28.404 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:40:33.418 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:40:33.419 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:40:38.473 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:40:43.483 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:40:43.484 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:40:48.522 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:40:53.532 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:40:53.533 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:40:58.571 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:41:03.575 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:41:03.576 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:41:08.637 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:41:13.644 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:41:13.645 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:41:18.684 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:41:23.694 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:41:23.694 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:41:28.754 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:41:33.767 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:41:33.768 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:41:38.817 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:41:43.822 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:41:43.822 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:41:48.870 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:41:53.882 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:41:53.883 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:41:58.924 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:42:03.926 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:42:03.927 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:42:08.972 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:42:13.976 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:42:13.977 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:42:19.014 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:42:24.028 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:42:24.029 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:42:29.092 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:42:34.104 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:42:34.105 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:42:39.134 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:42:44.139 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:42:44.140 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:42:49.189 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:42:54.200 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:42:54.201 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:42:59.248 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:43:04.254 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:43:04.256 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:43:09.307 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:43:14.322 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:43:14.322 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:43:19.365 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:43:24.367 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:43:24.368 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:43:29.431 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:43:34.445 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:43:34.445 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:43:39.486 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:43:44.493 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:43:44.493 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:43:49.538 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:43:54.542 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:43:54.543 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:43:59.582 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:44:04.592 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:44:04.592 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:44:09.637 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:44:14.654 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:44:14.655 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:44:19.694 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:44:24.703 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:44:24.704 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:44:29.757 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:44:34.763 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:44:34.765 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:44:39.803 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:44:44.814 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:44:44.815 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:44:49.845 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:44:54.853 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:44:54.854 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:44:59.891 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:45:04.903 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:45:04.903 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:45:09.944 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:45:14.946 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:45:14.948 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:45:19.985 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:45:24.996 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:45:24.996 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:45:30.023 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:45:35.028 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:45:35.029 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:45:40.061 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:45:45.066 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:45:45.067 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:45:50.109 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:45:55.114 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:45:55.115 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:46:00.150 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:46:05.159 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:46:05.160 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:46:10.195 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:46:15.200 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:46:15.203 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:46:20.248 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:46:25.254 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:46:25.255 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:46:30.298 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:46:35.313 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:46:35.315 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:46:40.357 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:46:45.365 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:46:45.367 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:46:50.406 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:46:55.408 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:46:55.409 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:47:00.457 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:47:05.464 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:47:05.465 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:47:10.499 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:47:15.502 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:47:15.503 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:47:20.539 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:47:25.546 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:47:25.548 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:47:30.598 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:47:35.599 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:47:35.601 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:47:40.633 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:47:45.649 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:47:45.650 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:47:50.680 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:47:55.693 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:47:55.693 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:48:00.738 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:48:05.747 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:48:05.748 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:48:10.788 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:48:15.804 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:48:15.804 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:48:20.843 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:48:25.856 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:48:25.858 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:48:30.901 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:48:35.914 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:48:35.915 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:48:40.947 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:48:45.953 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:48:45.954 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:48:50.999 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:48:56.010 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:48:56.012 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:49:01.037 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:49:06.040 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:49:06.041 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:49:11.071 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:49:16.077 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:49:16.078 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:49:21.112 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:49:26.122 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:49:26.124 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:49:31.165 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:49:36.178 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:49:36.179 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:49:41.222 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:49:46.231 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:49:46.232 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:49:51.260 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:49:56.275 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:49:56.275 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:50:01.316 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:50:06.321 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:50:06.323 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:50:11.374 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:50:16.388 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:50:16.389 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:50:21.430 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:50:26.444 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:50:26.445 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:50:31.489 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:50:36.497 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:50:36.498 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:50:41.531 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:50:46.532 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:50:46.533 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:50:51.563 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:50:56.578 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:50:56.579 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:51:01.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:51:06.631 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:51:06.632 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:51:11.668 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:51:16.670 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:51:16.671 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:51:21.707 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:51:26.717 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:51:26.718 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:51:31.765 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:51:36.779 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:51:36.779 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:51:41.823 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:51:46.832 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:51:46.833 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:51:51.883 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:51:56.888 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:51:56.888 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:52:01.935 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:52:06.936 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:52:06.937 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:52:11.992 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:52:16.995 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:52:16.996 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:52:22.015 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:52:27.017 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:52:27.019 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:52:32.071 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:52:37.085 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:52:37.086 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:52:42.132 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:52:47.142 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:52:47.142 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:52:52.175 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:52:57.180 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:52:57.180 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:53:02.206 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:53:07.215 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:53:07.217 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:53:12.258 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:53:17.270 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:53:17.270 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:53:22.310 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:53:27.317 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:53:27.317 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:53:32.364 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:53:37.370 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:53:37.371 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:53:42.409 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:53:47.420 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:53:47.420 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:53:52.466 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:53:57.475 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:53:57.475 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:54:02.513 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:54:07.515 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:54:07.515 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:54:12.554 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:54:17.562 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:54:17.562 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:54:22.613 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:54:27.626 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:54:27.626 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:54:32.666 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:54:37.670 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:54:37.671 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:54:42.727 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:54:47.734 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:54:47.734 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:54:52.779 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:54:57.792 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:54:57.793 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:55:02.829 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:55:07.833 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:55:07.833 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:55:12.880 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:55:17.888 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:55:17.888 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:55:22.936 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:55:27.942 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:55:27.942 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:55:32.981 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:55:37.986 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:55:37.987 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:55:43.038 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:55:48.053 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:55:48.053 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:55:53.075 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:55:58.076 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:55:58.076 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:56:03.122 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:56:08.128 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:56:08.128 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:56:13.183 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:56:18.196 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:56:18.197 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:56:23.231 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:56:28.243 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:56:28.243 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:56:33.285 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:56:38.287 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:56:38.287 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:56:43.329 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:56:48.336 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:56:48.338 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:56:53.365 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:56:58.371 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:56:58.371 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:57:03.401 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:57:08.416 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:57:08.417 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:57:13.451 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:57:18.459 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:57:18.460 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:57:23.495 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:57:28.502 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:57:28.502 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:57:33.531 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:57:38.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:57:38.537 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:57:43.573 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:57:48.581 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:57:48.583 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:57:53.618 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:57:58.635 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:57:58.635 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:58:03.666 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:58:08.669 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:58:08.670 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:58:13.735 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:58:18.746 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:58:18.748 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:58:23.788 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:58:28.800 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:58:28.803 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:58:33.841 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:58:38.845 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:58:38.846 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:58:43.881 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:58:48.887 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:58:48.888 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:58:53.941 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:58:58.943 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:58:58.943 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:59:03.963 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:59:08.965 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:59:08.965 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:59:14.016 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:59:19.030 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:59:19.031 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:59:24.076 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:59:29.080 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:59:29.080 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:59:34.130 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:59:39.143 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:59:39.145 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:59:44.186 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:59:49.200 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:59:49.202 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T19:59:54.248 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T19:59:59.260 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T19:59:59.260 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:00:04.300 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:00:09.301 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:00:09.301 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:00:14.345 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:00:19.360 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:00:19.361 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:00:24.419 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:00:29.431 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:00:29.432 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:00:34.473 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:00:39.490 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:00:39.490 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:00:44.524 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:00:49.526 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:00:49.526 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:00:54.567 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:00:59.570 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:00:59.571 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:01:04.583 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:01:09.590 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:01:09.590 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:01:14.614 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:01:19.615 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:01:19.617 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:01:24.664 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:01:29.681 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:01:29.683 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:01:34.730 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:01:39.742 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:01:39.742 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:01:44.769 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:01:49.772 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:01:49.773 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:01:54.813 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:01:59.820 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:01:59.821 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:02:04.849 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:02:09.855 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:02:09.855 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:02:14.886 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:02:19.897 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:02:19.898 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:02:24.931 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:02:29.933 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:02:29.933 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:02:34.948 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:02:39.958 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:02:39.960 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:02:44.997 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:02:50.015 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:02:50.015 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:02:55.065 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:03:00.067 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:03:00.067 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:03:05.086 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:03:10.092 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:03:10.093 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:03:15.137 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:03:20.148 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:03:20.148 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:03:25.186 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:03:30.192 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:03:30.192 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:03:35.239 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:03:40.241 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:03:40.242 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:03:45.274 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:03:50.288 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:03:50.288 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:03:55.334 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:04:00.347 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:04:00.347 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:04:05.393 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:04:10.408 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:04:10.409 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:04:15.456 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:04:20.462 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:04:20.463 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:04:25.502 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:04:30.507 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:04:30.508 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:04:35.536 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:04:40.538 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:04:40.539 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:04:45.582 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:04:50.584 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:04:50.585 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:04:55.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:05:00.629 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:05:00.630 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:05:05.658 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:05:10.673 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:05:10.673 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:05:15.723 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:41:53.515 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T20:41:53.560 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T20:41:53.569 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:41:53.571 INFO:src.app:BLE background loop started +2025-09-27T20:41:53.571 INFO:app:BleComm started +2025-09-27T20:41:53.572 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:41:53.572 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:41:58.713 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:42:03.728 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:42:03.729 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:42:08.768 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:42:13.784 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:42:13.784 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:42:18.817 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:42:23.831 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:42:23.832 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:42:28.868 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:42:33.878 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:42:33.878 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:42:38.932 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:42:43.940 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:42:43.941 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:42:48.975 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:42:53.979 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:42:53.981 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:42:59.018 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:43:04.021 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:43:04.022 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:43:09.065 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:47:58.823 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T20:47:58.875 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T20:47:58.886 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:47:58.888 INFO:src.app:BLE background loop started +2025-09-27T20:47:58.888 INFO:app:BleComm started +2025-09-27T20:47:58.889 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:47:58.889 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:48:04.039 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:48:09.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:48:09.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:48:14.091 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:48:19.093 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:48:19.093 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:48:24.136 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:48:29.149 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:48:29.149 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:48:34.182 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:48:39.189 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:48:39.190 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:48:44.237 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:48:49.238 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:48:49.238 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:48:54.282 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:48:59.287 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:48:59.288 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:49:04.334 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:49:09.344 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:49:09.345 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:49:14.372 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:49:19.380 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:49:19.381 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:49:24.438 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:49:29.446 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:49:29.448 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:49:34.493 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:49:39.507 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:49:39.509 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:49:44.567 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:49:49.574 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:49:49.575 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:49:54.620 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:49:59.624 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:49:59.624 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:50:04.676 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:50:09.683 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:50:09.684 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:50:14.706 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:50:19.712 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:50:19.713 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:50:24.739 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:50:29.751 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:50:29.752 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:50:34.776 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:50:39.788 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:50:39.788 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:50:44.823 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:50:49.836 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:50:49.837 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:50:54.872 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:50:59.878 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:50:59.878 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:51:04.924 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:51:09.939 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:51:09.940 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:51:14.987 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:51:19.999 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:51:20.000 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:51:25.044 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:51:30.048 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:51:30.048 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:51:35.102 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:51:40.115 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:51:40.115 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:51:45.158 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:51:50.163 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:51:50.164 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:51:55.198 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:52:00.214 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:52:00.215 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:52:05.244 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:52:10.254 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:52:10.256 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:52:15.293 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:52:20.300 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:52:20.301 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:52:25.342 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:52:30.352 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:52:30.353 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:52:35.388 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:52:40.394 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:52:40.394 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:52:45.448 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:52:50.450 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:52:50.451 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:52:55.493 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:53:00.509 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:53:00.510 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:53:05.547 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:53:10.548 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:53:10.548 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:53:15.602 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:53:20.611 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:53:20.612 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:53:25.667 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:53:30.683 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:53:30.683 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:53:35.715 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:53:40.726 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:53:40.726 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:53:45.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:53:50.759 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:53:50.760 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:53:55.794 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:54:00.802 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:54:00.802 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:54:05.848 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:54:10.859 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:54:10.860 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:54:15.908 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:54:20.910 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:54:20.911 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:54:25.949 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:54:30.957 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:54:30.960 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:54:35.999 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:54:41.012 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:54:41.013 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:54:46.044 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:54:51.060 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:54:51.061 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:54:56.100 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:55:01.117 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:55:01.118 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:55:06.152 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:55:11.164 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:55:11.165 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:55:16.207 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:55:21.217 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:55:21.217 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:55:26.258 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:55:31.271 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:55:31.272 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:55:36.321 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:55:41.330 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:55:41.331 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:55:46.368 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:55:51.379 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:55:51.380 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:55:56.436 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:56:01.446 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:56:01.448 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:56:06.510 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:56:11.526 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:56:11.527 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:56:16.553 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:56:21.561 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:56:21.562 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:56:26.601 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:56:31.616 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:56:31.617 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:56:36.651 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:56:41.659 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:56:41.660 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:56:46.720 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:56:51.726 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:56:51.727 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:56:56.788 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:57:01.804 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:57:01.805 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:57:06.829 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:57:11.844 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:57:11.844 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:57:16.905 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:57:21.919 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:57:21.920 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:57:26.959 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:57:31.972 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:57:31.973 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:57:37.014 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:57:42.024 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:57:42.025 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:57:47.066 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:57:52.069 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:57:52.072 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:57:57.115 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:58:02.125 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:58:02.126 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:58:07.180 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:58:12.187 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:58:12.189 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:58:17.230 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:58:22.238 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:58:22.238 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:58:27.284 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:58:32.288 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:58:32.289 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:58:37.337 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:58:42.343 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:58:42.344 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:58:47.394 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:59:00.492 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T20:59:00.528 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T20:59:00.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:00.537 INFO:src.app:BLE background loop started +2025-09-27T20:59:00.537 INFO:app:BleComm started +2025-09-27T20:59:00.538 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:00.539 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:59:05.690 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:59:10.698 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:10.698 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:59:15.685 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:59:20.689 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:20.689 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:59:25.736 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:59:30.749 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:30.750 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:59:35.799 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:59:40.807 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:40.809 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:59:45.848 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T20:59:50.852 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T20:59:50.854 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T20:59:55.893 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:00:00.896 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:00:00.898 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:00:05.929 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:00:10.944 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:00:10.944 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:00:15.978 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:00:20.988 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:00:20.990 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:00:26.040 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:00:31.055 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:00:31.057 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:00:36.102 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:00:41.114 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:00:41.116 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:00:46.156 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:00:51.169 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:00:51.171 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:00:56.211 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:01:01.214 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:01.214 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:01:06.242 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:01:11.249 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:11.250 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:01:16.282 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:01:21.285 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:21.288 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:01:34.755 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T21:01:34.810 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T21:01:34.821 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:34.822 INFO:src.app:BLE background loop started +2025-09-27T21:01:34.823 INFO:app:BleComm started +2025-09-27T21:01:34.824 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:34.824 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:01:39.934 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:01:44.941 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:44.942 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:01:47.114 INFO:app:BleComm has no scan/discover helper; returning empty list +2025-09-27T21:01:49.966 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:01:54.974 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:01:54.974 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:02:00.012 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:02:02.207 INFO:app:BleComm has no scan/discover helper; returning empty list +2025-09-27T21:02:05.014 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:02:05.015 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:02:08.630 INFO:app:BleComm has no scan/discover helper; returning empty list +2025-09-27T21:02:10.064 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:02:15.066 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:02:15.067 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:02:20.111 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:02:25.128 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:02:25.129 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:02:30.176 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:02:35.181 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:02:35.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:02:40.220 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:02:45.229 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:02:45.230 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:02:50.267 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:02:55.274 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:02:55.275 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:03:00.311 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:03:05.324 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:03:05.326 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:03:10.376 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:03:15.391 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:03:15.391 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:03:20.431 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:03:25.440 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:03:25.440 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:03:30.486 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:03:35.499 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:03:35.500 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:03:40.548 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:03:45.564 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:03:45.565 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:03:50.621 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:03:55.637 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:03:55.637 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:04:16.063 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T21:04:16.096 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T21:04:16.108 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:04:16.109 INFO:src.app:BLE background loop started +2025-09-27T21:04:16.109 INFO:app:BleComm started +2025-09-27T21:04:16.110 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:04:16.110 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:04:21.255 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:04:26.265 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:04:26.267 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:04:31.321 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:04:36.324 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:04:36.325 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:04:41.372 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:04:46.381 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:04:46.381 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:04:51.395 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:04:56.401 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:04:56.402 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:05:01.449 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:05:06.464 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:05:06.465 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:05:11.500 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:05:16.516 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:05:16.516 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:05:21.566 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:05:26.577 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:05:26.578 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:05:31.622 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:05:36.635 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:05:36.636 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:05:41.662 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:05:46.672 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:05:46.673 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:05:51.707 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:05:56.718 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:05:56.719 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:06:01.759 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:06:06.766 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:06:06.767 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:06:11.804 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:06:16.815 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:06:16.815 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:06:21.858 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:06:26.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:06:26.875 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:06:31.917 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:06:36.925 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:06:36.925 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:06:41.940 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:06:46.946 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:06:46.947 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:06:51.986 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:06:56.995 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:06:56.996 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:07:02.037 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:07:07.045 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:07:07.046 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:07:12.098 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:07:13.549 INFO:app:BleComm has no scan/discover helper; returning empty list +2025-09-27T21:07:17.114 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:07:17.115 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:07:22.164 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:07:27.165 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:07:27.166 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:07:30.841 INFO:app:BleComm has no scan/discover helper; returning empty list +2025-09-27T21:07:32.200 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:07:37.215 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:07:37.215 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:07:42.245 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:07:47.252 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:07:47.254 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:07:52.304 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:07:57.305 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:07:57.307 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:08:02.336 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:08:07.351 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:08:07.351 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:08:12.399 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:08:17.405 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:08:17.405 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:08:22.449 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:08:27.459 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:08:27.461 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:08:32.509 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:08:37.512 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:08:37.513 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:08:42.550 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:08:47.564 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:08:47.565 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:08:52.599 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:08:57.603 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:08:57.603 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:09:02.645 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:09:07.660 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:09:07.661 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:09:12.697 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:09:17.707 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:09:17.708 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:09:22.764 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:09:27.776 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:09:27.776 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:09:32.801 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:09:37.803 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:09:37.804 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:09:42.833 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:09:47.844 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:09:47.845 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:09:52.877 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:09:57.894 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:09:57.894 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:10:02.939 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:10:07.946 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:10:07.947 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:10:12.953 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:10:24.405 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T21:10:24.451 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T21:10:24.468 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:10:24.470 INFO:src.app:BLE background loop started +2025-09-27T21:10:24.470 INFO:app:BleComm started +2025-09-27T21:10:24.471 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:10:24.472 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:10:29.709 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:10:34.724 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:10:34.725 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:10:39.779 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:10:44.784 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:10:44.785 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:10:49.839 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:10:54.845 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:10:54.845 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:10:59.882 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:11:04.892 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:11:04.892 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:11:09.931 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:11:14.935 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:11:14.937 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:11:19.970 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:11:24.980 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:11:24.980 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:11:30.028 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:11:35.031 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:11:35.032 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:11:40.075 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:11:45.086 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:11:45.086 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:11:50.124 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:11:55.127 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:11:55.128 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:12:00.162 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:12:05.176 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:12:05.176 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:12:10.217 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:12:15.223 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:12:15.224 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:12:20.270 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:12:25.274 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:12:25.274 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:12:30.282 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:12:35.292 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:12:35.292 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:12:40.326 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:12:45.330 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:12:45.330 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:12:50.354 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:12:55.357 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:12:55.358 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:13:00.408 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:13:05.419 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:13:05.420 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:13:10.463 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:13:15.478 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:13:15.478 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:13:20.503 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:13:25.514 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:13:25.515 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:13:30.561 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:13:35.564 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:13:35.565 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:13:40.601 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:13:45.613 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:13:45.614 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:13:50.663 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:13:55.668 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:13:55.668 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:14:00.697 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:14:05.711 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:14:05.712 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:14:10.743 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:14:15.748 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:14:15.749 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:14:20.797 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:14:25.806 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:14:25.806 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:14:30.841 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:14:35.847 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:14:35.848 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:14:40.884 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:14:45.894 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:14:45.895 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:14:47.326 INFO:src.app:disconnect: no client present +2025-09-27T21:14:50.223 INFO:src.app:disconnect: no client present +2025-09-27T21:14:50.937 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:14:52.450 INFO:src.app:disconnect: no client present +2025-09-27T21:14:55.952 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:14:55.952 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:15:00.992 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:15:05.993 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:15:05.994 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:15:11.022 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:15:16.034 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:15:16.035 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:15:21.071 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:15:26.079 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:15:26.079 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:15:31.117 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:15:36.129 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:15:36.130 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:15:41.172 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:15:46.180 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:15:46.180 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:15:51.223 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:15:56.238 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:15:56.239 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:16:01.282 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:16:06.283 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:16:06.284 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:16:11.327 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:16:16.338 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:16:16.338 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:16:21.376 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:16:26.385 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:16:26.386 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:16:31.424 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:16:36.434 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:16:36.434 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:16:41.478 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:16:46.490 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:16:46.491 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:16:51.528 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:16:56.537 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:16:56.538 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:17:01.583 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:17:06.596 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:17:06.597 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:17:11.644 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:17:16.649 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:17:16.650 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:17:21.679 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:17:26.687 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:17:26.688 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:17:31.731 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:17:36.740 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:17:36.741 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:17:41.766 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:17:46.779 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:17:46.780 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:17:51.836 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:17:56.841 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:17:56.841 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:18:01.885 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:18:06.899 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:18:06.900 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:18:11.944 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:18:16.952 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:18:16.953 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:18:21.996 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:18:27.010 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:18:27.011 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:18:32.041 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:18:37.053 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:18:37.054 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:18:42.088 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:18:47.092 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:18:47.093 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:18:52.154 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:18:57.164 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:18:57.166 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:19:02.213 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:19:07.224 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:19:07.224 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:19:12.255 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:19:17.257 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:19:17.258 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:19:22.294 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:19:27.296 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:19:27.297 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:19:32.340 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:19:37.357 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:19:37.358 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:19:42.387 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:19:47.401 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:19:47.402 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:19:52.434 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:19:57.436 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:19:57.437 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:20:02.471 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:20:07.473 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:20:07.474 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:20:12.511 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:20:17.528 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:20:17.529 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:20:22.575 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:20:27.585 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:20:27.585 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:20:32.629 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:20:37.635 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:20:37.635 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:20:42.653 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:20:47.666 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:20:47.666 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:20:52.703 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:20:57.714 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:20:57.715 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:21:02.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:21:07.759 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:21:07.759 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:21:12.802 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:21:17.813 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:21:17.813 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:21:22.851 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:21:27.861 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:21:27.861 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:21:32.895 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:21:37.910 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:21:37.910 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:21:42.957 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:21:47.962 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:21:47.962 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:21:53.000 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:21:58.009 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:21:58.009 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:22:03.040 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:22:08.047 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:22:08.047 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:22:13.077 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:22:18.085 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:22:18.085 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:22:23.106 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:22:28.121 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:22:28.122 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:22:33.177 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:22:38.181 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:22:38.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:22:43.225 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:22:48.230 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:22:48.231 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:22:53.274 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:22:58.279 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:22:58.279 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:23:03.332 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:23:08.335 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:23:08.336 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:23:13.374 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:23:18.379 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:23:18.381 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:23:23.423 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:23:28.436 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:23:28.437 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:23:33.489 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:23:38.490 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:23:38.491 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:23:43.519 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:23:48.534 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:23:48.535 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:23:53.573 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:23:58.579 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:23:58.579 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:24:03.629 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:24:08.630 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:24:08.631 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:24:13.672 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:24:18.676 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:24:18.677 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:24:23.718 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:24:28.731 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:24:28.732 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:24:33.781 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:24:38.796 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:24:38.797 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:24:43.847 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:24:48.853 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:24:48.854 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:24:53.895 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:24:58.908 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:24:58.909 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:25:03.962 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:25:08.972 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:25:08.974 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:25:14.015 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:25:19.027 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:25:19.028 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:25:24.070 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:25:29.077 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:25:29.078 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:25:34.133 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:25:39.142 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:25:39.143 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:25:44.179 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:25:49.189 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:25:49.190 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:25:54.236 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:25:59.244 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:25:59.245 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:26:04.274 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:26:09.286 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:26:09.286 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:26:14.324 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:26:19.329 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:26:19.329 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:26:24.348 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:26:29.348 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:26:29.349 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:26:34.395 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:26:39.407 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:26:39.408 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:26:44.460 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:26:49.469 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:26:49.469 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:26:54.526 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:26:59.541 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:26:59.542 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:27:04.575 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:27:09.579 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:27:09.580 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:27:14.616 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:27:19.623 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:27:19.624 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:27:24.662 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:27:29.678 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:27:29.679 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:27:34.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:27:39.722 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:27:39.722 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:27:44.757 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:27:49.772 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:27:49.772 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:27:54.793 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:27:59.808 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:27:59.809 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:28:04.849 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:28:09.860 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:28:09.861 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:28:14.891 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:28:19.903 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:28:19.903 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:28:24.947 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:28:29.959 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:28:29.960 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:28:35.006 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:28:40.011 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:28:40.011 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:28:45.041 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:28:50.047 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:28:50.048 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:28:55.088 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:29:00.094 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:29:00.094 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:29:05.126 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:29:10.140 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:29:10.141 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:29:15.185 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:29:20.196 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:29:20.197 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:29:25.235 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:29:30.238 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:29:30.238 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:29:35.275 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:29:40.276 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:29:40.277 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:29:45.303 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:29:50.317 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:29:50.318 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:29:55.365 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:30:00.369 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:30:00.369 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:30:05.390 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:30:10.403 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:30:10.403 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:30:15.459 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:30:20.463 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:30:20.463 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:30:25.489 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:30:30.502 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:30:30.502 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:30:35.553 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:30:40.564 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:30:40.565 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:30:45.601 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:30:50.604 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:30:50.604 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:30:55.638 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:31:00.642 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:31:00.642 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:31:05.690 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:31:10.692 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:31:10.692 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:31:15.721 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:31:20.730 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:31:20.730 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:31:25.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:31:30.750 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:31:30.751 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:31:35.782 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:31:40.785 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:31:40.786 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:31:45.837 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:31:50.840 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:31:50.841 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:31:55.882 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:32:00.899 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:32:00.901 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:32:05.926 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:32:10.931 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:32:10.931 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:32:15.962 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:32:20.965 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:32:20.966 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:32:25.995 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:32:31.000 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:32:31.000 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:32:36.046 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:32:41.055 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:32:41.056 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:32:46.090 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:32:51.102 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:32:51.103 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:32:56.141 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:33:01.144 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:33:01.145 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:33:06.176 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:33:11.182 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:33:11.184 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:33:16.217 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:33:21.225 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:33:21.227 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:33:26.274 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:33:31.279 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:33:31.281 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:33:36.325 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:33:41.329 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:33:41.330 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:33:46.366 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:33:51.376 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:33:51.378 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:33:56.426 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:34:01.441 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:34:01.443 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:34:06.475 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:34:11.479 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:34:11.480 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:34:16.511 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:34:21.516 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:34:21.518 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:34:26.565 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:34:31.570 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:34:31.571 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:34:36.604 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:34:41.610 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:34:41.611 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:34:46.638 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:34:51.649 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:34:51.649 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:34:56.696 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:35:01.700 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:35:01.701 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:35:06.747 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:35:11.752 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:35:11.753 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:35:16.798 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:35:21.812 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:35:21.813 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:35:26.866 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:35:31.879 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:35:31.881 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:35:36.921 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:35:41.938 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:35:41.939 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:35:46.985 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:35:51.986 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:35:51.987 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:35:57.030 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:36:02.045 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:36:02.047 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:36:07.093 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:36:12.099 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:36:12.101 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:36:17.127 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:36:22.139 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:36:22.141 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:36:27.179 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:36:32.197 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:36:32.198 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:36:37.233 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:36:42.241 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:36:42.242 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:36:47.267 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:36:52.278 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:36:52.280 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:36:57.314 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:37:02.322 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:37:02.323 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:37:07.350 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:37:12.355 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:37:12.355 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:37:17.383 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:37:22.393 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:37:22.395 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:37:27.433 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:37:32.437 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:37:32.438 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:37:37.482 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:37:42.496 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:37:42.497 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:37:47.517 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:37:52.528 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:37:52.528 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:37:57.578 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:38:02.595 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:38:02.596 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:38:07.629 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:38:12.644 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:38:12.645 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:38:17.679 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:38:22.689 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:38:22.689 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:38:27.733 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:38:32.742 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:38:32.743 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:38:37.773 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:38:42.787 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:38:42.788 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:38:47.818 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:38:52.829 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:38:52.830 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:38:57.868 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:39:02.876 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:39:02.878 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:39:07.919 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:39:12.935 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:39:12.935 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:39:17.988 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:39:22.999 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:39:23.002 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:39:28.066 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:39:33.079 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:39:33.079 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:39:38.119 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:39:43.132 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:39:43.133 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:39:48.182 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:39:53.184 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:39:53.185 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:39:58.223 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:40:03.237 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:40:03.238 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:40:08.277 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:40:13.282 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:40:13.282 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:40:18.303 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:40:23.307 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:40:23.308 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:40:28.342 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:40:33.347 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:40:33.347 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:40:38.396 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:40:43.400 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:40:43.400 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:40:48.446 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:40:53.460 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:40:53.460 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:40:58.497 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:41:03.502 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:41:03.503 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:41:08.544 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:41:13.552 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:41:13.553 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:41:18.586 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:41:23.600 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:41:23.600 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:41:28.630 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:41:33.633 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:41:33.635 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:41:38.673 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:41:43.688 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:41:43.688 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:41:48.744 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:41:53.753 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:41:53.753 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:41:58.766 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:42:03.777 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:42:03.778 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:42:08.826 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:42:13.830 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:42:13.831 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:42:18.866 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:42:23.876 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:42:23.877 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:42:28.914 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:42:33.926 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:42:33.926 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:42:38.968 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:42:43.971 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:42:43.972 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:42:49.010 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:42:54.013 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:42:54.013 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:42:59.069 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:43:04.074 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:43:04.075 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:43:09.106 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:43:14.115 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:43:14.116 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:43:19.156 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:43:24.164 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:43:24.165 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:43:29.205 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:43:34.218 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:43:34.219 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:43:39.261 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:43:44.264 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:43:44.265 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:43:49.301 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:43:54.306 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:43:54.307 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:43:59.341 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:44:04.351 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:44:04.351 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:44:09.396 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:44:14.407 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:44:14.408 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:44:19.460 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:44:24.465 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:44:24.467 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:44:29.495 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:44:34.512 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:44:34.513 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:44:39.561 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:44:44.566 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:44:44.567 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:44:49.612 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:44:54.621 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:44:54.622 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:44:59.669 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:45:04.673 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:45:04.674 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:45:09.711 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:45:14.715 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:45:14.716 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:45:19.768 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:45:24.779 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:45:24.780 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:45:29.826 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:45:34.838 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:45:34.838 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:45:39.877 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:45:44.889 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:45:44.890 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:45:49.945 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:45:54.950 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:45:54.950 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:45:59.985 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:46:04.994 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:46:04.995 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:46:10.019 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:46:15.023 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:46:15.024 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:46:20.061 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:46:25.062 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:46:25.063 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:46:30.111 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:46:35.116 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:46:35.116 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:46:40.157 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:46:45.166 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:46:45.166 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:46:50.197 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:46:55.201 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:46:55.201 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:47:00.253 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:47:05.259 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:47:05.260 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:47:10.296 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:47:15.297 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:47:15.297 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:47:20.349 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:47:25.355 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:47:25.356 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:47:30.405 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:47:35.415 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:47:35.415 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:47:40.456 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:47:45.459 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:47:45.459 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:47:50.495 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:47:55.495 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:47:55.495 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:48:00.526 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:48:05.539 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:48:05.540 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:48:10.578 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:48:15.582 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:48:15.582 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:48:20.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:48:25.638 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:48:25.640 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:48:30.681 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:48:35.683 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:48:35.683 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:48:40.702 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:48:45.709 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:48:45.710 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:48:50.774 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:48:55.789 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:48:55.790 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:49:00.837 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:49:05.852 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:49:05.853 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:49:10.895 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:49:15.902 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:49:15.903 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:49:20.933 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:49:25.938 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:49:25.938 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:49:30.989 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:49:36.004 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:49:36.004 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:49:41.049 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:49:46.063 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:49:46.064 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:49:51.118 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:49:56.131 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:49:56.132 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:50:01.177 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:50:06.187 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:50:06.188 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:50:11.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:50:16.220 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:50:16.221 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:50:21.261 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:50:26.268 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:50:26.270 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:50:31.314 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:50:36.314 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:50:36.315 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:50:41.344 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:50:46.350 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:50:46.351 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:50:51.396 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:50:56.411 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:50:56.412 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:51:01.454 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:51:06.463 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:51:06.465 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:51:11.504 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:51:16.506 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:51:16.507 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:51:21.548 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:51:26.561 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:51:26.562 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:51:31.611 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:51:36.614 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:51:36.615 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:51:41.653 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:51:46.665 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:51:46.665 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:51:51.708 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:51:56.718 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:51:56.720 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:52:01.770 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:52:06.783 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:52:06.784 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:52:11.839 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:52:16.852 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:52:16.853 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:52:21.900 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:52:26.916 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:52:26.917 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:52:31.954 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:52:36.967 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:52:36.969 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:52:42.012 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:52:47.022 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:52:47.023 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:52:52.073 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:52:57.085 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:52:57.086 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:53:02.120 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:53:07.125 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:53:07.125 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:53:12.170 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:53:17.181 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:53:17.182 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:53:22.224 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:53:27.229 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:53:27.231 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:53:32.281 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:53:37.282 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:53:37.283 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:53:42.332 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:53:47.334 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:53:47.335 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:53:52.379 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:53:57.391 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:53:57.391 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:54:02.453 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:54:07.467 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:54:07.468 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:54:12.517 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:54:17.522 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:54:17.522 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:54:22.555 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:54:27.563 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:54:27.563 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:54:32.617 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:54:37.620 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:54:37.621 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:54:42.655 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:54:47.659 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:54:47.659 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:54:52.682 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:54:57.696 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:54:57.696 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:55:02.740 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:55:07.751 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:55:07.752 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:55:12.800 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:55:17.811 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:55:17.811 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:55:22.859 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:55:27.869 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:55:27.870 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:55:32.907 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:55:37.915 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:55:37.915 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:55:42.931 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:55:47.941 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:55:47.941 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:55:52.942 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:55:57.955 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:55:57.955 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:56:03.000 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:56:08.007 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:56:08.008 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:56:13.052 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:56:18.061 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:56:18.062 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:56:23.105 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:56:28.120 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:56:28.120 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:56:33.164 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:56:38.166 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:56:38.166 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:56:43.197 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:56:48.212 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:56:48.213 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:56:53.239 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:56:58.252 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:56:58.253 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:57:03.286 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:57:08.291 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:57:08.292 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:57:13.316 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:57:18.318 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:57:18.319 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:57:23.373 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:57:28.376 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:57:28.376 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:57:33.422 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:57:38.431 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:57:38.431 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:57:43.461 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:57:48.467 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:57:48.468 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:57:53.526 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:57:58.531 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:57:58.531 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:58:03.572 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:58:08.575 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:58:08.575 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:58:13.643 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:58:18.652 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:58:18.652 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:58:23.698 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:58:28.711 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:58:28.713 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:58:33.753 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:58:38.757 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:58:38.757 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:58:43.801 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:58:48.804 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:58:48.805 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:58:53.835 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:58:58.838 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:58:58.839 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:59:03.881 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:59:08.896 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:59:08.896 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:59:13.950 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:59:18.957 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:59:18.957 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:59:24.001 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:59:29.007 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:59:29.007 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:59:34.052 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:59:39.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:59:39.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:59:44.080 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:59:49.090 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:59:49.091 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T21:59:54.138 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T21:59:59.152 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T21:59:59.153 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:00:04.203 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:00:09.207 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:00:09.208 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:00:14.251 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:00:19.266 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:00:19.267 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:00:24.314 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:00:29.327 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:00:29.329 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:00:34.373 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:00:39.387 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:00:39.389 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:00:44.422 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:00:49.424 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:00:49.426 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:00:54.472 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:00:59.487 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:00:59.488 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:01:04.531 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:01:09.534 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:01:09.535 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:01:14.578 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:01:19.581 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:01:19.582 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:01:24.628 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:01:29.632 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:01:29.633 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:01:34.657 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:01:39.665 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:01:39.666 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:01:44.698 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:01:49.702 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:01:49.702 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:01:54.755 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:01:59.767 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:01:59.768 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:02:04.813 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:02:09.821 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:02:09.821 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:02:14.866 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:02:19.880 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:02:19.881 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:02:24.919 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:02:29.934 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:02:29.934 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:02:34.983 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:02:39.989 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:02:39.989 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:02:45.025 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:02:50.039 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:02:50.039 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:02:55.060 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:03:00.073 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:03:00.073 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:03:05.117 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:03:10.121 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:03:10.121 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:03:15.153 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:03:20.158 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:03:20.159 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:03:25.208 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:03:30.219 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:03:30.221 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:03:35.267 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:03:40.283 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:03:40.283 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:03:45.300 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:03:50.308 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:03:50.308 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:03:55.333 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:04:00.339 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:04:00.339 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:04:05.363 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:04:10.369 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:04:10.370 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:04:15.406 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:04:20.421 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:04:20.422 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:04:25.458 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:04:30.470 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:04:30.470 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:04:35.517 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:04:40.533 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:04:40.534 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:04:45.585 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:04:50.586 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:04:50.587 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:04:55.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:05:00.653 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:05:00.654 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:05:05.689 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:05:10.705 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:05:10.705 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:05:15.735 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:05:20.738 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:05:20.738 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:05:25.770 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:05:30.784 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:05:30.785 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:05:35.832 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:05:40.846 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:05:40.848 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:05:45.891 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:05:50.905 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:05:50.905 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:05:55.955 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:06:00.964 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:06:00.965 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:06:06.002 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:06:11.018 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:06:11.019 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:06:16.060 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:06:21.064 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:06:21.065 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:06:26.117 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:06:31.131 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:06:31.132 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:06:36.164 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:06:41.166 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:06:41.167 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:06:46.207 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:06:51.214 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:06:51.215 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:06:56.248 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:07:01.259 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:07:01.260 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:07:06.304 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:07:11.321 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:07:11.322 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:07:16.353 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:07:21.358 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:07:21.359 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:07:26.423 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:07:31.439 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:07:31.440 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:07:36.483 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:07:41.488 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:07:41.489 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:07:46.528 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:07:51.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:07:51.536 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:07:56.590 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:08:01.602 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:08:01.603 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:08:06.634 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:08:11.640 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:08:11.640 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:08:16.702 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:08:21.705 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:08:21.706 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:08:26.755 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:08:31.757 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:08:31.759 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:08:36.800 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:08:41.813 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:08:41.814 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:08:46.855 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:08:51.869 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:08:51.870 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:08:56.899 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:09:01.901 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:09:01.902 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:09:06.936 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:09:11.952 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:09:11.952 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:09:17.008 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:09:22.009 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:09:22.010 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:09:27.054 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:09:32.061 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:09:32.062 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:09:37.105 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:09:42.107 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:09:42.108 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:09:47.155 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:09:52.156 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:09:52.156 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:09:57.191 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:10:02.199 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:10:02.199 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:10:07.247 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:10:12.251 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:10:12.252 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:10:17.307 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:10:22.310 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:10:22.311 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:10:27.332 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:10:32.342 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:10:32.342 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:10:37.385 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:10:42.393 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:10:42.394 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:10:47.431 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:10:52.444 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:10:52.445 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:10:57.479 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:11:02.486 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:11:02.487 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:11:07.520 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:11:12.521 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:11:12.521 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:11:17.555 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:11:22.569 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:11:22.570 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:11:27.606 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:11:32.609 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:11:32.610 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:11:37.654 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:11:42.660 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:11:42.661 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:11:47.696 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:11:52.710 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:11:52.711 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:11:57.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:12:02.763 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:12:02.764 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:12:07.810 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:12:12.813 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:12:12.813 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:12:17.846 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:12:22.850 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:12:22.851 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:12:27.879 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:12:32.880 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:12:32.880 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:12:37.920 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:12:42.925 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:12:42.926 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:12:47.975 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:12:52.985 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:12:52.986 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:12:58.038 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:13:03.045 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:13:03.046 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:13:08.084 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:13:13.095 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:13:13.096 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:13:18.131 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:13:23.134 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:13:23.136 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:13:28.174 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:13:33.178 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:13:33.178 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:13:38.224 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:13:43.227 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:13:43.228 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:13:48.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:13:53.268 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:13:53.268 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:13:58.317 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:14:03.329 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:14:03.330 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:14:08.370 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:14:13.385 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:14:13.386 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:14:18.420 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:14:23.428 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:14:23.429 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:14:28.477 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:14:33.487 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:14:33.488 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:14:38.528 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:14:43.538 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:14:43.539 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:14:48.577 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:14:53.586 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:14:53.587 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:14:58.625 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:15:03.637 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:15:03.638 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:15:08.682 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:15:13.697 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:15:13.698 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:15:18.733 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:15:23.737 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:15:23.738 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:15:28.783 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:15:33.792 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:15:33.793 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:15:38.827 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:15:43.829 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:15:43.829 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:15:48.863 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:15:53.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:15:53.875 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:15:58.918 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:16:03.928 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:16:03.929 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:16:08.966 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:16:13.979 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:16:13.980 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:16:19.019 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:16:24.022 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:16:24.022 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:16:29.062 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:16:34.078 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:16:34.079 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:16:39.132 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:16:44.142 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:16:44.143 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:16:49.180 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:16:54.191 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:16:54.192 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:16:59.234 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:17:04.240 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:17:04.241 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:17:09.285 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:17:14.286 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:17:14.287 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:17:19.328 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:17:24.332 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:17:24.334 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:17:29.367 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:17:34.373 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:17:34.374 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:17:39.420 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:17:44.429 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:17:44.430 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:17:49.475 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:17:54.479 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:17:54.480 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:17:59.514 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:18:04.515 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:18:04.515 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:18:09.561 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:18:14.562 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:18:14.563 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:18:19.609 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:18:24.616 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:18:24.617 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:18:29.656 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:18:34.660 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:18:34.661 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:18:39.702 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:18:44.707 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:18:44.708 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:18:49.744 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:18:54.760 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:18:54.761 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:18:59.785 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:19:04.800 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:19:04.801 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:19:09.845 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:19:14.851 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:19:14.853 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:19:19.894 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:19:24.901 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:19:24.902 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:19:29.939 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:19:34.948 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:19:34.950 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:19:39.983 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:19:44.987 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:19:44.988 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:19:50.044 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:19:55.056 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:19:55.057 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:20:00.111 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:20:05.125 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:20:05.126 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:20:10.164 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:20:15.172 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:20:15.173 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:20:20.212 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:20:25.227 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:20:25.228 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:20:30.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:20:35.271 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:20:35.272 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:20:40.302 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:20:45.309 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:20:45.310 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:20:50.355 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:20:55.362 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:20:55.362 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:21:00.403 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:21:05.403 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:21:05.404 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:21:10.451 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:21:15.459 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:21:15.460 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:21:20.491 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:21:25.506 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:21:25.506 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:21:30.544 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:21:35.553 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:21:35.554 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:21:40.593 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:21:45.593 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:21:45.593 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:21:50.648 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:21:55.661 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:21:55.662 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:22:00.693 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:22:05.708 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:22:05.709 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:22:10.764 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:22:15.766 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:22:15.766 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:22:20.801 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:22:25.808 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:22:25.809 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:22:30.836 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:22:35.837 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:22:35.839 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:22:40.869 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:22:45.873 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:22:45.874 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:22:50.917 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:22:55.933 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:22:55.934 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:23:00.968 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:23:05.979 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:23:05.979 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:23:11.024 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:23:16.039 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:23:16.040 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:23:21.066 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:23:26.070 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:23:26.071 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:23:31.103 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:23:36.115 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:23:36.115 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:23:41.167 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:23:46.174 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:23:46.174 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:23:51.233 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:23:56.243 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:23:56.244 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:24:01.275 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:24:06.285 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:24:06.286 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:24:11.324 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:24:16.331 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:24:16.332 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:24:21.374 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:24:26.388 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:24:26.389 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:24:31.424 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:24:36.429 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:24:36.430 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:24:41.471 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:24:46.482 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:24:46.483 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:24:51.533 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:24:56.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:24:56.536 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:25:01.572 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:25:06.588 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:25:06.589 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:25:11.623 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:25:16.634 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:25:16.634 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:25:21.680 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:25:26.685 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:25:26.686 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:25:31.731 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:25:36.745 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:25:36.745 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:25:41.783 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:25:46.787 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:25:46.788 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:25:51.827 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:25:56.828 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:25:56.829 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:26:01.863 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:26:06.870 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:26:06.870 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:26:11.888 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:26:16.898 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:26:16.899 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:26:21.928 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:26:26.934 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:26:26.935 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:26:31.979 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:26:36.991 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:26:36.992 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:26:42.029 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:26:47.031 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:26:47.031 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:26:52.076 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:26:57.091 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:26:57.092 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:27:02.143 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:27:07.159 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:27:07.160 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:27:12.198 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:27:17.207 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:27:17.209 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:27:22.260 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:27:27.262 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:27:27.263 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:27:32.303 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:27:37.316 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:27:37.316 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:27:42.356 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:27:47.359 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:27:47.359 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:27:52.412 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:27:57.419 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:27:57.419 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:28:02.459 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:28:07.472 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:28:07.472 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:28:12.517 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:28:17.527 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:28:17.528 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:28:22.566 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:28:27.568 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:28:27.568 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:28:32.590 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:28:37.597 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:28:37.597 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:28:42.632 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:28:47.645 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:28:47.645 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:28:52.669 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:28:57.684 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:28:57.685 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:29:02.723 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:29:07.727 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:29:07.727 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:29:12.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:29:17.755 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:29:17.755 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:29:22.787 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:29:27.801 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:29:27.801 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:29:32.828 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:29:37.839 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:29:37.839 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:29:42.860 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:29:47.871 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:29:47.871 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:29:52.939 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:29:57.947 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:29:57.947 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:30:02.987 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:30:07.997 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:30:07.998 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:30:13.043 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:30:18.050 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:30:18.050 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:30:23.068 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:30:28.071 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:30:28.071 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:30:33.121 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:30:38.130 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:30:38.131 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:30:43.159 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:30:48.170 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:30:48.171 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:30:53.209 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:30:58.220 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:30:58.221 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:31:03.266 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:31:08.277 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:31:08.278 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:31:13.309 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:31:18.318 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:31:18.318 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:31:23.345 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:31:28.356 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:31:28.356 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:31:33.407 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:31:38.412 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:31:38.413 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:31:43.458 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:31:48.474 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:31:48.475 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:31:53.517 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:31:58.525 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:31:58.525 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:32:03.540 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:32:08.556 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:32:08.558 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:32:13.584 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:32:18.598 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:32:18.599 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:32:23.638 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:32:28.642 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:32:28.643 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:32:33.680 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:32:38.696 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:32:38.697 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:32:43.735 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:32:48.738 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:32:48.739 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:32:53.779 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:32:58.789 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:32:58.790 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:33:03.833 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:33:08.846 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:33:08.847 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:33:13.888 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:33:18.903 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:33:18.904 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:33:23.938 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:33:28.954 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:33:28.955 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:33:34.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:33:39.019 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:33:39.020 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:33:44.050 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:33:49.062 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:33:49.062 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:33:54.113 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:33:59.126 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:33:59.126 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:34:04.165 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:34:09.170 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:34:09.171 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:34:14.210 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:34:19.215 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:34:19.216 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:34:24.269 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:34:29.274 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:34:29.275 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:34:34.315 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:34:39.317 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:34:39.318 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:34:44.358 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:34:49.361 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:34:49.362 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:34:54.413 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:34:59.419 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:34:59.420 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:35:04.460 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:35:09.466 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:35:09.467 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:35:14.511 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:35:19.525 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:35:19.526 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:35:24.565 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:35:29.580 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:35:29.581 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:35:34.626 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:35:39.638 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:35:39.638 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:35:44.686 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:35:49.691 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:35:49.692 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:35:54.739 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:35:59.749 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:35:59.749 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:36:04.805 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:36:09.813 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:36:09.814 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:36:14.865 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:36:19.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:36:19.875 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:36:24.921 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:36:29.922 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:36:29.923 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:36:34.956 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:36:39.964 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:36:39.966 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:36:45.000 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:36:50.008 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:36:50.009 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:36:55.050 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:37:00.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:37:00.055 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:37:05.107 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:37:10.116 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:37:10.117 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:37:15.143 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:37:20.146 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:37:20.147 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:37:25.190 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:37:30.198 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:37:30.198 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:37:35.234 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:37:40.243 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:37:40.243 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:37:45.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:37:50.277 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:37:50.279 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:37:55.326 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:38:00.338 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:38:00.338 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:38:05.385 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:38:10.399 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:38:10.399 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:38:15.427 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:38:20.432 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:38:20.433 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:38:25.456 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:38:30.469 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:38:30.470 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:38:35.511 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:38:40.519 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:38:40.519 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:38:45.544 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:38:50.550 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:38:50.550 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:38:55.593 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:39:00.600 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:39:00.600 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:39:05.629 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:39:10.634 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:39:10.634 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:39:15.671 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:39:20.684 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:39:20.684 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:39:25.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:39:30.732 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:39:30.732 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:39:35.787 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:39:40.788 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:39:40.788 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:39:45.824 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:39:50.836 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:39:50.837 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:39:55.870 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:40:00.878 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:40:00.878 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:40:05.920 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:40:10.928 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:40:10.929 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:40:15.966 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:40:20.970 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:40:20.971 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:40:26.009 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:40:31.019 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:40:31.020 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:40:36.054 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:40:41.065 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:40:41.065 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:40:46.095 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:40:51.107 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:40:51.107 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:40:56.166 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:41:01.168 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:41:01.168 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:41:06.214 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:41:11.222 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:41:11.222 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:41:16.276 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:41:21.279 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:41:21.280 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:41:26.326 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:41:31.341 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:41:31.342 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:41:36.382 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:41:41.394 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:41:41.395 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:41:46.423 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:41:51.435 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:41:51.436 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:41:56.478 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:42:01.492 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:42:01.493 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:42:06.532 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:42:11.540 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:42:11.542 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:42:16.584 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:42:21.596 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:42:21.597 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:42:26.630 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:42:31.644 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:42:31.645 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:42:36.692 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:42:41.698 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:42:41.700 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:42:46.738 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:42:51.743 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:42:51.744 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:42:56.784 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:43:01.800 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:43:01.802 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:43:06.835 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:43:11.849 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:43:11.850 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:43:16.890 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:43:21.894 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:43:21.895 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:43:26.931 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:43:31.937 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:43:31.938 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:43:36.984 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:43:41.987 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:43:41.988 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:43:47.040 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:43:52.042 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:43:52.042 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:43:57.082 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:44:02.095 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:44:02.097 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:44:07.147 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:44:12.153 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:44:12.154 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:44:17.189 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:44:22.200 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:44:22.201 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:44:27.232 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:44:32.233 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:44:32.235 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:44:37.275 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:44:42.290 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:44:42.290 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:44:47.325 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:44:52.334 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:44:52.335 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:44:57.370 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:45:02.376 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:45:02.377 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:45:07.429 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:45:12.439 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:45:12.440 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:45:17.486 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:45:22.502 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:45:22.504 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:45:27.551 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:45:32.556 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:45:32.556 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:45:37.591 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:45:42.601 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:45:42.604 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:45:47.632 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:45:52.645 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:45:52.645 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:45:57.663 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:46:02.673 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:46:02.674 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:46:07.691 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:46:12.704 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:46:12.704 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:46:17.736 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:46:22.742 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:46:22.742 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:46:27.786 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:46:32.792 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:46:32.793 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:46:37.830 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:46:42.830 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:46:42.831 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:46:47.872 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:46:52.874 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:46:52.875 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:46:57.929 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:47:02.929 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:47:02.929 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:47:07.939 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:47:12.953 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:47:12.954 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:47:18.005 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:47:23.017 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:47:23.017 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:47:28.062 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:47:33.072 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:47:33.073 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:47:38.103 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:47:43.105 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:47:43.106 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:47:48.146 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:47:53.154 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:47:53.155 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:47:58.211 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:48:03.215 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:48:03.215 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:48:08.262 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:48:13.266 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:48:13.267 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:48:18.314 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:48:23.324 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:48:23.325 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:48:28.370 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:48:33.378 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:48:33.379 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:48:38.427 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:48:43.439 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:48:43.439 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:48:48.483 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:48:53.488 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:48:53.488 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:48:58.525 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:49:03.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:49:03.538 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:49:08.573 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:49:13.577 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:49:13.577 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:49:18.623 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:49:23.628 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:49:23.629 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:49:28.679 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:49:33.685 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:49:33.686 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:49:38.743 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:49:43.749 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:49:43.750 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:49:48.796 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:49:53.807 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:49:53.808 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:49:58.847 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:50:03.853 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:50:03.855 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:50:08.887 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:50:13.903 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:50:13.904 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:50:18.949 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:50:23.965 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:50:23.967 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:50:29.003 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:50:34.007 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:50:34.008 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:50:39.040 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:50:44.044 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:50:44.044 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:50:49.082 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:50:54.094 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:50:54.095 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:50:59.135 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:51:04.142 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:51:04.143 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:51:09.186 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:51:14.188 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:51:14.188 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:51:19.226 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:51:24.233 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:51:24.234 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:51:29.302 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:51:34.317 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:51:34.317 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:51:39.356 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:51:44.363 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:51:44.364 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:51:49.401 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:51:54.412 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:51:54.413 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:51:59.444 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:52:04.452 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:52:04.453 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:52:09.508 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:52:14.510 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:52:14.511 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:52:19.543 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:52:24.554 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:52:24.555 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:52:29.592 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:52:34.600 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:52:34.601 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:52:39.642 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:52:44.656 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:52:44.657 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:52:49.714 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:52:54.723 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:52:54.723 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:52:59.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:53:04.756 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:53:04.757 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:53:09.784 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:53:14.796 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:53:14.796 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:53:19.830 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:53:24.832 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:53:24.833 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:53:29.875 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:53:34.881 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:53:34.882 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:53:39.933 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:53:44.946 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:53:44.947 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:53:49.977 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:53:54.990 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:53:54.990 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:54:00.029 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:54:05.039 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:54:05.040 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:54:10.075 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:54:15.086 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:54:15.087 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:54:20.124 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:54:25.128 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:54:25.129 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:54:30.177 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:54:35.192 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:54:35.193 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:54:40.233 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:54:45.237 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:54:45.238 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:54:50.266 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:54:55.279 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:54:55.280 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:55:00.316 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:55:05.324 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:55:05.325 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:55:10.359 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:55:15.365 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:55:15.365 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:55:20.388 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:55:25.395 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:55:25.396 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:55:30.430 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:55:35.433 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:55:35.433 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:55:40.465 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:55:45.467 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:55:45.468 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:55:50.516 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:55:55.530 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:55:55.531 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:56:00.574 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:56:05.578 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:56:05.580 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:56:10.622 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:56:15.635 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:56:15.641 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:56:20.695 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:56:25.698 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:56:25.699 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:56:30.721 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:56:35.736 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:56:35.738 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:56:40.775 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:56:45.784 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:56:45.785 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:56:50.828 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:56:55.835 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:56:55.836 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:57:00.871 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:57:05.887 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:57:05.888 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:57:10.939 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:57:15.951 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:57:15.952 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:57:20.989 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:57:25.999 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:57:25.999 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:57:31.036 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:57:36.040 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:57:36.040 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:57:41.071 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:57:46.079 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:57:46.080 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:57:51.123 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:57:56.132 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:57:56.133 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:58:01.162 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:58:06.169 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:58:06.170 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:58:11.213 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:58:16.226 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:58:16.227 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:58:21.269 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:58:26.279 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:58:26.280 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:58:31.333 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:58:36.345 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:58:36.346 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:58:41.392 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:58:46.403 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:58:46.403 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:58:51.457 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:58:56.473 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:58:56.474 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:59:01.507 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:59:06.514 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:59:06.515 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:59:11.557 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:59:16.569 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:59:16.570 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:59:21.600 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:59:26.605 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:59:26.605 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:59:31.652 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:59:36.666 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:59:36.667 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:59:41.692 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:59:46.694 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:59:46.695 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T22:59:51.728 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T22:59:56.731 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T22:59:56.732 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:00:01.779 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:00:06.796 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:00:06.797 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:00:11.841 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:00:16.854 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:00:16.855 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:00:21.881 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:00:26.882 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:00:26.883 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:00:31.920 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:00:36.929 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:00:36.929 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:00:41.975 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:00:46.989 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:00:46.990 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:00:52.017 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:00:57.022 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:00:57.023 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:01:02.072 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:01:07.087 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:01:07.088 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:01:12.126 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:01:17.135 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:01:17.136 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:01:22.167 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:01:27.170 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:01:27.172 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:01:32.225 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:01:37.235 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:01:37.236 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:01:42.279 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:01:47.295 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:01:47.296 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:01:52.340 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:01:57.348 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:01:57.350 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:02:02.378 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:02:07.382 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:02:07.382 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:02:12.427 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:02:17.435 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:02:17.436 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:02:22.482 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:02:27.484 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:02:27.484 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:02:32.523 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:02:37.536 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:02:37.536 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:02:42.580 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:02:47.589 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:02:47.589 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:02:52.616 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:02:57.622 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:02:57.623 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:03:02.671 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:03:07.676 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:03:07.677 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:03:12.725 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:03:17.739 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:03:17.739 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:03:22.752 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:03:27.760 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:03:27.761 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:03:32.786 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:03:37.790 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:03:37.790 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:03:42.827 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:03:47.835 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:03:47.836 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:03:52.871 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:03:57.885 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:03:57.885 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:04:02.919 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:04:07.925 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:04:07.925 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:04:12.959 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:04:17.973 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:04:17.974 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:04:23.018 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:04:28.032 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:04:28.032 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:04:33.072 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:04:38.085 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:04:38.086 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:04:43.125 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:04:48.140 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:04:48.140 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:04:53.188 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:04:58.194 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:04:58.195 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:05:03.233 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:05:08.240 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:05:08.241 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:05:13.276 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:05:18.288 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:05:18.288 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:05:23.340 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:05:28.349 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:05:28.351 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:05:33.382 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:05:38.398 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:05:38.399 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:05:43.428 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:05:48.440 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:05:48.440 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:05:53.469 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:05:58.481 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:05:58.482 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:06:03.527 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:06:08.540 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:06:08.541 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:06:13.570 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:06:18.581 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:06:18.582 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:06:23.609 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:06:28.618 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:06:28.620 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:06:33.660 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:06:38.675 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:06:38.676 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:06:43.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:06:48.733 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:06:48.734 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:06:53.786 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:06:58.795 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:06:58.796 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:07:03.833 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:07:08.835 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:07:08.836 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:07:13.868 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:07:18.876 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:07:18.876 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:07:23.905 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:07:28.911 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:07:28.912 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:07:33.950 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:07:38.954 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:07:38.955 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:07:43.994 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:07:49.007 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:07:49.007 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:07:54.048 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:07:59.049 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:07:59.050 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:08:04.088 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:08:09.095 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:08:09.096 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:08:14.143 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:08:19.149 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:08:19.149 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:08:24.185 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:08:29.191 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:08:29.192 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:08:34.226 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:08:39.239 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:08:39.240 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:08:44.289 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:08:49.291 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:08:49.292 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:08:54.325 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:08:59.327 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:08:59.327 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:09:04.367 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:09:09.383 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:09:09.383 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:09:14.434 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:09:19.437 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:09:19.438 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:09:24.483 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:09:29.485 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:09:29.486 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:09:34.529 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:09:39.541 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:09:39.542 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:09:44.598 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:09:49.610 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:09:49.611 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:09:54.655 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:09:59.669 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:09:59.670 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:10:04.722 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:10:09.732 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:10:09.733 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:10:14.784 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:10:19.791 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:10:19.791 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:10:24.827 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:10:29.842 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:10:29.843 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:10:34.885 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:10:39.895 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:10:39.895 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:10:44.927 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:10:49.942 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:10:49.942 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:10:54.982 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:10:59.986 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:10:59.987 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:11:05.027 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:11:10.030 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:11:10.030 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:11:15.071 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:11:20.087 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:11:20.087 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:11:25.118 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:11:30.129 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:11:30.129 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:11:35.175 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:11:40.177 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:11:40.177 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:11:45.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:11:50.221 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:11:50.221 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:11:55.250 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:12:00.267 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:12:00.267 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:12:05.307 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:12:10.320 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:12:10.320 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:12:15.334 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:12:20.340 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:12:20.341 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:12:25.393 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:12:30.398 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:12:30.398 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:12:35.436 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:12:40.442 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:12:40.443 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:12:45.477 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:12:50.483 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:12:50.485 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:12:55.530 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:13:00.544 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:13:00.544 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:13:05.586 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:13:10.596 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:13:10.597 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:13:15.642 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:13:20.647 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:13:20.648 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:13:25.687 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:13:30.692 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:13:30.693 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:13:35.742 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:13:40.747 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:13:40.748 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:13:45.790 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:13:50.796 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:13:50.796 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:13:55.848 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:14:00.863 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:14:00.864 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:14:05.922 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:14:10.930 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:14:10.932 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:14:15.976 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:14:20.983 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:14:20.984 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:14:26.034 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:14:31.036 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:14:31.037 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:14:36.046 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:14:41.058 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:14:41.060 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:14:46.092 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:14:51.102 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:14:51.102 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:14:56.136 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:15:01.143 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:15:01.144 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:15:06.185 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:15:11.186 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:15:11.187 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:15:16.238 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:15:21.250 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:15:21.252 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:15:26.291 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:15:31.295 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:15:31.295 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:15:36.366 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:15:41.371 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:15:41.372 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:15:46.415 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:15:51.431 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:15:51.432 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:15:56.469 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:16:01.474 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:16:01.475 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:16:06.519 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:16:11.523 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:16:11.524 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:16:16.584 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:16:21.600 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:16:21.601 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:16:26.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:16:31.642 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:16:31.645 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:16:36.680 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:16:41.682 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:16:41.683 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:16:46.704 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:16:51.706 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:16:51.708 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:16:56.744 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:17:01.754 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:17:01.754 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:17:06.790 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:17:11.801 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:17:11.802 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:17:16.844 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:17:21.854 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:17:21.854 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:17:26.887 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:17:31.889 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:17:31.889 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:17:36.939 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:17:41.942 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:17:41.944 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:17:46.976 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:17:51.990 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:17:51.992 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:17:57.034 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:18:02.041 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:18:02.042 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:18:07.085 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:18:12.090 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:18:12.090 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:18:17.125 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:18:22.133 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:18:22.134 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:18:27.171 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:18:32.184 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:18:32.185 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:18:37.229 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:18:42.238 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:18:42.240 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:18:47.286 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:18:52.291 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:18:52.292 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:18:57.333 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:19:02.342 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:19:02.343 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:19:07.386 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:19:12.390 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:19:12.392 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:19:17.433 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:19:22.446 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:19:22.446 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:19:27.471 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:19:32.473 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:19:32.475 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:19:37.514 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:19:42.517 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:19:42.517 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:19:47.555 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:19:52.568 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:19:52.568 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:19:57.607 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:20:02.622 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:20:02.624 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:20:07.668 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:20:12.682 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:20:12.682 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:20:17.712 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:20:22.720 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:20:22.721 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:20:27.764 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:20:32.775 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:20:32.776 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:20:37.802 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:20:42.816 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:20:42.817 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:20:47.866 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:20:52.868 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:20:52.869 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:20:57.913 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:21:02.922 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:21:02.922 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:21:07.984 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:21:12.985 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:21:12.986 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:21:18.032 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:21:23.046 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:21:23.047 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:21:28.092 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:21:33.098 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:21:33.099 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:28:56.503 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T23:28:56.539 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T23:28:56.551 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:28:56.552 INFO:src.app:BLE background loop started +2025-09-27T23:28:56.552 INFO:app:BleComm started +2025-09-27T23:28:56.554 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:28:56.555 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:29:01.702 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:29:06.710 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:29:06.710 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:29:11.749 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:29:16.756 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:29:16.757 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:29:21.802 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:29:26.806 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:29:26.807 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:29:31.840 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:29:36.850 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:29:36.851 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:29:41.870 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:29:46.875 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:29:46.876 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:29:51.924 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:29:56.927 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:29:56.928 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:30:01.977 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:30:06.993 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:30:06.994 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:30:12.035 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:30:17.048 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:30:17.048 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:30:22.081 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:30:27.090 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:30:27.092 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:30:32.143 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:30:37.144 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:30:37.145 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:30:42.180 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:30:47.195 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:30:47.195 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:30:52.247 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:30:57.252 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:30:57.253 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:31:02.293 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:31:07.298 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:31:07.299 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:31:12.353 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:31:17.357 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:31:17.358 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:31:22.404 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:31:27.409 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:31:27.409 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:31:32.462 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:31:37.472 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:31:37.472 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:31:42.509 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:31:47.522 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:31:47.523 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:31:52.551 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:31:57.564 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:31:57.564 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:32:02.588 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:32:07.602 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:32:07.602 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:32:12.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:32:17.654 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:32:17.654 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:32:22.699 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:32:27.703 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:32:27.703 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:32:32.743 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:32:37.745 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:32:37.746 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:32:42.776 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:32:47.791 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:32:47.792 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:32:52.836 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:32:57.849 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:32:57.850 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:33:02.890 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:33:07.893 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:33:07.894 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:33:12.940 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:33:17.948 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:33:17.948 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:33:22.967 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:33:27.970 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:33:27.970 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:33:33.006 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:33:38.019 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:33:38.019 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:33:43.055 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:33:48.062 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:33:48.062 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:33:53.113 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:33:58.127 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:33:58.128 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:34:03.172 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:34:08.178 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:34:08.180 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:34:13.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:34:18.230 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:34:18.230 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:34:23.268 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:34:28.282 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:34:28.283 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:34:33.326 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:34:38.339 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:34:38.340 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:34:43.364 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:34:48.374 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:34:48.375 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:34:53.424 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:34:58.437 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:34:58.438 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:35:03.483 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:35:08.497 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:35:08.498 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:35:13.538 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:35:18.549 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:35:18.550 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:35:23.598 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:35:32.573 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T23:35:32.609 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T23:35:32.616 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:35:32.617 INFO:src.app:BLE background loop started +2025-09-27T23:35:32.617 INFO:app:BleComm started +2025-09-27T23:35:32.618 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:35:32.618 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:35:37.760 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:51:42.947 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T23:51:42.990 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-27T23:51:43.000 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:51:43.001 INFO:src.app:BLE background loop started +2025-09-27T23:51:43.001 INFO:app:BleComm started +2025-09-27T23:51:43.002 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:51:43.002 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:51:48.162 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:51:53.171 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:51:53.172 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:51:58.203 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:52:03.216 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:52:03.217 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:52:08.259 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:52:13.275 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:52:13.277 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:52:18.320 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:52:23.323 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:52:23.324 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:52:28.361 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:52:33.371 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:52:33.372 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:52:38.403 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:52:43.415 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:52:43.416 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:52:48.445 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:52:53.446 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:52:53.446 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:52:58.454 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:53:03.458 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:53:03.459 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:53:08.500 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:53:13.505 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:53:13.507 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:53:18.541 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:53:23.555 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:53:23.556 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:53:28.593 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:53:33.608 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:53:33.611 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:53:38.658 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:53:43.664 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:53:43.665 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:53:48.708 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:53:53.721 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:53:53.723 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:53:58.763 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:54:03.776 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:54:03.778 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:54:08.811 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:54:13.827 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:54:13.828 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:54:18.871 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:54:23.885 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:54:23.886 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:54:28.913 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:54:33.929 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:54:33.930 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:54:38.942 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:54:43.950 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:54:43.950 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:54:49.000 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:54:54.005 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:54:54.005 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:54:59.046 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:55:04.050 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:55:04.050 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:55:09.086 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:55:14.100 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:55:14.102 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:55:19.115 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:55:24.123 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:55:24.123 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:55:29.166 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:55:34.173 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:55:34.175 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:55:39.211 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:55:44.227 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:55:44.228 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:55:49.262 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:55:54.275 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:55:54.276 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:55:59.310 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:56:04.326 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:56:04.326 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:56:09.362 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:56:14.374 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:56:14.375 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:56:19.420 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:56:24.431 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:56:24.432 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:56:29.473 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:56:34.480 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:56:34.481 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:56:39.512 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:56:44.519 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:56:44.520 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:56:49.557 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:56:54.563 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:56:54.564 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:56:59.606 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:57:04.621 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:57:04.622 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:57:09.659 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:57:14.672 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:57:14.673 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:57:19.710 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:57:24.711 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:57:24.711 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:57:29.751 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:57:34.754 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:57:34.754 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:57:39.795 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:57:44.797 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:57:44.798 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:57:49.836 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:57:54.847 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:57:54.848 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:57:59.891 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:58:04.895 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:58:04.896 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:58:09.922 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:58:14.934 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:58:14.935 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:58:19.986 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:58:24.998 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:58:24.999 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:58:30.034 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:58:35.049 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:58:35.049 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:58:40.089 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:58:45.094 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:58:45.096 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:58:50.144 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:58:55.148 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:58:55.148 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:59:00.185 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:59:05.193 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:59:05.194 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:59:10.244 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:59:15.248 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:59:15.248 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:59:20.317 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:59:25.321 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:59:25.321 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:59:30.350 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:59:35.356 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:59:35.356 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:59:40.371 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:59:45.378 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:59:45.380 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-27T23:59:50.427 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-27T23:59:55.442 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-27T23:59:55.442 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:00.484 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:00:05.484 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:05.484 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:10.520 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:00:15.521 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:15.521 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:20.541 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:00:25.550 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:25.551 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:30.579 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:00:35.593 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:35.593 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:37.361 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:00:37.401 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:00:37.410 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:37.411 INFO:src.app:BLE background loop started +2025-09-28T00:00:37.411 INFO:app:BleComm started +2025-09-28T00:00:37.412 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:37.414 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:42.548 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:00:47.556 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:47.557 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:00:52.583 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:00:57.595 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:00:57.595 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:01:02.629 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:01:07.631 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:01:07.633 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:01:12.666 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:01:12.930 INFO:src.app:disconnect: no client present +2025-09-28T00:01:17.548 INFO:src.app:disconnect: no client present +2025-09-28T00:01:17.668 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:01:17.669 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:01:22.697 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:01:27.712 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:01:27.713 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:01:32.762 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:01:37.772 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:01:37.773 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:01:42.817 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:01:47.832 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:01:47.832 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:01:52.863 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:01:57.880 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:01:57.881 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:02:02.924 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:02:07.939 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:02:07.939 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:02:12.967 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:02:17.974 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:02:17.975 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:02:22.996 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:02:28.005 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:02:28.005 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:02:33.046 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:02:38.050 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:02:38.051 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:02:43.098 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:02:48.103 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:02:48.103 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:02:53.130 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:02:58.141 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:02:58.141 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:03:03.180 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:03:08.192 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:03:08.193 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:03:13.220 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:03:18.226 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:03:18.227 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:03:23.264 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:03:28.272 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:03:28.273 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:03:33.302 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:03:38.315 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:03:38.316 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:03:43.358 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:03:48.369 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:03:48.369 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:03:53.397 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:03:58.400 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:03:58.401 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:04:03.440 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:04:08.454 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:08.454 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:04:13.488 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:04:18.504 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:18.504 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:04:23.538 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:04:29.329 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:04:29.376 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:04:29.385 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:29.386 INFO:src.app:BLE background loop started +2025-09-28T00:04:29.387 INFO:app:BleComm started +2025-09-28T00:04:29.387 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:29.388 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:04:34.580 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:04:39.583 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:39.585 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:04:44.615 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:04:49.631 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:49.632 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:04:51.940 INFO:src.app:disconnect: no client present +2025-09-28T00:04:54.671 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:04:59.686 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:04:59.687 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:05:04.747 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:05:09.755 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:05:09.756 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:05:11.385 INFO:src.app:disconnect: no client present +2025-09-28T00:05:14.789 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:05:15.873 INFO:src.app:disconnect: no client present +2025-09-28T00:05:19.792 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:05:19.793 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:05:24.819 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:05:29.822 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:05:29.823 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:05:34.863 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:05:39.876 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:05:39.876 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:05:44.929 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:05:49.940 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:05:49.940 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:05:54.981 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:05:59.983 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:05:59.984 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:06:05.021 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:06:10.036 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:06:10.036 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:06:15.078 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:06:20.086 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:06:20.087 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:06:25.131 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:06:30.146 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:06:30.146 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:06:35.205 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:06:40.215 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:06:40.216 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:06:45.260 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:06:50.271 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:06:50.271 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:06:55.318 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:07:00.332 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:00.332 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:07:05.352 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:07:10.359 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:10.359 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:07:15.408 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:07:21.267 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:07:21.302 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:07:21.311 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:21.312 INFO:src.app:BLE background loop started +2025-09-28T00:07:21.312 INFO:app:BleComm started +2025-09-28T00:07:21.313 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:21.313 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:07:26.425 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:07:31.435 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:31.435 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:07:35.678 INFO:src.app:disconnect: no client present +2025-09-28T00:07:36.484 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:07:41.498 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:41.498 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:07:43.770 INFO:src.app:disconnect: no client present +2025-09-28T00:07:46.541 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:07:51.543 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:07:51.543 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:07:56.578 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:08:01.592 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:08:01.593 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:08:06.651 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:08:11.665 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:08:11.665 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:08:16.711 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:08:21.721 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:08:21.721 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:08:26.763 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:08:31.770 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:08:31.771 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:08:36.800 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:08:41.805 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:08:41.806 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:08:46.848 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:08:51.859 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:08:51.859 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:08:56.895 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:09:01.905 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:09:01.906 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:09:06.944 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:09:11.944 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:09:11.944 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:09:16.965 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:09:21.974 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:09:21.976 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:09:27.022 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:09:32.025 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:09:32.025 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:09:37.064 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:09:42.075 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:09:42.076 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:09:47.123 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:11:08.999 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:11:09.045 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:11:09.054 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:11:09.054 INFO:src.app:BLE background loop started +2025-09-28T00:11:09.054 INFO:app:BleComm started +2025-09-28T00:11:09.056 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:11:09.056 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:11:14.257 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:11:19.265 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:11:19.266 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:11:24.325 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:11:29.341 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:11:29.342 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:11:34.383 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:11:39.391 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T00:11:39.391 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T00:11:43.626 INFO:app:ble_connect called +2025-09-28T00:11:44.408 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T00:11:49.417 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:11:49.417 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T00:11:52.822 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T00:40:09.143 INFO:src.app:Scheduling BLE disconnect +2025-09-28T00:40:13.965 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:40:14.001 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:40:14.009 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:40:14.011 INFO:src.app:BLE background loop started +2025-09-28T00:40:14.011 INFO:app:BleComm started +2025-09-28T00:40:14.012 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:40:14.132 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T00:40:16.355 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T00:41:19.711 INFO:app:Session started - PrintAndGIF +2025-09-28T00:41:19.908 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18256, thread=36808) args=(5,0,0,44) +2025-09-28T00:41:19.909 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T00:41:20.077 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T00:41:20.077 INFO:app:Countdown started - 5 sec(s) +2025-09-28T00:41:23.959 INFO:app:capture_start event received +2025-09-28T00:41:24.293 INFO:app:File downloaded: 20250928_004124_289.jpg +2025-09-28T00:41:27.399 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18256, thread=37728) args=(5,0,0,44) +2025-09-28T00:41:27.401 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T00:41:27.576 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T00:41:27.577 INFO:app:Countdown started - 5 sec(s) +2025-09-28T00:41:31.564 INFO:app:capture_start event received +2025-09-28T00:41:31.813 INFO:app:File downloaded: 20250928_004131_807.jpg +2025-09-28T00:41:34.911 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18256, thread=5488) args=(5,0,0,44) +2025-09-28T00:41:34.913 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T00:41:35.080 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T00:41:35.081 INFO:app:Countdown started - 5 sec(s) +2025-09-28T00:41:39.085 INFO:app:capture_start event received +2025-09-28T00:41:39.258 INFO:app:File downloaded: 20250928_004139_254.jpg +2025-09-28T00:41:42.349 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18256, thread=35024) args=(5,0,0,44) +2025-09-28T00:41:42.352 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T00:41:42.516 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T00:41:42.516 INFO:app:Countdown started - 5 sec(s) +2025-09-28T00:41:46.531 INFO:app:capture_start event received +2025-09-28T00:41:46.765 INFO:app:File downloaded: 20250928_004146_761.jpg +2025-09-28T00:41:50.344 INFO:app:Processing started... +2025-09-28T00:41:50.605 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18256, thread=17840) args=(50,0,0,44) +2025-09-28T00:41:50.606 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T00:41:50.736 INFO:src.app:Wrote payload to characteristic 0xFFE1: 3200002c +2025-09-28T00:41:50.737 INFO:app:Sharing screen Animation +2025-09-28T00:41:55.109 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_004124_289.jpg +2025-09-28T00:41:55.718 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250928_004150_340.jpg +2025-09-28T00:41:55.939 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250928_004150_340.mp4 +2025-09-28T00:41:56.442 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_004131_807.jpg +2025-09-28T00:41:57.434 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_004139_254.jpg +2025-09-28T00:41:58.483 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_004146_761.jpg +2025-09-28T00:42:04.301 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18256, thread=27924) args=(23,0,0,44) +2025-09-28T00:42:04.303 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T00:42:04.476 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T00:56:21.207 INFO:src.app:Scheduling BLE disconnect +2025-09-28T00:56:25.750 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:56:25.788 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:56:25.796 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:56:25.797 INFO:src.app:BLE background loop started +2025-09-28T00:56:25.797 INFO:app:BleComm started +2025-09-28T00:56:25.798 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:56:25.920 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T00:56:27.998 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T00:59:04.097 INFO:src.app:Scheduling BLE disconnect +2025-09-28T00:59:07.326 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:59:07.368 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:59:07.380 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:59:07.381 INFO:src.app:BLE background loop started +2025-09-28T00:59:07.381 INFO:app:BleComm started +2025-09-28T00:59:07.382 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:59:07.496 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T00:59:09.850 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T00:59:12.867 INFO:src.app:Scheduling BLE disconnect +2025-09-28T00:59:18.203 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:59:18.229 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T00:59:18.238 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:59:18.239 INFO:src.app:BLE background loop started +2025-09-28T00:59:18.240 INFO:app:BleComm started +2025-09-28T00:59:18.243 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T00:59:18.348 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T00:59:20.739 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T01:13:37.804 INFO:src.app:Scheduling BLE disconnect +2025-09-28T01:14:11.100 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:14:11.139 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:14:11.148 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:14:11.149 INFO:src.app:BLE background loop started +2025-09-28T01:14:11.149 INFO:app:BleComm started +2025-09-28T01:14:11.150 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:14:11.271 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:14:13.914 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T01:19:46.755 INFO:src.app:Scheduling BLE disconnect +2025-09-28T01:19:49.970 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:19:50.012 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:19:50.021 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:19:50.022 INFO:src.app:BLE background loop started +2025-09-28T01:19:50.022 INFO:app:BleComm started +2025-09-28T01:19:50.024 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:19:50.157 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:19:52.066 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T01:26:17.643 INFO:src.app:Scheduling BLE disconnect +2025-09-28T01:26:23.033 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:26:23.070 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:26:23.080 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:26:23.081 INFO:src.app:BLE background loop started +2025-09-28T01:26:23.081 INFO:app:BleComm started +2025-09-28T01:26:23.082 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:26:23.228 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:26:25.102 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T01:27:05.387 INFO:app:/update payload: {'home_mode': 'solid', 'home_screen_animation': '34', 'home_color': '#000000', 'countdown_mode': 'animation', 'countdown_animation': '4', 'countdown_color': '#ffffff', 'sharing_mode': 'solid', 'sharing_screen_animation': '50', 'sharing_color': '#0000ff'} +2025-09-28T01:34:43.568 INFO:src.app:Scheduling BLE disconnect +2025-09-28T01:34:50.997 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:34:51.044 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T01:34:51.052 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:34:51.054 INFO:src.app:BLE background loop started +2025-09-28T01:34:51.054 INFO:app:BleComm started +2025-09-28T01:34:51.055 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:34:51.178 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:34:53.568 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T01:35:41.240 INFO:app:/update payload: {'home_mode': 'solid', 'home_animation': '23', 'home_color': '#7c0462', 'countdown_mode': 'animation', 'countdown_animation': '4', 'countdown_color': '#046167', 'sharing_mode': 'solid', 'sharing_animation': '55', 'sharing_color': '#1e1e62'} +2025-09-28T01:36:11.614 INFO:app:Session started - PrintAndGIF +2025-09-28T01:36:11.724 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=46756, thread=21272) args=(5,0,0,44) +2025-09-28T01:36:11.725 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T01:36:11.854 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T01:36:11.854 INFO:app:Countdown started - 5 sec(s) +2025-09-28T01:36:15.884 INFO:app:capture_start event received +2025-09-28T01:36:16.214 INFO:app:File downloaded: 20250928_013616_207.jpg +2025-09-28T01:36:19.322 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=46756, thread=47016) args=(5,0,0,44) +2025-09-28T01:36:19.322 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T01:36:19.472 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T01:36:19.473 INFO:app:Countdown started - 5 sec(s) +2025-09-28T01:36:23.504 INFO:app:capture_start event received +2025-09-28T01:36:23.699 INFO:app:File downloaded: 20250928_013623_694.jpg +2025-09-28T01:36:26.785 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=46756, thread=55840) args=(5,0,0,44) +2025-09-28T01:36:26.785 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T01:36:26.913 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T01:36:26.914 INFO:app:Countdown started - 5 sec(s) +2025-09-28T01:36:30.938 INFO:app:capture_start event received +2025-09-28T01:36:31.226 INFO:app:File downloaded: 20250928_013631_223.jpg +2025-09-28T01:36:34.315 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=46756, thread=54884) args=(5,0,0,44) +2025-09-28T01:36:34.316 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T01:36:34.473 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T01:36:34.473 INFO:app:Countdown started - 5 sec(s) +2025-09-28T01:36:38.483 INFO:app:capture_start event received +2025-09-28T01:36:38.757 INFO:app:File downloaded: 20250928_013638_754.jpg +2025-09-28T01:36:42.262 INFO:app:Processing started... +2025-09-28T01:36:42.470 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=46756, thread=57952) args=(30,30,98,30) +2025-09-28T01:36:42.471 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T01:36:42.634 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1e1e621e +2025-09-28T01:36:42.634 INFO:app:Sharing screen Animation +2025-09-28T01:36:43.878 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250928_013642_260.jpg +2025-09-28T01:36:44.031 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_013616_207.jpg +2025-09-28T01:36:44.136 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250928_013642_260.mp4 +2025-09-28T01:36:45.333 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_013623_694.jpg +2025-09-28T01:36:46.433 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_013631_223.jpg +2025-09-28T01:36:47.518 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_013638_754.jpg +2025-09-28T01:37:04.578 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=46756, thread=19140) args=(124,4,98,30) +2025-09-28T01:37:04.579 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T01:37:04.715 INFO:src.app:Wrote payload to characteristic 0xFFE1: 7c04621e +2025-09-28T01:46:09.529 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T01:46:14.542 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:46:14.544 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:46:24.607 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T01:46:29.610 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:46:29.611 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:46:39.649 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T01:46:44.652 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:46:44.653 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:46:54.702 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T01:46:59.702 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T01:46:59.702 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T01:47:09.737 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T05:02:03.161 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T05:02:03.249 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T05:02:13.454 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T05:02:18.464 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T05:02:18.465 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T05:02:28.493 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T10:32:05.478 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T10:32:05.479 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T10:32:15.517 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T10:32:22.707 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T10:32:22.709 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T11:34:32.362 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T11:34:37.382 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T11:34:37.382 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T11:34:47.420 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T11:34:52.435 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T11:34:52.436 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T11:35:02.484 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T11:35:07.500 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T11:35:07.502 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T11:35:17.549 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T11:35:22.563 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T11:35:22.564 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T13:12:54.911 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:12:54.949 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:12:54.957 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:12:54.958 INFO:src.app:BLE background loop started +2025-09-28T13:12:54.958 INFO:app:BleComm started +2025-09-28T13:12:54.958 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:12:54.959 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:12:59.964 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:12:59.965 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:04.979 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:04.979 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:09.990 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:09.992 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:15.004 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:15.005 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:20.007 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:20.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:25.021 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:25.022 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:30.030 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:30.031 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:35.034 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:35.034 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:40.042 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:40.043 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:45.047 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:45.048 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:50.064 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:50.064 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:13:55.068 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:13:55.068 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:00.076 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:00.076 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:05.090 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:05.091 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:10.105 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:10.106 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:15.118 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:15.118 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:20.121 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:20.121 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:25.125 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:25.125 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:30.137 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:30.137 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:35.152 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:35.153 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:40.156 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:40.156 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:45.171 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:45.171 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:50.174 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:50.175 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:14:55.185 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:14:55.185 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:00.191 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:00.191 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:05.205 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:05.205 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:10.206 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:10.207 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:15.209 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:15.210 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:20.222 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:20.222 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:25.236 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:25.236 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:30.244 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:30.244 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:35.251 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:35.251 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:40.262 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:40.262 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:45.276 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:45.276 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:50.287 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:50.288 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:15:55.298 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:15:55.298 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:00.302 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:00.303 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:05.308 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:05.308 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:10.319 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:10.319 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:15.319 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:15.319 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:20.320 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:20.320 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:25.333 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:25.335 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:30.342 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:30.343 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:35.349 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:35.349 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:40.361 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:40.361 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:45.369 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:45.370 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:50.378 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:50.378 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:16:55.392 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:16:55.393 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:00.400 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:00.400 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:05.404 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:05.405 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:10.412 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:10.412 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:15.421 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:15.422 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:20.422 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:20.422 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:25.434 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:25.436 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:30.450 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:30.450 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:35.456 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:35.456 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:40.467 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:40.467 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:45.480 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:45.480 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:50.483 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:50.483 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:17:55.489 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:17:55.489 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:00.495 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:00.495 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:05.502 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:05.502 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:10.504 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:10.504 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:15.516 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:15.516 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:20.521 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:20.521 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:25.535 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:25.536 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:30.542 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:30.542 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:35.555 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:35.555 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:40.557 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:40.557 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:45.562 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:45.562 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:50.575 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:50.575 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:18:55.582 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:18:55.582 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:00.591 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:00.591 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:05.592 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:05.592 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:10.607 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:10.607 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:15.619 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:15.619 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:20.626 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:20.626 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:25.639 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:25.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:30.651 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:30.651 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:19:35.666 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:19:35.666 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:21.143 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:20:21.178 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:20:21.184 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:21.185 INFO:src.app:BLE background loop started +2025-09-28T13:20:21.185 INFO:app:BleComm started +2025-09-28T13:20:21.186 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:21.186 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:26.198 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:26.198 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:31.204 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:31.205 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:36.205 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:36.205 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:41.218 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:41.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:46.221 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:46.221 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:51.227 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:51.227 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:20:56.239 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:20:56.239 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:01.242 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:01.243 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:06.256 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:06.257 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:11.260 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:11.260 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:16.265 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:16.265 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:21.277 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:21.277 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:26.285 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:26.286 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:31.295 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:31.296 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:36.302 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:36.302 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:41.312 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:41.312 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:46.322 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:46.322 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:51.332 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:51.332 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:21:56.343 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:21:56.344 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:01.345 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:01.346 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:06.348 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:06.348 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:11.356 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:11.356 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:16.368 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:16.368 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:21.386 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:21.387 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:26.389 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:26.389 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:31.392 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:31.392 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:36.399 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:36.400 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:41.408 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:41.408 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:46.416 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:46.416 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:51.419 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:51.419 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:22:56.434 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:22:56.434 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:01.440 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:01.441 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:06.457 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:06.458 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:11.473 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:11.473 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:16.482 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:16.483 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:21.498 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:21.499 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:26.512 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:26.513 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:31.524 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:31.524 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:36.537 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:36.541 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:41.542 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:41.543 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:46.549 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:46.549 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:51.557 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:51.557 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:23:56.565 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:23:56.565 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:01.571 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:01.573 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:06.583 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:06.583 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:11.594 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:11.594 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:16.609 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:16.610 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:21.618 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:21.618 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:26.627 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:26.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:31.638 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:31.638 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:36.652 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:36.654 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:41.667 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:41.668 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:46.681 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:46.681 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:51.685 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:51.685 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:24:56.692 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:24:56.692 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:01.701 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:01.701 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:06.710 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:06.710 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:11.717 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:11.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:16.730 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:16.731 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:21.747 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:21.748 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:26.757 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:26.758 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:31.769 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:31.771 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:36.786 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:36.787 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:41.798 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:41.798 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:46.808 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:46.809 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:51.822 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:51.823 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:25:56.827 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:25:56.827 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:01.829 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:01.829 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:06.845 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:06.846 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:11.862 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:11.863 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:16.869 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:16.869 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:21.880 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:21.881 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:26.882 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:26.882 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:31.895 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:31.896 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:36.905 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:36.905 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:41.906 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:41.906 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:46.910 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:46.911 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:51.921 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:51.921 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:26:56.921 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:26:56.922 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:01.933 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:01.933 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:06.938 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:06.940 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:11.955 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:11.956 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:16.957 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:16.957 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:21.960 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:21.961 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:26.975 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:26.977 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:31.978 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:31.979 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:36.990 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:36.991 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:41.995 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:41.995 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:47.000 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:47.001 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:52.006 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:52.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:27:57.016 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:27:57.016 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:02.026 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:02.026 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:07.033 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:07.033 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:12.048 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:12.049 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:17.062 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:17.062 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:22.077 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:22.077 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:27.079 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:27.079 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:32.080 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:32.080 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:37.087 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:37.088 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:42.102 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:42.102 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:47.109 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:47.110 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:52.119 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:52.120 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:28:57.125 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:28:57.126 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:02.140 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:02.140 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:07.152 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:07.154 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:12.161 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:12.161 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:17.172 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:17.172 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:22.183 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:22.183 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:27.189 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:27.190 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:32.204 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:32.205 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:37.211 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:37.211 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:42.216 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:42.217 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:47.230 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:47.230 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:52.236 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:52.236 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:29:57.252 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:29:57.252 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:02.260 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:02.260 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:07.266 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:07.266 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:12.278 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:12.279 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:17.288 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:17.289 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:22.294 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:22.294 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:27.310 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:27.310 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:32.318 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:32.318 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:37.333 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:37.333 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:42.341 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:42.341 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:47.343 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:47.343 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:52.357 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:52.358 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:30:57.358 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:30:57.359 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:02.375 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:02.375 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:07.387 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:07.387 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:12.393 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:12.394 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:17.407 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:17.407 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:22.419 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:22.419 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:27.428 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:27.428 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:32.433 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:32.434 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:37.441 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:37.441 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:42.451 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:42.451 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:47.452 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:47.452 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:52.465 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:52.466 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:31:57.472 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:31:57.472 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:02.479 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:02.480 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:07.486 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:07.486 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:12.495 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:12.495 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:17.508 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:17.508 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:22.520 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:22.520 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:27.530 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:27.530 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:32.533 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:32.533 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:37.544 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:37.544 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:42.551 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:42.551 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:47.567 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:47.567 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:52.583 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:52.583 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:32:57.593 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:32:57.593 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:02.594 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:02.594 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:07.605 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:07.605 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:12.608 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:12.608 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:17.611 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:17.611 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:22.626 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:22.626 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:27.638 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:27.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:32.649 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:32.649 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:37.657 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:37.657 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:42.671 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:42.672 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:47.683 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:47.683 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:52.687 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:52.688 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:33:57.695 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:33:57.695 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:02.700 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:02.700 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:07.707 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:07.707 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:12.717 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:12.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:17.719 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:17.720 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:22.726 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:22.726 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:27.734 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:27.734 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:32.743 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:32.743 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:37.751 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:37.751 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:42.758 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:42.758 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:47.764 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:47.764 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:52.771 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:52.771 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:34:57.781 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:34:57.781 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:02.785 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:02.785 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:07.798 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:07.798 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:12.811 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:12.811 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:17.813 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:17.813 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:22.822 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:22.823 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:27.836 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:27.836 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:32.839 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:32.839 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:37.850 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:37.850 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:42.851 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:42.851 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:47.853 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:47.853 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:52.861 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:52.862 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:35:57.874 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:35:57.874 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:02.878 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:02.878 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:07.893 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:07.893 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:12.908 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:12.909 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:17.912 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:17.912 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:22.920 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:22.920 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:27.926 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:27.926 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:32.932 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:32.933 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:37.933 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:37.933 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:42.942 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:42.942 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:47.948 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:47.948 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:52.958 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:52.958 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:36:57.960 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:36:57.960 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:02.964 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:02.964 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:07.969 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:07.969 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:12.983 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:12.983 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:17.987 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:17.988 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:22.996 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:22.996 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:28.005 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:28.007 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:33.014 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:33.014 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:38.022 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:38.023 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:43.038 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:43.038 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:48.047 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:48.047 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:53.059 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:53.060 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:37:58.060 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:37:58.060 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:03.075 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:03.075 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:08.084 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:08.084 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:13.086 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:13.086 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:18.093 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:18.093 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:23.099 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:23.100 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:28.105 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:28.105 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:33.112 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:33.112 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:38.114 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:38.115 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:43.120 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:43.120 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:48.120 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:48.120 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:53.133 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:53.133 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:38:58.145 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:38:58.145 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:03.153 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:03.153 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:08.154 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:08.154 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:13.164 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:13.164 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:18.168 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:18.169 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:23.184 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:23.184 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:28.186 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:28.186 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:33.192 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:33.192 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:38.198 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:38.198 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:43.212 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:43.212 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:48.219 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:48.219 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:53.231 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:53.231 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:39:58.246 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:39:58.246 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:03.248 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:03.249 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:08.255 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:08.257 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:13.260 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:13.260 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:18.271 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:18.273 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:23.291 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:23.291 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:28.305 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:28.306 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:33.315 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:33.315 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:38.320 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:38.320 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:43.321 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:43.322 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:48.323 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:48.324 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:53.328 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:53.328 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:40:58.336 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:40:58.336 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:03.339 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:03.340 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:08.343 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:08.343 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:13.344 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:13.344 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:18.352 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:18.352 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:23.356 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:23.356 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:28.361 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:28.363 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:33.371 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:33.371 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:38.386 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:38.387 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:43.402 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:43.402 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:48.408 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:48.408 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:53.417 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:53.417 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:41:58.419 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:41:58.419 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:03.429 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:03.430 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:08.438 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:08.438 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:13.451 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:13.451 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:18.461 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:18.462 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:23.473 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:23.473 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:28.474 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:28.474 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:33.476 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:33.476 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:38.484 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:38.484 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:43.498 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:43.498 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:48.512 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:48.514 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:53.526 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:53.526 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:42:58.542 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:42:58.542 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:03.551 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:03.552 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:08.556 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:08.557 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:13.565 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:13.565 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:18.571 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:18.571 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:23.582 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:23.582 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:28.583 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:28.583 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:33.591 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:33.591 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:38.596 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:38.596 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:43.608 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:43.608 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:48.623 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:48.624 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:53.626 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:53.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:43:58.633 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:43:58.633 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:03.638 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:03.639 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:08.640 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:08.640 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:13.643 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:13.643 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:18.652 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:18.652 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:23.658 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:23.658 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:28.673 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:28.674 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:33.675 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:33.676 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:39.458 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:44:39.483 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:44:39.492 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:39.492 INFO:src.app:BLE background loop started +2025-09-28T13:44:39.493 INFO:app:BleComm started +2025-09-28T13:44:39.493 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:39.494 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:44.508 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:44.508 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:49.523 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:49.523 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:54.537 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:54.537 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:44:59.540 INFO:src.app:Loaded BLE config: address='' name='' service='None' char='None' +2025-09-28T13:44:59.541 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:46:03.092 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:46:03.124 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:46:28.155 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:46:28.178 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:46:28.184 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:46:28.184 INFO:src.app:BLE background loop started +2025-09-28T13:46:28.185 INFO:app:BleComm started +2025-09-28T13:46:28.185 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:46:28.185 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:46:33.325 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:46:38.330 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:46:38.330 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:46:43.380 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:46:48.381 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:46:48.381 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:46:53.421 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:46:58.424 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:46:58.424 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:49:50.270 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:49:50.300 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T13:49:50.308 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:49:50.309 INFO:src.app:BLE background loop started +2025-09-28T13:49:50.309 INFO:app:BleComm started +2025-09-28T13:49:50.310 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:49:50.311 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:49:55.422 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:50:00.436 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:50:00.436 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:50:05.461 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:50:10.470 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:50:10.471 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:50:15.498 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:50:20.511 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:50:20.511 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:50:25.543 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:50:30.549 INFO:src.app:Loaded BLE config: address='' name='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T13:50:30.549 INFO:src.app:Scanning for BLE device name 'SP110E-ATA' (timeout=5.0s) +2025-09-28T13:50:31.785 INFO:app:ble_connect called +2025-09-28T13:50:35.553 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T13:50:40.564 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' service='0xFFE0' char='0xFFE1' +2025-09-28T13:50:40.565 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T13:50:42.410 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T13:58:11.926 INFO:src.app:disconnect: requested +2025-09-28T13:58:12.226 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T13:58:17.232 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='' service='None' char='None' +2025-09-28T13:58:17.233 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T13:58:17.968 INFO:app:ble_connect called +2025-09-28T13:58:19.408 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T13:58:28.014 ERROR:src.app:direct connect attempt failed: Device with address E8:06:90:D5:CA:65 was not found. +2025-09-28T14:09:20.467 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:09:25.560 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:09:25.601 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:09:25.609 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:25.610 INFO:src.app:BLE background loop started +2025-09-28T14:09:25.610 INFO:app:BleComm started +2025-09-28T14:09:25.611 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:25.611 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:30.616 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:30.616 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:35.628 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:35.628 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:40.640 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:40.640 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:45.643 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:45.644 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:50.651 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:50.651 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:55.658 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:09:55.658 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T14:09:59.655 INFO:app:ble_connect called +2025-09-28T14:10:00.665 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:10:00.665 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:10:07.369 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:16:10.206 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:29:46.146 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:29:54.762 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:29:54.790 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:29:54.797 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:29:54.798 INFO:src.app:BLE background loop started +2025-09-28T14:29:54.798 INFO:app:BleComm started +2025-09-28T14:29:54.799 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:29:54.901 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:29:56.595 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:30:12.219 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:32:10.365 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:32:36.777 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:32:36.815 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:32:36.822 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:32:36.822 INFO:src.app:BLE background loop started +2025-09-28T14:32:36.823 INFO:app:BleComm started +2025-09-28T14:32:36.824 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:32:36.909 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:32:38.583 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:32:46.190 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:33:34.909 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:33:35.063 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:33:35.064 INFO:src.app:BLE background loop started +2025-09-28T14:33:35.065 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:34:11.229 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:34:11.302 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:34:11.302 INFO:src.app:BLE background loop started +2025-09-28T14:34:11.304 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:34:11.413 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:34:35.081 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:34:35.143 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:34:35.144 INFO:src.app:BLE background loop started +2025-09-28T14:34:35.145 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:34:35.211 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:35:53.765 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:35:53.791 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:35:53.799 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:35:53.800 INFO:src.app:BLE background loop started +2025-09-28T14:35:53.800 INFO:app:BleComm started +2025-09-28T14:35:53.801 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:35:53.891 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:35:55.470 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:36:05.132 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:36:36.099 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:36:36.128 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:36:36.133 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:36:36.134 INFO:src.app:BLE background loop started +2025-09-28T14:36:36.135 INFO:app:BleComm started +2025-09-28T14:36:36.135 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:36:36.215 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:36:37.918 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:36:42.154 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:39:42.848 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:39:42.873 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:39:42.880 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:39:42.881 INFO:src.app:BLE background loop started +2025-09-28T14:39:42.881 INFO:app:BleComm started +2025-09-28T14:39:42.881 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:39:42.956 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:39:44.826 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:39:48.168 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:40:04.613 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:40:04.640 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:40:04.647 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:40:04.648 INFO:src.app:BLE background loop started +2025-09-28T14:40:04.649 INFO:app:BleComm started +2025-09-28T14:40:04.649 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:40:04.718 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:40:06.623 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:40:11.197 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:46:51.632 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:47:38.883 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:47:38.911 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:47:38.917 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:47:38.918 INFO:src.app:BLE background loop started +2025-09-28T14:47:38.918 INFO:app:BleComm started +2025-09-28T14:47:38.919 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:47:38.970 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:47:38.970 INFO:src.app:BLE background loop started +2025-09-28T14:47:39.026 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:47:40.912 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:48:23.166 INFO:src.app:disconnect: requested +2025-09-28T14:48:23.297 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T14:48:28.300 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:48:28.300 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:48:31.252 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:51:11.068 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:52:07.716 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:52:07.743 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:52:07.750 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:52:07.751 INFO:src.app:BLE background loop started +2025-09-28T14:52:07.751 INFO:app:BleComm started +2025-09-28T14:52:07.756 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:52:07.799 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:52:07.799 INFO:src.app:BLE background loop started +2025-09-28T14:52:07.846 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:52:09.819 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:52:32.668 INFO:src.app:Scheduling BLE disconnect +2025-09-28T14:54:27.507 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:54:27.532 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T14:54:27.539 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:54:27.540 INFO:src.app:BLE background loop started +2025-09-28T14:54:27.540 INFO:app:BleComm started +2025-09-28T14:54:27.545 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:54:27.590 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T14:54:27.590 INFO:src.app:BLE background loop started +2025-09-28T14:54:27.659 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T14:54:29.933 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T14:55:25.547 INFO:src.app:Scheduling BLE disconnect +2025-09-28T17:26:50.451 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:31:22.743 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:31:22.803 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:31:22.803 INFO:src.app:BLE background loop started +2025-09-28T17:31:22.804 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:31:22.883 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:33:19.366 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:33:19.436 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:33:19.437 INFO:src.app:BLE background loop started +2025-09-28T17:33:19.440 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:33:19.520 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:33:29.564 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:33:34.576 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:33:34.576 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:33:44.602 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:33:49.610 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:33:49.610 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:33:59.636 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:34:04.639 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:34:04.639 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:34:14.677 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:34:19.689 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:34:19.689 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:34:29.717 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:34:34.724 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:34:34.724 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:34:44.769 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:34:49.777 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:34:49.777 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:34:59.799 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:35:04.805 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:35:04.805 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:35:14.843 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:35:19.849 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:35:19.849 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:35:26.287 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:35:26.352 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:35:26.353 INFO:src.app:BLE background loop started +2025-09-28T17:35:26.354 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:35:26.429 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:35:36.459 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:35:41.462 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:35:41.462 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:35:51.487 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:35:56.489 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:35:56.489 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:36:06.511 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:36:11.524 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:36:11.524 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:36:21.539 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:36:26.545 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:36:26.545 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:36:36.577 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:36:41.589 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:36:41.589 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:36:51.616 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:36:56.627 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:36:56.627 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:37:06.664 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:37:11.679 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:37:11.679 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:37:21.705 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:37:26.721 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:37:26.721 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:37:36.767 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:37:41.782 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:37:41.782 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:37:51.819 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:37:56.832 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:37:56.832 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:38:06.876 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:38:11.878 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:38:11.879 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:38:21.892 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:38:26.906 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:38:26.906 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:38:36.931 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:38:41.933 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:38:41.933 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:38:51.974 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:38:56.981 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:38:56.982 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:39:07.010 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:39:12.014 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:39:12.014 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:39:22.040 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:39:27.044 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:39:27.044 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:39:37.064 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:39:42.069 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:39:42.069 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:39:52.101 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:39:57.104 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:39:57.104 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:40:07.124 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:40:12.139 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:40:12.139 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:40:22.189 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:40:27.198 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:40:27.198 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:40:37.238 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:40:42.244 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:40:42.244 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:40:52.266 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:40:57.274 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:40:57.274 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:41:07.312 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:41:12.321 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:41:12.321 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:41:22.362 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:41:27.363 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:41:27.363 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:41:37.376 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:41:42.383 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:41:42.383 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:41:52.406 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:41:57.413 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:41:57.413 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:42:07.442 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:42:12.448 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:42:12.449 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:42:22.484 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:42:27.490 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:42:27.490 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:42:37.510 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:42:42.511 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:42:42.511 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:42:52.542 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:42:57.557 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:42:57.558 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:43:07.596 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:43:12.599 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:43:12.599 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:43:22.625 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:43:27.635 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:43:27.637 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:43:37.669 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:43:42.671 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:43:42.671 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:43:52.719 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:43:57.727 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:43:57.727 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:44:07.746 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:44:12.748 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:44:12.748 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:44:22.779 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:44:27.794 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:44:27.794 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:44:37.814 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:44:42.815 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:44:42.815 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:44:52.852 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:44:57.854 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:44:57.854 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:45:07.884 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:45:12.886 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:45:12.886 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:45:21.956 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:45:22.014 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:45:22.015 INFO:src.app:BLE background loop started +2025-09-28T17:45:22.016 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:45:22.085 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:49:39.486 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:49:39.543 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:49:39.544 INFO:src.app:BLE background loop started +2025-09-28T17:49:39.545 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:49:39.617 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:52:48.158 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:52:48.215 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:52:48.216 INFO:src.app:BLE background loop started +2025-09-28T17:52:48.217 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:52:48.283 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:52:58.330 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:53:03.333 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:53:03.333 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:53:13.356 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:53:18.359 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:53:18.359 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:53:28.377 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:53:33.392 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:53:33.392 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:53:43.433 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:53:48.435 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:53:48.435 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:53:58.468 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:54:03.480 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:54:03.480 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:54:13.525 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:54:18.536 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:54:18.536 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:54:28.574 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:54:33.579 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:54:33.579 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:54:43.603 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:55:59.631 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T17:55:59.691 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:55:59.692 INFO:src.app:BLE background loop started +2025-09-28T17:55:59.692 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:55:59.761 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T17:56:09.793 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T17:56:14.808 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T17:56:14.808 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:02:02.886 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:07:37.044 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:08:01.850 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:10:06.105 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:15:08.496 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:15:12.058 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:16:35.688 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:16:35.714 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:16:35.721 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:16:35.722 INFO:src.app:BLE background loop started +2025-09-28T18:16:35.723 INFO:app:BleComm started +2025-09-28T18:16:35.723 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:16:35.806 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:17:03.030 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:17:03.059 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:17:03.066 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:17:03.067 INFO:src.app:BLE background loop started +2025-09-28T18:17:03.068 INFO:app:BleComm started +2025-09-28T18:17:03.078 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:17:03.152 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:17:03.190 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:17:03.190 INFO:src.app:BLE background loop started +2025-09-28T18:17:11.997 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:17:30.606 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:17:39.215 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:17:39.243 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:17:39.249 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:17:39.249 INFO:src.app:BLE background loop started +2025-09-28T18:17:39.249 INFO:app:BleComm started +2025-09-28T18:17:39.252 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:17:39.363 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:17:39.364 INFO:src.app:BLE background loop started +2025-09-28T18:17:39.365 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:17:42.269 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:18:18.721 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:19:12.551 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:19:12.578 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:19:12.584 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:19:12.584 INFO:src.app:BLE background loop started +2025-09-28T18:19:12.584 INFO:app:BleComm started +2025-09-28T18:19:12.584 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:19:12.679 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:19:14.668 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:19:30.782 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:19:37.074 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:19:37.098 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:19:37.104 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:19:37.106 INFO:src.app:BLE background loop started +2025-09-28T18:19:37.106 INFO:app:BleComm started +2025-09-28T18:19:37.117 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:19:37.188 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:19:37.222 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:19:37.223 INFO:src.app:BLE background loop started +2025-09-28T18:19:39.163 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:21:19.391 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:21:23.113 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:21:29.441 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:21:29.499 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:21:29.499 INFO:src.app:BLE background loop started +2025-09-28T18:21:29.501 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:21:29.525 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:22:01.756 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:22:01.784 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:22:01.784 INFO:src.app:BLE background loop started +2025-09-28T18:22:01.785 INFO:src.app:BleComm started +2025-09-28T18:22:01.815 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:22:01.816 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:22:01.816 INFO:src.app:BLE background loop started +2025-09-28T18:22:01.841 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:22:52.163 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:23:07.716 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:23:07.743 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:23:07.751 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:23:07.753 INFO:src.app:BLE background loop started +2025-09-28T18:23:07.754 INFO:app:BleComm started +2025-09-28T18:23:07.754 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:23:07.817 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:23:09.960 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:23:13.328 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:23:18.702 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:23:18.730 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:23:18.737 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:23:18.737 INFO:src.app:BLE background loop started +2025-09-28T18:23:18.737 INFO:app:BleComm started +2025-09-28T18:23:18.748 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:23:18.819 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:23:18.829 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:23:18.829 INFO:src.app:BLE background loop started +2025-09-28T18:23:18.829 INFO:src.app:BleComm started +2025-09-28T18:23:18.861 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:23:18.861 INFO:src.app:BLE background loop started +2025-09-28T18:23:20.714 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:23:42.807 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:23:42.916 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:24:49.947 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:24:49.971 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:24:49.977 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:24:49.978 INFO:src.app:BLE background loop started +2025-09-28T18:24:49.978 INFO:app:BleComm started +2025-09-28T18:24:49.979 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:24:50.078 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:24:50.083 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:24:50.083 INFO:src.app:BLE background loop started +2025-09-28T18:24:50.083 INFO:src.app:BleComm started +2025-09-28T18:24:50.114 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:24:50.114 INFO:src.app:BLE background loop started +2025-09-28T18:24:52.094 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:25:07.541 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:25:07.657 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:25:48.326 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:25:48.355 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:25:48.356 INFO:src.app:BLE background loop started +2025-09-28T18:25:48.356 INFO:src.app:BleComm started +2025-09-28T18:25:48.359 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:25:48.433 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:26:48.429 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:26:48.456 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:26:48.463 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:26:48.463 INFO:src.app:BLE background loop started +2025-09-28T18:26:48.465 INFO:app:BleComm started +2025-09-28T18:26:48.466 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:26:48.539 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:26:48.540 INFO:src.app:BLE background loop started +2025-09-28T18:26:48.540 INFO:src.app:BleComm started +2025-09-28T18:26:48.571 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:26:48.571 INFO:src.app:BLE background loop started +2025-09-28T18:26:48.595 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:26:51.510 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:28:11.882 INFO:src.app:disconnect: requested +2025-09-28T18:28:12.267 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T18:28:17.269 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:28:17.269 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:28:20.325 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:29:10.511 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:29:10.620 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:30:42.369 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:30:42.403 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:30:42.405 INFO:src.app:BLE background loop started +2025-09-28T18:30:42.405 INFO:src.app:BleComm started +2025-09-28T18:31:12.485 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:31:12.512 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:12.513 INFO:src.app:BLE background loop started +2025-09-28T18:31:12.513 INFO:src.app:BleComm started +2025-09-28T18:31:12.548 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:12.549 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:12.549 INFO:src.app:BLE background loop started +2025-09-28T18:31:12.575 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:31:18.941 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:31:18.970 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:18.971 INFO:src.app:BLE background loop started +2025-09-28T18:31:18.971 INFO:src.app:BleComm started +2025-09-28T18:31:51.816 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:31:51.842 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T18:31:51.849 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:51.849 INFO:src.app:BLE background loop started +2025-09-28T18:31:51.851 INFO:app:BleComm started +2025-09-28T18:31:51.851 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:51.923 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T18:31:51.946 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:51.946 INFO:src.app:BLE background loop started +2025-09-28T18:31:51.947 INFO:src.app:BleComm started +2025-09-28T18:31:51.976 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T18:31:51.977 INFO:src.app:BLE background loop started +2025-09-28T18:31:54.750 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T18:33:12.599 INFO:src.app:Scheduling BLE disconnect +2025-09-28T18:33:12.713 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:24:24.333 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:24:58.893 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:24:58.926 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:24:58.933 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:24:58.934 INFO:src.app:BLE background loop started +2025-09-28T19:24:58.934 INFO:app:BleComm started +2025-09-28T19:24:58.935 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:24:59.023 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:25:01.235 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:25:02.482 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:25:12.439 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:25:12.461 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:25:12.469 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:25:12.469 INFO:src.app:BLE background loop started +2025-09-28T19:25:12.470 INFO:app:BleComm started +2025-09-28T19:25:12.472 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:25:12.556 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:25:15.019 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:25:20.545 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:27:49.909 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:27:49.933 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:27:49.939 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:27:49.940 INFO:src.app:BLE background loop started +2025-09-28T19:27:49.941 INFO:app:BleComm started +2025-09-28T19:27:49.943 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:27:50.016 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:27:52.640 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:27:53.650 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:28:10.323 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:28:10.349 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:28:10.355 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:28:10.356 INFO:src.app:BLE background loop started +2025-09-28T19:28:10.356 INFO:app:BleComm started +2025-09-28T19:28:10.357 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:28:10.458 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:28:12.787 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:28:12.950 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:29:18.675 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:29:18.702 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:29:18.710 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:29:18.711 INFO:src.app:BLE background loop started +2025-09-28T19:29:18.711 INFO:app:BleComm started +2025-09-28T19:29:18.712 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:29:18.786 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:29:20.690 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:29:21.017 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:29:53.673 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:29:53.697 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:29:53.704 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:29:53.704 INFO:src.app:BLE background loop started +2025-09-28T19:29:53.704 INFO:app:BleComm started +2025-09-28T19:29:53.706 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:29:53.787 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:29:55.924 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:30:16.470 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:33:52.041 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:34:04.829 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:34:04.857 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:34:04.864 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:34:04.864 INFO:src.app:BLE background loop started +2025-09-28T19:34:04.865 INFO:app:BleComm started +2025-09-28T19:34:04.865 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:34:04.952 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:34:07.565 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:34:15.016 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:34:15.125 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T19:39:39.528 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:39:52.871 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:39:52.897 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:39:52.905 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:39:52.906 INFO:src.app:BLE background loop started +2025-09-28T19:39:52.906 INFO:app:BleComm started +2025-09-28T19:39:52.907 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:39:52.991 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:39:54.890 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:41:40.982 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:44:52.169 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:46:53.532 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:47:58.042 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:47:58.078 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:47:58.085 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:47:58.086 INFO:src.app:BLE background loop started +2025-09-28T19:47:58.086 INFO:app:BleComm started +2025-09-28T19:47:58.087 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:47:58.162 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:48:00.351 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:48:00.621 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:48:11.145 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:48:11.174 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:48:11.182 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:48:11.183 INFO:src.app:BLE background loop started +2025-09-28T19:48:11.183 INFO:app:BleComm started +2025-09-28T19:48:11.190 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:48:11.275 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:48:13.642 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:49:00.841 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:50:17.415 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:50:35.217 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:50:35.246 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:50:35.252 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:50:35.254 INFO:src.app:BLE background loop started +2025-09-28T19:50:35.254 INFO:app:BleComm started +2025-09-28T19:50:35.255 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:50:35.335 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:50:37.566 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:50:42.830 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:50:54.573 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:50:54.598 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:50:54.605 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:50:54.606 INFO:src.app:BLE background loop started +2025-09-28T19:50:54.607 INFO:app:BleComm started +2025-09-28T19:50:54.607 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:50:54.673 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:50:56.888 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:53:54.492 INFO:src.app:Scheduling BLE disconnect +2025-09-28T19:55:22.660 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:56:04.235 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:57:06.204 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:58:08.062 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:58:41.900 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:58:59.030 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T19:58:59.058 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:58:59.059 INFO:src.app:BLE background loop started +2025-09-28T19:58:59.060 INFO:src.app:BleComm started +2025-09-28T19:58:59.060 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T19:58:59.144 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T19:59:01.872 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T19:59:02.063 INFO:src.app:Scheduling BLE disconnect +2025-09-28T20:00:07.031 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T20:00:07.060 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T20:00:07.068 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T20:00:07.069 INFO:src.app:BLE background loop started +2025-09-28T20:00:07.069 INFO:app:BleComm started +2025-09-28T20:00:07.069 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T20:00:07.142 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T20:00:09.369 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T20:00:11.107 INFO:src.app:Scheduling BLE disconnect +2025-09-28T20:00:20.722 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T20:00:20.751 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T20:00:20.759 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T20:00:20.760 INFO:src.app:BLE background loop started +2025-09-28T20:00:20.760 INFO:app:BleComm started +2025-09-28T20:00:20.760 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T20:00:20.824 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T20:00:20.950 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T20:00:20.951 INFO:src.app:BLE background loop started +2025-09-28T20:00:20.951 INFO:src.app:BleComm started +2025-09-28T20:00:22.840 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T20:00:56.279 INFO:src.app:Scheduling BLE disconnect +2025-09-28T20:00:56.393 INFO:src.app:Scheduling BLE disconnect +2025-09-28T20:03:19.341 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:09:12.269 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:09:12.297 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:09:12.304 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:09:12.305 INFO:src.app:BLE background loop started +2025-09-28T21:09:12.305 INFO:app:BleComm started +2025-09-28T21:09:12.315 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:09:12.406 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T21:09:12.548 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:09:12.548 INFO:src.app:BLE background loop started +2025-09-28T21:09:12.548 INFO:src.app:BleComm started +2025-09-28T21:09:14.263 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T21:19:43.827 INFO:src.app:disconnect: requested +2025-09-28T21:19:44.008 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T21:19:49.021 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:19:49.021 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:19:54.031 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:19:54.031 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:19:59.038 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:19:59.039 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:04.045 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:04.045 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:09.052 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:09.052 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:14.060 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:14.060 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:19.064 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:19.065 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:24.077 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:24.078 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:29.093 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:29.093 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:34.101 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:34.102 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:39.117 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:39.118 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:44.128 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:44.128 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:49.138 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:49.139 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:54.140 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:54.141 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:20:59.149 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:20:59.150 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:04.150 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:04.151 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:09.165 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:09.166 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:14.180 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:14.180 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:19.189 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:19.189 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:24.193 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:24.195 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:29.203 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:29.204 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:34.217 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:34.218 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:39.223 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:39.224 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:44.231 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:44.231 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:49.245 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:49.245 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:54.251 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:54.251 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:21:59.256 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:21:59.256 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:22:04.262 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:22:04.263 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:22:09.265 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:22:09.265 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:22:14.279 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:22:14.279 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:22:19.288 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:22:19.289 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:23:42.971 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:26:25.643 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:26:25.671 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:26:25.678 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:25.679 INFO:src.app:BLE background loop started +2025-09-28T21:26:25.679 INFO:app:BleComm started +2025-09-28T21:26:25.686 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:25.687 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:26:25.904 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:25.904 INFO:src.app:BLE background loop started +2025-09-28T21:26:25.904 INFO:src.app:BleComm started +2025-09-28T21:26:30.692 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:30.692 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:26:35.694 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:35.694 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:26:40.702 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:40.704 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:26:45.716 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:45.717 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:26:50.727 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:50.727 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:26:55.740 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:26:55.740 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:00.755 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:00.756 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:05.760 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:05.760 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:10.772 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:10.772 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:15.784 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:15.784 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:20.788 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:20.788 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:25.790 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:25.791 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:30.798 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:30.798 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:35.801 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:35.802 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:40.807 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:40.807 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:45.812 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:45.813 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:50.829 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:50.830 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:27:55.840 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:27:55.841 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:00.843 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:00.844 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:05.859 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:05.859 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:10.870 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:10.872 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:15.880 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:15.880 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:20.889 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:20.890 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:25.894 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:25.896 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:30.898 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:30.899 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:35.909 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:35.909 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:40.924 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:40.925 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:45.931 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:45.931 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:50.939 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:50.940 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:28:55.943 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:28:55.944 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:29:00.953 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:29:00.953 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:36:03.793 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:36:55.538 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:36:55.563 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:36:55.569 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:36:55.571 INFO:src.app:BLE background loop started +2025-09-28T21:36:55.571 INFO:app:BleComm started +2025-09-28T21:36:55.572 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:36:55.572 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:36:55.807 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:36:55.807 INFO:src.app:BLE background loop started +2025-09-28T21:36:55.807 INFO:src.app:BleComm started +2025-09-28T21:37:00.577 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:00.577 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:05.589 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:05.589 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:10.596 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:10.596 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:15.609 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:15.609 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:20.611 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:20.611 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:25.615 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:25.615 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:30.627 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:30.627 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:35.631 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:35.631 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:40.644 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:40.644 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:45.647 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:45.648 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:50.656 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:50.656 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:37:55.666 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:37:55.666 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:00.675 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:00.675 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:05.684 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:05.685 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:10.701 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:10.701 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:15.712 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:15.712 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:20.720 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:20.720 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:25.728 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:25.728 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:30.743 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:30.744 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:35.751 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:38:35.751 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:38:58.001 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:39:53.567 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:39:53.594 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:39:53.600 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:39:53.602 INFO:src.app:BLE background loop started +2025-09-28T21:39:53.602 INFO:app:BleComm started +2025-09-28T21:39:53.603 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:39:53.604 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:39:53.842 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:39:53.843 INFO:src.app:BLE background loop started +2025-09-28T21:39:53.843 INFO:src.app:BleComm started +2025-09-28T21:39:58.613 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:39:58.613 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:03.622 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:03.623 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:08.638 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:08.638 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:13.650 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:13.650 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:18.654 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:18.654 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:23.655 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:23.655 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:28.657 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:28.658 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:33.661 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:33.661 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:38.675 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:38.675 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:43.684 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:43.685 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:48.692 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:48.692 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:53.700 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:53.701 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:40:58.712 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:40:58.712 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:03.727 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:03.727 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:08.736 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:08.736 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:13.744 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:13.744 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:18.751 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:18.751 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:23.767 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:23.767 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:28.782 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:28.783 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:33.787 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:33.788 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:38.790 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:38.790 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:43.834 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:43.836 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:48.840 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:48.841 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:53.849 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:53.849 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:41:58.861 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:41:58.862 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:03.871 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:03.871 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:08.879 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:08.879 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:13.882 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:13.882 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:18.884 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:18.885 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:45.273 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:42:45.300 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:42:45.309 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:45.309 INFO:src.app:BLE background loop started +2025-09-28T21:42:45.309 INFO:app:BleComm started +2025-09-28T21:42:45.311 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:45.311 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:45.557 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:45.557 INFO:src.app:BLE background loop started +2025-09-28T21:42:45.558 INFO:src.app:BleComm started +2025-09-28T21:42:50.332 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:50.332 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:42:55.346 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:42:55.346 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:43:00.355 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:43:00.356 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T21:43:05.372 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:43:05.372 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T21:43:09.664 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T21:56:11.612 INFO:src.app:Scheduling BLE disconnect +2025-09-28T21:56:11.719 INFO:src.app:Scheduling BLE disconnect +2025-09-28T21:56:45.626 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:56:45.661 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T21:56:45.668 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:56:45.669 INFO:src.app:BLE background loop started +2025-09-28T21:56:45.669 INFO:app:BleComm started +2025-09-28T21:56:45.670 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:56:45.770 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T21:56:45.901 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T21:56:45.901 INFO:src.app:BLE background loop started +2025-09-28T21:56:45.901 INFO:src.app:BleComm started +2025-09-28T21:56:47.684 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T21:57:17.114 INFO:src.app:Scheduling BLE disconnect +2025-09-28T21:57:17.219 INFO:src.app:Scheduling BLE disconnect +2025-09-28T21:59:55.220 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:00:45.471 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:00:45.498 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:00:45.505 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:00:45.506 INFO:src.app:BLE background loop started +2025-09-28T22:00:45.506 INFO:app:BleComm started +2025-09-28T22:00:45.517 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:00:45.517 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T22:00:45.740 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:00:45.740 INFO:src.app:BLE background loop started +2025-09-28T22:00:45.740 INFO:src.app:BleComm started +2025-09-28T22:00:50.529 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:00:50.529 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T22:00:55.530 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:00:55.530 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T22:01:00.533 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:01:00.533 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T22:01:05.540 INFO:src.app:Loaded BLE config: address='' name='' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:01:05.540 INFO:src.app:No BLE target found; retrying in 5.0s +2025-09-28T22:01:10.548 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:01:10.548 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T22:01:17.729 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T22:09:09.665 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:09:09.780 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:09:10.224 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:10:09.404 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:10:09.430 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:10:09.437 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:10:09.438 INFO:src.app:BLE background loop started +2025-09-28T22:10:09.439 INFO:app:BleComm started +2025-09-28T22:10:09.439 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:10:09.540 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T22:10:09.669 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:10:09.669 INFO:src.app:BLE background loop started +2025-09-28T22:10:09.669 INFO:src.app:BleComm started +2025-09-28T22:10:11.840 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T22:10:15.402 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31204, thread=9432) args=(224,252,69,30) +2025-09-28T22:10:15.402 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:10:15.545 INFO:src.app:Wrote payload to characteristic 0xFFE1: e0fc451e +2025-09-28T22:10:17.775 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31204, thread=624) args=(204,117,167,30) +2025-09-28T22:10:17.776 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:10:17.942 INFO:src.app:Wrote payload to characteristic 0xFFE1: cc75a71e +2025-09-28T22:10:21.673 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31204, thread=30244) args=(224,252,69,30) +2025-09-28T22:10:21.674 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:10:21.844 INFO:src.app:Wrote payload to characteristic 0xFFE1: e0fc451e +2025-09-28T22:10:31.340 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31204, thread=17248) args=(224,252,69,30) +2025-09-28T22:10:31.341 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:10:31.504 INFO:src.app:Wrote payload to characteristic 0xFFE1: e0fc451e +2025-09-28T22:10:49.235 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:10:49.345 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:16:01.736 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:17:09.755 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:17:09.784 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:17:09.791 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:17:09.793 INFO:src.app:BLE background loop started +2025-09-28T22:17:09.793 INFO:app:BleComm started +2025-09-28T22:17:09.794 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:17:09.879 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T22:17:10.030 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:17:10.032 INFO:src.app:BLE background loop started +2025-09-28T22:17:10.032 INFO:src.app:BleComm started +2025-09-28T22:17:11.898 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T22:17:14.903 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=12516) args=(224,252,69,30) +2025-09-28T22:17:14.904 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:17:15.005 INFO:src.app:Wrote payload to characteristic 0xFFE1: e0fc451e +2025-09-28T22:17:17.157 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=30476) args=(204,117,167,30) +2025-09-28T22:17:17.157 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:17:17.284 INFO:src.app:Wrote payload to characteristic 0xFFE1: cc75a71e +2025-09-28T22:17:20.281 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=14768) args=(23,0,0,44) +2025-09-28T22:17:20.282 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:17:20.464 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T22:17:26.790 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=14272) args=(50,0,0,44) +2025-09-28T22:17:26.790 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:17:26.944 INFO:src.app:Wrote payload to characteristic 0xFFE1: 3200002c +2025-09-28T22:22:09.256 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=22320) args=(224,252,69,30) +2025-09-28T22:22:09.256 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:22:09.427 INFO:src.app:Wrote payload to characteristic 0xFFE1: e0fc451e +2025-09-28T22:23:04.264 INFO:app:Session started - PrintAndGIF +2025-09-28T22:23:04.349 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=32104) args=(5,0,0,44) +2025-09-28T22:23:04.350 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:23:04.508 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T22:23:04.508 INFO:app:Countdown started - 5 sec(s) +2025-09-28T22:23:08.505 INFO:app:capture_start event received +2025-09-28T22:23:08.730 INFO:app:File downloaded: 20250928_222308_719.jpg +2025-09-28T22:23:12.293 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=22272) args=(5,0,0,44) +2025-09-28T22:23:12.293 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:23:12.427 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T22:23:12.427 INFO:app:Countdown started - 5 sec(s) +2025-09-28T22:23:16.457 INFO:app:capture_start event received +2025-09-28T22:23:16.789 INFO:app:File downloaded: 20250928_222316_786.jpg +2025-09-28T22:23:19.868 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=32104) args=(5,0,0,44) +2025-09-28T22:23:19.870 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:23:20.048 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T22:23:20.050 INFO:app:Countdown started - 5 sec(s) +2025-09-28T22:23:24.046 INFO:app:capture_start event received +2025-09-28T22:23:24.309 INFO:app:File downloaded: 20250928_222324_306.jpg +2025-09-28T22:23:27.399 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=32616) args=(5,0,0,44) +2025-09-28T22:23:27.400 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:23:27.549 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T22:23:27.550 INFO:app:Countdown started - 5 sec(s) +2025-09-28T22:23:31.573 INFO:app:capture_start event received +2025-09-28T22:23:31.755 INFO:app:File downloaded: 20250928_222331_753.jpg +2025-09-28T22:23:35.268 INFO:app:Processing started... +2025-09-28T22:23:35.517 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=12516) args=(204,117,167,30) +2025-09-28T22:23:35.519 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:23:35.648 INFO:src.app:Wrote payload to characteristic 0xFFE1: cc75a71e +2025-09-28T22:23:35.648 INFO:app:Sharing screen Animation +2025-09-28T22:23:37.996 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Prints\20250928_222335_265.jpg +2025-09-28T22:23:38.031 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_222308_719.jpg +2025-09-28T22:23:38.536 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Animated\20250928_222335_265.mp4 +2025-09-28T22:23:39.113 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_222316_786.jpg +2025-09-28T22:23:41.299 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_222324_306.jpg +2025-09-28T22:23:42.311 INFO:app:File uploaded: C:\dslrBooth\Test Event1\Singles\20250928_222331_753.jpg +2025-09-28T22:23:47.204 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=23472) args=(224,252,69,30) +2025-09-28T22:23:47.205 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:23:47.349 INFO:src.app:Wrote payload to characteristic 0xFFE1: e0fc451e +2025-09-28T22:24:02.626 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=596) args=(23,0,0,44) +2025-09-28T22:24:02.627 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:24:02.769 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T22:24:05.729 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=31392) args=(84,222,237,30) +2025-09-28T22:24:05.729 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:24:05.889 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-28T22:24:09.611 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=5668) args=(23,0,0,44) +2025-09-28T22:24:09.612 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:24:09.790 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T22:28:18.355 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=31636) args=(84,222,237,30) +2025-09-28T22:28:18.356 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:28:18.492 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-28T22:28:20.161 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=6616, thread=21532) args=(23,0,0,44) +2025-09-28T22:28:20.161 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:28:20.231 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T22:30:07.295 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:30:07.413 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:30:22.504 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:30:22.527 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:30:22.535 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:30:22.536 INFO:src.app:BLE background loop started +2025-09-28T22:30:22.537 INFO:app:BleComm started +2025-09-28T22:30:22.537 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:30:22.609 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T22:30:22.743 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:30:22.743 INFO:src.app:BLE background loop started +2025-09-28T22:30:22.743 INFO:src.app:BleComm started +2025-09-28T22:30:25.017 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T22:33:01.768 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=26916, thread=30140) args=(23,0,0,44) +2025-09-28T22:33:01.770 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:33:01.939 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T22:33:04.709 INFO:app:Session started - PrintAndGIF +2025-09-28T22:33:04.758 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=26916, thread=14432) args=(5,0,0,44) +2025-09-28T22:33:04.758 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:33:04.933 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T22:33:04.933 INFO:app:Countdown started - 5 sec(s) +2025-09-28T22:33:08.908 INFO:app:capture_start event received +2025-09-28T22:33:09.116 INFO:app:File downloaded: 20250928_223309_114.jpg +2025-09-28T22:33:12.209 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=26916, thread=32360) args=(5,0,0,44) +2025-09-28T22:33:12.210 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:33:12.373 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-28T22:33:12.375 INFO:app:Countdown started - 5 sec(s) +2025-09-28T22:33:16.383 INFO:app:capture_start event received +2025-09-28T22:33:16.542 INFO:app:File downloaded: 20250928_223316_540.jpg +2025-09-28T22:33:20.059 INFO:app:Processing started... +2025-09-28T22:33:20.237 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=26916, thread=31488) args=(84,222,237,30) +2025-09-28T22:33:20.238 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:33:20.474 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-28T22:33:20.475 INFO:app:Sharing screen Animation +2025-09-28T22:33:21.653 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250928_223309_114.jpg +2025-09-28T22:33:21.710 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250928_223320_054.jpg +2025-09-28T22:33:21.825 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250928_223320_054.mp4 +2025-09-28T22:33:23.653 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250928_223316_540.jpg +2025-09-28T22:33:50.580 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=26916, thread=2452) args=(23,0,0,44) +2025-09-28T22:33:50.581 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-28T22:33:50.715 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-28T22:40:00.845 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:40:00.960 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:43:01.761 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:44:07.433 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:44:07.463 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:44:07.472 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:44:07.472 INFO:src.app:BLE background loop started +2025-09-28T22:44:07.473 INFO:app:BleComm started +2025-09-28T22:44:07.474 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:44:07.592 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T22:44:07.752 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:44:07.754 INFO:src.app:BLE background loop started +2025-09-28T22:44:07.754 INFO:src.app:BleComm started +2025-09-28T22:44:09.409 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T22:44:34.029 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:44:34.128 INFO:src.app:Scheduling BLE disconnect +2025-09-28T22:46:06.144 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:54:56.006 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:54:56.035 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-28T22:54:56.043 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:54:56.044 INFO:src.app:BLE background loop started +2025-09-28T22:54:56.044 INFO:app:BleComm started +2025-09-28T22:54:56.045 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:54:56.129 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T22:54:56.300 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T22:54:56.300 INFO:src.app:BLE background loop started +2025-09-28T22:54:56.301 INFO:src.app:BleComm started +2025-09-28T22:54:58.369 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T23:45:25.088 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-28T23:45:30.102 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T23:45:30.104 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T23:45:40.134 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T23:45:45.137 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T23:45:45.137 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T23:45:55.183 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T23:46:00.197 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T23:46:00.198 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T23:46:10.233 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-28T23:46:15.238 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-28T23:46:15.239 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-28T23:46:18.968 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-28T23:46:52.078 INFO:src.app:Scheduling BLE disconnect +2025-09-28T23:46:52.183 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:13:19.710 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:13:19.748 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:13:19.757 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:13:19.758 INFO:src.app:BLE background loop started +2025-09-29T00:13:19.758 INFO:app:BleComm started +2025-09-29T00:13:19.759 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:13:19.856 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:13:20.000 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:13:20.000 INFO:src.app:BLE background loop started +2025-09-29T00:13:20.000 INFO:src.app:BleComm started +2025-09-29T00:13:22.150 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-29T00:14:02.813 INFO:app:Session started - PrintAndGIF +2025-09-29T00:14:02.895 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=29732) args=(5,0,0,44) +2025-09-29T00:14:02.895 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:03.055 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:14:03.055 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:14:07.022 INFO:app:capture_start event received +2025-09-29T00:14:07.226 INFO:app:File downloaded: 20250929_001407_223.jpg +2025-09-29T00:14:10.300 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=14884) args=(5,0,0,44) +2025-09-29T00:14:10.300 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:10.434 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:14:10.434 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:14:14.456 INFO:app:capture_start event received +2025-09-29T00:14:14.804 INFO:app:File downloaded: 20250929_001414_801.jpg +2025-09-29T00:14:18.306 INFO:app:Processing started... +2025-09-29T00:14:18.479 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=23220) args=(84,222,237,30) +2025-09-29T00:14:18.479 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:18.654 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-29T00:14:18.655 INFO:app:Sharing screen Animation +2025-09-29T00:14:19.897 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001407_223.jpg +2025-09-29T00:14:20.051 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_001418_304.jpg +2025-09-29T00:14:20.131 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250929_001418_304.mp4 +2025-09-29T00:14:20.875 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001414_801.jpg +2025-09-29T00:14:29.276 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=12012) args=(23,0,0,44) +2025-09-29T00:14:29.277 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:29.454 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-29T00:14:35.485 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=26176) args=(0,128,0,30) +2025-09-29T00:14:35.487 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:35.814 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0080001e +2025-09-29T00:14:39.022 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=20276) args=(23,0,0,44) +2025-09-29T00:14:39.024 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:39.174 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-29T00:14:44.904 INFO:app:Session started - PrintAndGIF +2025-09-29T00:14:44.928 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=8728) args=(5,0,0,44) +2025-09-29T00:14:44.928 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:45.054 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:14:45.054 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:14:49.104 INFO:app:capture_start event received +2025-09-29T00:14:49.306 INFO:app:File downloaded: 20250929_001449_304.jpg +2025-09-29T00:14:52.393 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=11852) args=(5,0,0,44) +2025-09-29T00:14:52.394 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:14:52.554 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:14:52.554 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:14:56.549 INFO:app:capture_start event received +2025-09-29T00:14:56.741 INFO:app:File downloaded: 20250929_001456_739.jpg +2025-09-29T00:15:00.257 INFO:app:Processing started... +2025-09-29T00:15:00.434 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=8860) args=(84,222,237,30) +2025-09-29T00:15:00.435 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:00.594 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-29T00:15:00.594 INFO:app:Sharing screen Animation +2025-09-29T00:15:01.567 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001449_304.jpg +2025-09-29T00:15:01.732 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_001500_255.jpg +2025-09-29T00:15:01.875 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250929_001500_255.mp4 +2025-09-29T00:15:02.782 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001456_739.jpg +2025-09-29T00:15:06.316 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=5912) args=(23,0,0,44) +2025-09-29T00:15:06.317 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:06.474 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-29T00:15:08.105 INFO:app:Session started - PrintAndGIF +2025-09-29T00:15:08.140 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=28936) args=(5,0,0,44) +2025-09-29T00:15:08.141 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:08.214 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:15:08.215 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:15:12.334 INFO:app:capture_start event received +2025-09-29T00:15:12.507 INFO:app:File downloaded: 20250929_001512_504.jpg +2025-09-29T00:15:15.582 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=12488) args=(5,0,0,44) +2025-09-29T00:15:15.582 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:15.715 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:15:15.715 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:15:19.754 INFO:app:capture_start event received +2025-09-29T00:15:20.036 INFO:app:File downloaded: 20250929_001520_034.jpg +2025-09-29T00:15:23.507 INFO:app:Processing started... +2025-09-29T00:15:23.663 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=32448) args=(84,222,237,30) +2025-09-29T00:15:23.664 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:23.814 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-29T00:15:23.814 INFO:app:Sharing screen Animation +2025-09-29T00:15:24.781 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001512_504.jpg +2025-09-29T00:15:25.102 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_001523_505.jpg +2025-09-29T00:15:25.804 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001520_034.jpg +2025-09-29T00:15:25.816 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250929_001523_505.mp4 +2025-09-29T00:15:32.752 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=14756) args=(23,0,0,44) +2025-09-29T00:15:32.752 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:32.935 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-29T00:15:55.335 INFO:app:Session started - PrintAndGIF +2025-09-29T00:15:55.374 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=10264) args=(5,0,0,44) +2025-09-29T00:15:55.374 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:15:55.554 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:15:55.556 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:15:59.533 INFO:app:capture_start event received +2025-09-29T00:15:59.716 INFO:app:File downloaded: 20250929_001559_714.jpg +2025-09-29T00:16:02.802 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=19380) args=(5,0,0,44) +2025-09-29T00:16:02.804 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:16:02.935 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:16:02.935 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:16:06.976 INFO:app:capture_start event received +2025-09-29T00:16:07.266 INFO:app:File downloaded: 20250929_001607_265.jpg +2025-09-29T00:16:10.756 INFO:app:Processing started... +2025-09-29T00:16:10.925 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=33092) args=(84,222,237,30) +2025-09-29T00:16:10.926 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:16:11.095 INFO:src.app:Wrote payload to characteristic 0xFFE1: 54deed1e +2025-09-29T00:16:11.095 INFO:app:Sharing screen Animation +2025-09-29T00:16:12.243 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001559_714.jpg +2025-09-29T00:16:12.680 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250929_001610_755.mp4 +2025-09-29T00:16:13.106 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_001610_755.jpg +2025-09-29T00:16:13.426 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_001607_265.jpg +2025-09-29T00:16:15.346 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=18084, thread=20088) args=(23,0,0,44) +2025-09-29T00:16:15.347 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:16:15.475 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1700002c +2025-09-29T00:16:24.111 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:16:24.224 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:19:32.678 INFO:app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:19:32.706 INFO:src.app:Loaded animation config from d:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:19:32.714 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:19:32.714 INFO:src.app:BLE background loop started +2025-09-29T00:19:32.714 INFO:app:BleComm started +2025-09-29T00:19:32.726 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:19:32.845 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:19:32.939 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:19:32.939 INFO:src.app:BLE background loop started +2025-09-29T00:19:32.940 INFO:src.app:BleComm started +2025-09-29T00:19:34.991 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-29T00:20:02.313 INFO:app:Session started - PrintAndGIF +2025-09-29T00:20:02.380 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31132, thread=14348) args=(5,0,0,44) +2025-09-29T00:20:02.381 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:20:02.515 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:20:02.516 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:20:06.523 INFO:app:capture_start event received +2025-09-29T00:20:06.698 INFO:app:File downloaded: 20250929_002006_694.jpg +2025-09-29T00:20:09.773 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31132, thread=29732) args=(5,0,0,44) +2025-09-29T00:20:09.774 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:20:09.956 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:20:09.956 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:20:13.922 INFO:app:capture_start event received +2025-09-29T00:20:14.146 INFO:app:File downloaded: 20250929_002014_142.jpg +2025-09-29T00:20:17.610 INFO:app:Processing started... +2025-09-29T00:20:17.777 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31132, thread=8520) args=(0,128,0,30) +2025-09-29T00:20:17.777 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:20:17.935 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0080001e +2025-09-29T00:20:17.935 INFO:app:Sharing screen Animation +2025-09-29T00:20:19.143 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_002017_608.jpg +2025-09-29T00:20:19.362 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_002006_694.jpg +2025-09-29T00:20:19.744 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250929_002017_608.mp4 +2025-09-29T00:20:20.665 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_002014_142.jpg +2025-09-29T00:20:28.247 INFO:src.app:send_led_command called from d:\Repositories\Development\DslrDirector\src\app.py:35 (pid=31132, thread=25188) args=(65,0,0,44) +2025-09-29T00:20:28.248 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:20:28.380 INFO:src.app:Wrote payload to characteristic 0xFFE1: 4100002c +2025-09-29T00:25:17.419 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:25:37.738 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:25:37.765 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:25:37.773 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:25:37.774 INFO:src.app:BLE background loop started +2025-09-29T00:25:37.774 INFO:app:BleComm started +2025-09-29T00:25:37.785 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:25:37.842 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:25:38.001 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:25:38.002 INFO:src.app:BLE background loop started +2025-09-29T00:25:38.002 INFO:src.app:BleComm started +2025-09-29T00:25:47.881 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:25:52.886 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:25:52.886 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:26:02.925 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:26:07.935 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:26:07.936 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:26:17.979 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:26:22.992 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:26:22.993 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:26:33.020 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:26:38.031 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:26:38.031 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:26:48.068 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:26:53.083 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:26:53.085 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:27:03.114 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:27:08.124 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:27:08.124 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:27:18.170 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:27:22.910 INFO:src.app:disconnect: no client present +2025-09-29T00:27:23.177 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:27:23.178 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:27:27.629 ERROR:src.app:direct connect attempt failed: Device with address E8:06:90:D5:CA:65 was not found. +2025-09-29T00:27:33.210 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:27:36.210 ERROR:src.app:direct connect attempt failed: Device with address E8:06:90:D5:CA:65 was not found. +2025-09-29T00:27:38.225 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:27:38.225 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:27:41.130 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-29T00:27:48.448 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-29T00:27:48.706 INFO:src.app:Client no longer connected: E8:06:90:D5:CA:65 +2025-09-29T00:27:53.460 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:27:53.460 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:27:53.719 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:27:53.719 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:27:55.439 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-29T00:28:03.754 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:28:08.763 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:28:08.763 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:28:18.824 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:28:23.827 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:28:23.828 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:28:33.863 ERROR:src.app:Failed to connect or disconnect cleanly to E8:06:90:D5:CA:65 +2025-09-29T00:28:37.116 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:28:37.227 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:28:46.968 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:28:46.994 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:28:47.000 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:28:47.001 INFO:src.app:BLE background loop started +2025-09-29T00:28:47.001 INFO:app:BleComm started +2025-09-29T00:28:47.002 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:28:47.094 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:28:47.241 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:28:47.241 INFO:src.app:BLE background loop started +2025-09-29T00:28:47.241 INFO:src.app:BleComm started +2025-09-29T00:28:49.033 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-29T00:29:19.517 INFO:app:Session started - PrintAndGIF +2025-09-29T00:29:19.593 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=32924) args=(5,0,0,44) +2025-09-29T00:29:19.594 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:29:19.739 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:29:19.739 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:29:23.720 INFO:app:capture_start event received +2025-09-29T00:29:23.913 INFO:app:File downloaded: 20250929_002923_911.jpg +2025-09-29T00:29:26.988 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=32824) args=(5,0,0,44) +2025-09-29T00:29:26.989 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:29:27.118 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:29:27.119 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:29:31.145 INFO:app:capture_start event received +2025-09-29T00:29:31.343 INFO:app:File downloaded: 20250929_002931_337.jpg +2025-09-29T00:29:34.823 INFO:app:Processing started... +2025-09-29T00:29:35.002 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=27792) args=(128,0,255,30) +2025-09-29T00:29:35.002 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:29:35.158 INFO:src.app:Wrote payload to characteristic 0xFFE1: 8000ff1e +2025-09-29T00:29:35.158 INFO:app:Sharing screen Animation +2025-09-29T00:29:37.903 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_002923_911.jpg +2025-09-29T00:29:37.913 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_002934_820.jpg +2025-09-29T00:29:37.918 INFO:app:File uploaded: C:\dslrBooth\Demo\Animated\20250929_002934_820.mp4 +2025-09-29T00:29:39.158 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_002931_337.jpg +2025-09-29T00:29:55.338 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=24684) args=(255,128,0,30) +2025-09-29T00:29:55.339 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:29:55.499 INFO:src.app:Wrote payload to characteristic 0xFFE1: ff80001e +2025-09-29T00:29:57.108 INFO:app:Session started - PrintAndGIF +2025-09-29T00:29:57.148 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=33748) args=(5,0,0,44) +2025-09-29T00:29:57.148 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:29:57.242 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:29:57.243 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:30:00.045 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=27944) args=(255,128,0,30) +2025-09-29T00:30:00.045 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:30:00.178 INFO:src.app:Wrote payload to characteristic 0xFFE1: ff80001e +2025-09-29T00:30:29.513 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=21764, thread=3848) args=(255,128,0,30) +2025-09-29T00:30:29.513 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:30:29.638 INFO:src.app:Wrote payload to characteristic 0xFFE1: ff80001e +2025-09-29T00:31:46.730 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:31:46.840 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:32:20.053 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:32:37.497 INFO:app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:32:37.525 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json +2025-09-29T00:32:37.531 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:32:37.532 INFO:src.app:BLE background loop started +2025-09-29T00:32:37.532 INFO:app:BleComm started +2025-09-29T00:32:37.547 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:32:37.634 INFO:src.app:Attempting to connect to BLE address E8:06:90:D5:CA:65 +2025-09-29T00:32:37.775 INFO:src.app:Loaded BLE config: address='E8:06:90:D5:CA:65' name='SP110E-ATA-64' filter='SP110E-ATA' service='0xFFE0' char='0xFFE1' +2025-09-29T00:32:37.775 INFO:src.app:BLE background loop started +2025-09-29T00:32:37.775 INFO:src.app:BleComm started +2025-09-29T00:32:39.600 INFO:src.app:Connected to BLE device E8:06:90:D5:CA:65 +2025-09-29T00:33:19.644 INFO:app:Session started - PrintAndGIF +2025-09-29T00:33:19.716 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=28548, thread=2596) args=(5,0,0,44) +2025-09-29T00:33:19.717 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:33:19.861 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:33:19.862 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:33:23.826 INFO:app:capture_start event received +2025-09-29T00:33:24.035 INFO:app:File downloaded: 20250929_003324_034.jpg +2025-09-29T00:33:27.539 INFO:app:Processing started... +2025-09-29T00:33:27.664 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=28548, thread=33028) args=(0,128,0,30) +2025-09-29T00:33:27.664 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:33:27.840 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0080001e +2025-09-29T00:33:27.840 INFO:app:Sharing screen Animation +2025-09-29T00:33:28.949 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_003327_537.jpg +2025-09-29T00:33:29.094 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_003324_034.jpg +2025-09-29T00:33:33.927 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=28548, thread=32560) args=(128,0,255,30) +2025-09-29T00:33:33.928 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:33:34.081 INFO:src.app:Wrote payload to characteristic 0xFFE1: 8000ff1e +2025-09-29T00:34:29.198 INFO:app:Session started - PrintAndGIF +2025-09-29T00:34:29.232 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=28548, thread=33548) args=(5,0,0,44) +2025-09-29T00:34:29.232 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:34:29.401 INFO:src.app:Wrote payload to characteristic 0xFFE1: 0500002c +2025-09-29T00:34:29.401 INFO:app:Countdown started - 5 sec(s) +2025-09-29T00:34:33.379 INFO:app:capture_start event received +2025-09-29T00:34:33.552 INFO:app:File downloaded: 20250929_003433_550.jpg +2025-09-29T00:34:37.075 INFO:app:Processing started... +2025-09-29T00:34:37.196 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=28548, thread=2512) args=(18,0,0,44) +2025-09-29T00:34:37.196 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:34:37.320 INFO:src.app:Wrote payload to characteristic 0xFFE1: 1200002c +2025-09-29T00:34:37.320 INFO:app:Sharing screen Animation +2025-09-29T00:34:38.257 INFO:app:File uploaded: C:\dslrBooth\Demo\Singles\20250929_003433_550.jpg +2025-09-29T00:34:38.500 INFO:app:File uploaded: C:\dslrBooth\Demo\Prints\20250929_003437_073.jpg +2025-09-29T00:34:42.330 INFO:src.app:send_led_command called from D:\Repositories\Development\DslrDirector\src\app.py:35 (pid=28548, thread=33440) args=(65,0,0,44) +2025-09-29T00:34:42.330 INFO:src.app:Writing to characteristic (resolved) 0000FFE1-0000-1000-8000-00805f9b34fb (original: 0xFFE1) +2025-09-29T00:34:42.480 INFO:src.app:Wrote payload to characteristic 0xFFE1: 4100002c +2025-09-29T00:35:03.006 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:35:03.114 INFO:src.app:Scheduling BLE disconnect +2025-09-29T00:36:50.637 INFO:src.app:Loaded animation config from D:\Repositories\Development\DslrDirector\data\config.json diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..a9fa349 --- /dev/null +++ b/environment.yml @@ -0,0 +1,12 @@ +name: dslrdirector +channels: + - conda-forge +dependencies: + - python=3.12 + - pip + - pip: + - -r requirements.txt +# Usage: +# conda env create -f environment.yml +# conda activate dslrdirector +# python src/app.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c2525d2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +bleak diff --git a/scripts/README_BACKUP.md b/scripts/README_BACKUP.md new file mode 100644 index 0000000..3d7e267 --- /dev/null +++ b/scripts/README_BACKUP.md @@ -0,0 +1,28 @@ +Backup to Gitea + +This folder contains a PowerShell script to snapshot the repository and push the snapshot into a Gitea backup repository. + +Quick steps + +1. On your Gitea server create a repository for backups (for example username/dslr-director-backups). Make it private if desired. +2. Create a personal access token in Gitea for your user with repository push permissions. +3. From the repository root run (PowerShell): + +```powershell +$GITEA_URL = 'https://gitea.example.com' +$GITEA_USER = 'youruser' +$GITEA_TOKEN = 'YOUR_TOKEN' +.\scripts\backup_to_gitea.ps1 -GiteaUrl $GITEA_URL -GiteaUser $GITEA_USER -GiteaToken $GITEA_TOKEN -BackupRepo "youruser/dslr-director-backups" +``` + +What the script does + +- Clones the backup repo into a temporary directory (or pulls latest if already present). +- Creates a timestamped folder under `snapshots/` and copies the project files there (skips `.git` and virtual environments). +- Commits and pushes the snapshot to the backup repo using the provided credentials. + +Notes + +- The script uses `robocopy` for directory copy on Windows. Make sure Git and robocopy are available in PATH. +- The script uses HTTPS pushes with credentials in the URL. Keep your token secret. +- You can schedule this script as a Windows Scheduled Task to run nightly. diff --git a/scripts/backup_to_gitea.ps1 b/scripts/backup_to_gitea.ps1 new file mode 100644 index 0000000..8b3aa19 --- /dev/null +++ b/scripts/backup_to_gitea.ps1 @@ -0,0 +1,101 @@ +<# +Backup the repository to a Gitea backup repository. + +Usage (PowerShell): + # one-time: create a Gitea backup repo and get a personal access token + $GITEA_URL = 'https://gitea.example.com' + $GITEA_USER = 'username' + $GITEA_TOKEN = 'PERSONAL_ACCESS_TOKEN' + .\scripts\backup_to_gitea.ps1 -GiteaUrl $GITEA_URL -GiteaUser $GITEA_USER -GiteaToken $GITEA_TOKEN -BackupRepo "username/dslr-director-backups" + +What it does: + - Creates a timestamped snapshot directory under a local temporary clone of the backup repo + - Copies the current project files into that snapshot (excluding .venv and .git) + - Commits and pushes the snapshot to the remote Gitea backup repository + +Notes: + - The backup repo must already exist on your Gitea server (or create it via the web UI/API). + - Your Gitea token should have repo:push permissions. For HTTPS push the token is used as password. + - This script is idempotent for the same timestamp but you will normally run it manually or from a scheduled task. +#> +param( + [Parameter(Mandatory=$true)] [string] $GiteaUrl, + [Parameter(Mandatory=$true)] [string] $GiteaUser, + [Parameter(Mandatory=$true)] [string] $GiteaToken, + [Parameter(Mandatory=$true)] [string] $BackupRepo, # e.g. "username/dslr-director-backups" + [string] $TempDir = "$env:TEMP\dslr_backups", + [string] $RepoRoot = "$(Resolve-Path ..)" +) + +# Ensure Git is available +if (-not (Get-Command git -ErrorAction SilentlyContinue)) { + Write-Error "git not found in PATH. Install git first." + exit 1 +} + +# Normalize paths +$RepoRoot = Resolve-Path -Path $RepoRoot | Select-Object -ExpandProperty Path +$TempDir = Resolve-Path -Path $TempDir -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue +if (-not $TempDir) { New-Item -ItemType Directory -Path "$env:TEMP\dslr_backups" -Force | Out-Null; $TempDir = "$env:TEMP\dslr_backups" } + +# Make clone path +$repoName = $BackupRepo.Split('/')[-1] +$clonePath = Join-Path $TempDir $repoName + +# Build remote URL with token for HTTPS push +# Format: https://:@gitea.example.com//.git +$remoteUrl = $GiteaUrl.TrimEnd('/') + "/" + $BackupRepo + ".git" +$remoteUrlAuth = $remoteUrl -replace '^(https?://)', "`$1$($GiteaUser):$($GiteaToken)@" + +Write-Host "Using repo root: $RepoRoot" +Write-Host "Cloning backup repo into: $clonePath" + +if (-not (Test-Path $clonePath)) { + git clone $remoteUrl $clonePath 2>&1 | Write-Host + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to clone backup repo. Check credentials and repo existence." + exit 1 + } +} else { + Push-Location $clonePath + git pull 2>&1 | Write-Host + Pop-Location +} + +# Create timestamped snapshot folder +$ts = Get-Date -Format "yyyyMMdd_HHmmss" +$snapshotDir = Join-Path $clonePath "snapshots\$ts" +New-Item -ItemType Directory -Path $snapshotDir -Force | Out-Null + +# Rsync-like copy: use robocopy to preserve structure and skip .git and venv +$exclude = @('.git', '.venv', 'venv', 'node_modules') +$copyOptions = @('/E','/COPY:DAT','/R:2','/W:1') + +foreach ($entry in Get-ChildItem -Path $RepoRoot -Force) { + if ($exclude -contains $entry.Name) { continue } + $dest = Join-Path $snapshotDir $entry.Name + if ($entry.PSIsContainer) { + robocopy $entry.FullName $dest @copyOptions | Out-Null + } else { + Copy-Item -Path $entry.FullName -Destination $dest -Force + } +} + +# Commit and push +Push-Location $clonePath +try { + git add . 2>&1 | Write-Host + git commit -m "Backup snapshot: $ts" 2>&1 | Write-Host + # push using auth in URL + git push $remoteUrlAuth HEAD:main 2>&1 | Write-Host + if ($LASTEXITCODE -ne 0) { + Write-Error "Push failed. You may need to set the remote or use a different branch." + exit 1 + } + Write-Host "Backup pushed to $BackupRepo as snapshot $ts" +} catch { + Write-Error "Backup commit/push failed: $_" + exit 1 +} finally { + Pop-Location +} diff --git a/src/BleComm.py b/src/BleComm.py new file mode 100644 index 0000000..89a84a5 --- /dev/null +++ b/src/BleComm.py @@ -0,0 +1,557 @@ +""" +BLE communication helper for DslrDirector. + +Behavior: +- On import, nothing starts automatically. Call start() to begin the background connect/reconnect loop. +- Reads configuration from ../data/config.json (relative to src/) +- Tries to connect to BLE device using address if provided; otherwise scans for device by name. +- Keeps attempting to connect if device not present (reconnect loop). +- Exposes send_led_command(data0, data1, data2, cmd) to send a 4-byte packet to configured characteristic. + +This module uses `bleak` (async BLE library). It runs an asyncio event loop in a dedicated background thread so the rest +of the Flask app can remain synchronous. + +The packet format expected by the device is 4 bytes: data0, data1, data2, cmd. +Example: { data0: 0x00, data1: 0x00, data2: 0x00, cmd: 0x00 } + +""" + +from __future__ import annotations + +import json +import os +import time +import threading +import asyncio +from typing import Optional, Any +import logging + +# module logger +logger = logging.getLogger("BleComm") +logger.setLevel(logging.INFO) +if not logger.handlers: + ch = logging.StreamHandler() + ch.setFormatter(logging.Formatter("%(asctime)s.%(msecs)03d %(levelname)s:%(name)s:%(message)s", datefmt="%H:%M:%S")) + logger.addHandler(ch) + +# if the Flask app logger is available, prefer that for consistency +try: + from src import app as _app_module + app_logger = getattr(_app_module, 'app', None) + if app_logger is not None: + app_logger = getattr(app_logger, 'logger', None) or app_logger + else: + app_logger = None +except Exception: + app_logger = None + +def _log_info(msg, *args): + try: + if app_logger: + app_logger.info(msg % args if args else msg) + else: + logger.info(msg, *args) + except Exception: + try: + logger.info(msg, *args) + except Exception: + pass + +def _log_error(msg, *args): + try: + if app_logger: + app_logger.error(msg % args if args else msg) + else: + logger.error(msg, *args) + except Exception: + try: + logger.error(msg, *args) + except Exception: + pass + +# third-party bleak library for cross-platform BLE +try: + from bleak import BleakClient, BleakScanner +except Exception: # pragma: no cover + # We don't fail import-time; start() will raise a helpful error if bleak missing + BleakClient = None # type: ignore + BleakScanner = None # type: ignore + + +# default paths +HERE = os.path.dirname(__file__) +CONFIG_PATH = os.path.abspath(os.path.join(HERE, "..", "data", "config.json")) +# Secondary/modern comm path (preferred for BLE/communication settings) +COMM_PATH = os.path.abspath(os.path.join(HERE, "..", "data", "comm.json")) + +# runtime state +_loop_thread: Optional[threading.Thread] = None +_loop: Optional[asyncio.AbstractEventLoop] = None +_stop_event = threading.Event() +_client: Optional[Any] = None +_client_lock = threading.Lock() +_config: dict = {} +_last_connected_ts: Optional[float] = None + +# connection info filled from config +_address: str = "" +_device_name: str = "" +_service_uuid: Optional[str] = None +_characteristic_uuid: Optional[str] = None + +# reconnect timing +_RECONNECT_DELAY = 5.0 + + +def _load_config(): + global _config, _address, _device_name, _service_uuid, _characteristic_uuid + try: + # Prefer the modern comm.json if present (keeps BLE/comm settings separate) + cfg_path = COMM_PATH if os.path.exists(COMM_PATH) else CONFIG_PATH + with open(cfg_path, "r", encoding="utf-8") as f: + _config = json.load(f) + except Exception: + _config = {} + + ble = _config.get("ble", {}) if isinstance(_config, dict) else {} + _address = (ble.get("address") or "").strip() + _device_name = (ble.get("device-name") or "").strip() + _service_uuid = ble.get("service-uuid") or None + _filter_name = ble.get("filter-name") or None + _characteristic_uuid = ble.get("characteristic-uuid") or None + _log_info("Loaded BLE config: address='%s' name='%s' filter='%s' service='%s' char='%s'", _address, _device_name, _filter_name, _service_uuid, _characteristic_uuid) + + +async def _scan_for_name(name: str, timeout: float = 5.0) -> Optional[str]: + if BleakScanner is None: + raise RuntimeError("bleak library not available") + _log_info("Scanning for BLE device name '%s' (timeout=%.1fs)", name, timeout) + try: + devices = await BleakScanner.discover(timeout=timeout) + except Exception as e: + _log_error("BLE scan failed: %s", e) + return None + for d in devices: + # d.name may be None on some platforms + if d.name and d.name == name: + _log_info("Found device by name: %s -> %s", d.name, d.address) + return d.address + return None + + +async def _connect_loop(): + global _client, _last_connected_ts + if BleakClient is None: + raise RuntimeError("bleak library not installed. Install via `pip install bleak`") + + while not _stop_event.is_set(): + try: + # ensure config is loaded + _load_config() + target_addr = _address + if not target_addr and _device_name: + try: + target_addr = await _scan_for_name(_device_name, timeout=5.0) + except Exception: + target_addr = None + + if not target_addr: + # nothing found, wait and retry + _log_info("No BLE target found; retrying in %.1fs", _RECONNECT_DELAY) + await asyncio.sleep(_RECONNECT_DELAY) + continue + + client = BleakClient(target_addr) + try: + _log_info("Attempting to connect to BLE address %s", target_addr) + await client.connect(timeout=10.0) + _log_info("Connected to BLE device %s", target_addr) + # store client under lock and record last-connected timestamp + with _client_lock: + _client = client + _last_connected_ts = time.time() + # stay connected until disconnected or stop requested + while client.is_connected and not _stop_event.is_set(): + await asyncio.sleep(0.5) + except Exception: + _log_error("Failed to connect or disconnect cleanly to %s", target_addr) + try: + await client.disconnect() + except Exception: + pass + with _client_lock: + _client = None + # fall through to reconnect after delay + finally: + with _client_lock: + if _client is client and not client.is_connected: + _client = None + _log_info("Client no longer connected: %s", target_addr) + + except Exception: + # keep looping + _log_error("Exception in connect loop", ) + pass + + await asyncio.sleep(_RECONNECT_DELAY) + + +def _ensure_loop_running(): + global _loop_thread, _loop + if _loop_thread and _loop_thread.is_alive(): + return + + if BleakClient is None: + raise RuntimeError("bleak is required. Install with: pip install bleak") + + def _runner(): + global _loop + _loop = asyncio.new_event_loop() + asyncio.set_event_loop(_loop) + try: + _loop.run_until_complete(_connect_loop()) + finally: + # cleanup tasks + try: + _loop.run_until_complete(_loop.shutdown_asyncgens()) + except Exception: + pass + try: + _loop.close() + except Exception: + pass + + _stop_event.clear() + _loop_thread = threading.Thread(target=_runner, name="BleCommLoop", daemon=True) + _loop_thread.start() + + +def start(): + """Start background loop to manage BLE connection.""" + + _load_config() + _ensure_loop_running() + _log_info("BLE background loop started") + + +def stop(): + """Request background loop to stop and disconnect client.""" + _stop_event.set() + # disconnect client if present + try: + with _client_lock: + c = _client + if c is not None: + # schedule disconnect on the loop + _log_info("Scheduling BLE disconnect") + fut = asyncio.run_coroutine_threadsafe(c.disconnect(), _loop) + try: + fut.result(3) + except Exception: + pass + except Exception: + pass + + +def _get_client_now() -> Optional[Any]: + with _client_lock: + return _client + + +def send_led_command(data0: int, data1: int, data2: int, cmd: int) -> bool: + """Send 4-byte LED command to the configured characteristic. Returns True on success.""" + # Diagnostic: log caller/process/thread and current client/loop state + try: + import os as _os + import threading as _threading + import inspect as _inspect + caller = _inspect.stack()[1] + _log_info("send_led_command called from %s:%s (pid=%s, thread=%s) args=(%s,%s,%s,%s)", + caller.filename, caller.lineno, _os.getpid(), _threading.get_ident(), + str(data0), str(data1), str(data2), str(cmd)) + except Exception: + pass + # Accept ints, floats that are whole numbers, or numeric strings (hex or decimal). + def _to_int_byte(x): + # strings: allow hex (0x..) or decimal + if isinstance(x, str): + s = x.strip() + if s.lower().startswith('0x'): + return int(s, 16) + return int(s, 10) + if isinstance(x, float): + if not x.is_integer(): + raise ValueError('data bytes must be integer values') + return int(x) + if isinstance(x, int): + return x + raise ValueError('data bytes must be integer-like') + + try: + data0 = _to_int_byte(data0) + data1 = _to_int_byte(data1) + data2 = _to_int_byte(data2) + cmd = _to_int_byte(cmd) + except Exception: + raise ValueError("data bytes must be integers 0..255") + + for v in (data0, data1, data2, cmd): + if not (0 <= v <= 0xFF): + raise ValueError("data bytes must be integers 0..255") + + # prepare payload + payload = bytes([data0 & 0xFF, data1 & 0xFF, data2 & 0xFF, cmd & 0xFF]) + + client = _get_client_now() + if client is None: + _log_error("send_led_command: no BLE client available (maybe not connected yet)") + return False + if not getattr(client, 'is_connected', False): + _log_error("send_led_command: client present but not connected") + return False + + # write in the event loop thread + if _loop is None: + return False + + async def _write(): + # resolve characteristic uuid (string like '0xFFE1' or full UUID) + char = _characteristic_uuid + if not char: + raise RuntimeError("characteristic_uuid not configured in data/config.json") + # Normalize common short forms like '0xFFE1' or 'FFE1' to full 128-bit UUID. + try: + if isinstance(char, int): + # integer 0xFFE1 -> hex string + short = f"{char:04X}" + resolved = f"0000{short}-0000-1000-8000-00805f9b34fb" + else: + s = str(char).strip() + if s.lower().startswith('0x'): + s = s[2:] + # remove braces if present + s_clean = s.strip('{}') + if len(s_clean) == 4: + resolved = f"0000{s_clean}-0000-1000-8000-00805f9b34fb" + elif len(s_clean) == 8 and '-' not in s_clean: + resolved = f"{s_clean}-0000-1000-8000-00805f9b34fb" + else: + resolved = s + except Exception: + resolved = char + + _log_info("Writing to characteristic (resolved) %s (original: %s)", resolved, _characteristic_uuid) + await client.write_gatt_char(resolved, payload) + + try: + fut = asyncio.run_coroutine_threadsafe(_write(), _loop) + fut.result(timeout=3) + _log_info("Wrote payload to characteristic %s: %s", _characteristic_uuid, payload.hex()) + return True + except Exception as e: + # include exception text for diagnostics + _log_error("Failed to write payload to characteristic %s: %s", _characteristic_uuid, e) + return False + + +# simple module-level README usage in comments +# Example usage: +# from src import BleComm +# BleComm.start() +# BleComm.send_led_command(0x00, 0x00, 0x00, 0x01) +# BleComm.stop() + + +def get_status() -> dict: + """Return a small status dict for diagnostics. + + Fields: + - connected: bool + - address: Optional[str] + - last_connected_ts: Optional[float] + """ + try: + with _client_lock: + client = _client + addr = globals().get('_address') + connected = False + if client is not None: + connected = bool(getattr(client, 'is_connected', False)) + return { + 'connected': connected, + 'address': addr, + 'last_connected_ts': globals().get('_last_connected_ts') + } + except Exception as e: + _log_error(f"get_status error: {e}") + return {'connected': False, 'address': None, 'error': str(e)} + + +# Public helpers used by the Flask app (synchronous wrappers) +def scan(prefix: str = '', timeout: float = 5.0): + """Scan for BLE devices and return a list of dicts {name,address,id}. + + This is a synchronous wrapper around BleakScanner.discover. + """ + results = [] + if BleakScanner is None: + _log_error('scan: bleak not available') + return results + try: + devices = asyncio.run(BleakScanner.discover(timeout=timeout)) + for d in devices: + name = getattr(d, 'name', None) or '' + addr = getattr(d, 'address', None) or getattr(d, 'id', None) or '' + results.append({'name': name, 'address': addr, 'id': addr}) + if prefix: + pf = prefix.lower() + results = [r for r in results if (r.get('name') or '').lower().startswith(pf)] + except Exception as e: + _log_error('scan failed: %s', e) + return results + + +def connect(addr_or_name: str) -> bool: + """Synchronous connect helper: try to connect by address; if looks like a name, write it to config and let the background loop handle connecting.""" + try: + # if looks like an address, try direct connect via BleakClient + if BleakClient is None: + _log_error('connect: bleak not available') + return False + # Quick heuristic for MAC-like addresses (colon or dash separated) or hex + candidate = (addr_or_name or '').strip() + if not candidate: + return False + if ':' in candidate or '-' in candidate or len(candidate) >= 12: + # attempt a direct connect using a temporary client + try: + async def _do_connect(): + c = BleakClient(candidate) + await c.connect(timeout=10.0) + await asyncio.sleep(0.5) + await c.disconnect() + return True + return asyncio.run(_do_connect()) + except Exception as e: + _log_error('direct connect attempt failed: %s', e) + return False + else: + # assume it's a device name: write to config and let background loop find it + try: + # persist desired device name into config file + _load_config() + _config['ble'] = _config.get('ble', {}) + _config['ble']['device_name'] = candidate + # prefer writing into comm.json to match the Flask app's expectations + try: + out_path = COMM_PATH + with open(out_path, 'w', encoding='utf-8') as f: + json.dump(_config, f, indent=2) + except Exception: + # fallback to legacy config.json if write to comm.json fails + with open(CONFIG_PATH, 'w', encoding='utf-8') as f: + json.dump(_config, f, indent=2) + _log_info('connect: wrote device_name to config: %s', candidate) + return True + except Exception as e: + _log_error('connect write config failed: %s', e) + return False + except Exception as e: + _log_error('connect wrapper failed: %s', e) + return False + + +def disconnect() -> bool: + """Synchronous disconnect helper: schedule disconnect on running loop if client exists.""" + try: + with _client_lock: + c = _client + if c is None: + _log_info('disconnect: no client present') + return True + if _loop is None: + _log_error('disconnect: no event loop available') + return False + fut = asyncio.run_coroutine_threadsafe(c.disconnect(), _loop) + try: + fut.result(3) + except Exception: + pass + _log_info('disconnect: requested') + return True + except Exception as e: + _log_error('disconnect failed: %s', e) + return False + + +def _interactive_menu(): + """Simple interactive CLI for manual testing when run as a script.""" + print("BleComm interactive test menu") + print("Commands:") + print(" 1) Send Command (prompt for 4 bytes)") + print(" 2) Status") + print(" 3) Quit") + + while True: + try: + choice = input('> ').strip() + except (KeyboardInterrupt, EOFError): + print('\nExiting') + break + + if choice in ('1', 'send', 'send command'): + try: + print('Enter a single byte value for animation (hex like 0x1A or decimal). Leave empty to cancel.') + s = input('animation: ').strip() + if s == '': + raise KeyboardInterrupt + if s.lower().startswith('0x'): + v = int(s, 16) + else: + v = int(s, 10) + if not (0 <= v <= 0xFF): + raise ValueError('byte out of range') + # keep the call form unchanged as requested (second arg is float literal 0.) + ok = send_led_command(v, 0., 0, 0x2C) + print('send_led_command returned', ok) + except KeyboardInterrupt: + print('\nSend cancelled') + except Exception as e: + print('Send failed:', e) + elif choice in ('2', 'status'): + try: + st = get_status() + print('Status:', st) + except Exception as e: + print('Status failed:', e) + elif choice in ('3', 'quit', 'q', 'exit'): + print('Quitting') + break + else: + print('Unknown command') + + +if __name__ == '__main__': + # Allow running this module directly for manual BLE tests + try: + print('Starting BleComm background loop...') + start() + # wait for connection (timeout after ~30s) + waited = 0.0 + interval = 0.5 + timeout = 30.0 + print('Waiting for device to connect (timeout 30s)...') + while waited < timeout: + st = get_status() + if st.get('connected'): + print('Device connected:', st.get('address')) + break + time.sleep(interval) + waited += interval + else: + print('Timeout waiting for device to connect; you can still use the menu and try send commands (they will fail until connected).') + + _interactive_menu() + except Exception as e: + print('Interactive menu error:', e) + diff --git a/src/__pycache__/BleComm.cpython-312.pyc b/src/__pycache__/BleComm.cpython-312.pyc new file mode 100644 index 0000000..cb3c08d Binary files /dev/null and b/src/__pycache__/BleComm.cpython-312.pyc differ diff --git a/src/__pycache__/app.cpython-312.pyc b/src/__pycache__/app.cpython-312.pyc new file mode 100644 index 0000000..c59a62c Binary files /dev/null and b/src/__pycache__/app.cpython-312.pyc differ diff --git a/src/__pycache__/gui.cpython-312.pyc b/src/__pycache__/gui.cpython-312.pyc new file mode 100644 index 0000000..180969e Binary files /dev/null and b/src/__pycache__/gui.cpython-312.pyc differ diff --git a/src/__pycache__/gui_psg.cpython-312.pyc b/src/__pycache__/gui_psg.cpython-312.pyc new file mode 100644 index 0000000..02b029d Binary files /dev/null and b/src/__pycache__/gui_psg.cpython-312.pyc differ diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..1be10a4 --- /dev/null +++ b/src/app.py @@ -0,0 +1,1310 @@ +import enum +import json +import logging +from logging.handlers import RotatingFileHandler +from datetime import datetime, timezone +from urllib.parse import parse_qs +import os + +from flask import Flask, request, jsonify, make_response +from dataclasses import dataclass, asdict +from threading import Lock +from flask import render_template, redirect, url_for +import atexit + +import importlib + +# Do not import BleComm functions at module-import time (it can create a different +# module instance than the one started by ensure_ble_started). Instead, define a +# small delegating wrapper that ensures the lazily-loaded BleComm instance is used. + + +def send_led_command(data0: int, data1: int, data2: int, cmd: int) -> bool: + """Delegate BLE writes to the BleComm module started by ensure_ble_started(). + + This wrapper makes sure we call the same module instance (BleComm) that + ensure_ble_started() imported and started, avoiding duplicate-module state. + """ + try: + ensure_ble_started() + global BleComm + if BleComm is None: + app.logger.warning("BleComm module not available") + return False + # delegate + return BleComm.send_led_command(data0, data1, data2, cmd) + except Exception as e: + app.logger.error(f"Exception sending BLE command: {e}") + return False + +CMD_SET_ANIMATION = 0x2C +CMD_SET_STATIC_COLOR = 0x1E + +# BleComm will be imported lazily inside ensure_ble_started() to avoid circular imports +BleComm = None + +# ensure we only start BleComm once +_ble_started = False + +def ensure_ble_started(): + global _ble_started + if _ble_started: + return + try: + global BleComm + if BleComm is None: + # Preferred: import as package + try: + BleComm = importlib.import_module('src.BleComm') + except Exception as e1: + # Some run modes execute src/app.py as a script and the 'src' package + # may not be on sys.path; try adding the repo root and retrying. + logging.getLogger('BleComm').warning(f"import src.BleComm failed: {e1}; attempting fallback imports") + try: + import sys + repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + if repo_root not in sys.path: + sys.path.insert(0, repo_root) + BleComm = importlib.import_module('src.BleComm') + except Exception as e2: + logging.getLogger('BleComm').warning(f"fallback import via sys.path failed: {e2}; trying SourceFileLoader") + try: + # Last resort: load module directly from file path + from importlib.machinery import SourceFileLoader + loader = SourceFileLoader('src.BleComm', os.path.join(os.path.dirname(__file__), 'BleComm.py')) + spec = importlib.util.spec_from_loader(loader.name, loader) + module = importlib.util.module_from_spec(spec) + loader.exec_module(module) + BleComm = module + except Exception as e3: + logging.getLogger('BleComm').error(f"All attempts to import BleComm failed: {e1} | {e2} | {e3}") + return + if BleComm is not None: + BleComm.start() + atexit.register(lambda: BleComm.stop()) + _ble_started = True + # log via app logger if available + try: + app.logger.info("BleComm started") + except Exception: + logging.getLogger('BleComm').info("BleComm started") + except Exception as e: + # avoid referencing app here in case it's not defined yet + logging.getLogger('BleComm').error(f"Failed to start BleComm: {e}") + + + +# ---------------- Config ---------------- +HOST = "0.0.0.0" # or "127.0.0.1" if only local machine will hit it +PORT = 8080 +LOG_FILE = "dslrbooth_triggers.log" +JSONL_FILE = "dslrbooth_triggers.jsonl" +MAX_LOG_BYTES = 5 * 1024 * 1024 # 5MB +BACKUP_COUNT = 3 +# Optional: set an env var SECRET_TOKEN to require X-Auth-Token header +SECRET_TOKEN = os.getenv("SECRET_TOKEN", "").strip() +# --------------------------------------- + +class LED_SHOW(enum.Enum): + ANIMATION = 0 + STATIC_COLOR = 1 + +@dataclass +class AnimationConfig: + home_state: LED_SHOW = LED_SHOW.ANIMATION + home_color: str = "#000000" + home_anim: int = 0 + countdown_state: LED_SHOW = LED_SHOW.ANIMATION + countdown_color: str = "#FFFFFF" + countdown_anim: int = 0 + sharing_state: LED_SHOW = LED_SHOW.ANIMATION + sharing_color: str = "#0000FF" + sharing_anim: int = 0 + + def to_dict(self) -> dict: + return asdict(self) + +class BLEConfig: + auto_connect: bool = False + address: str = "" + device_name: str = "" + auto_connect: bool = True + filter_name: str = "SP110E-ATA" + service_uuid: str = "0xFFE0" + characteristic_uuid: str = "0xFFE1" + def to_dict(self) -> dict: + return { + "device_name": self.device_name, + "auto_connect": self.auto_connect, + "filter_name": self.filter_name + } + +def parse_state(val) -> LED_SHOW: + """Normalize a stored state value (bool, str, int) to LED_SHOW enum.""" + try: + # booleans: True -> ANIMATION, False -> STATIC_COLOR + if isinstance(val, bool): + return LED_SHOW.ANIMATION if val else LED_SHOW.STATIC_COLOR + # numbers: 0 -> ANIMATION? legacy uses 0/1 ambiguous; treat 0 as ANIMATION to match defaults + if isinstance(val, int): + return LED_SHOW.ANIMATION if val == 0 else LED_SHOW.STATIC_COLOR + if isinstance(val, str): + s = val.strip().lower() + if s in ("animation", "anim", "a"): + return LED_SHOW.ANIMATION + if s in ("solid", "static", "color", "c", "s"): + return LED_SHOW.STATIC_COLOR + # allow 'true'/'false' strings + if s in ("true", "1"): + return LED_SHOW.ANIMATION + if s in ("false", "0"): + return LED_SHOW.STATIC_COLOR + # fallback: default to ANIMATION + except Exception: + pass + return LED_SHOW.ANIMATION + + +# Global, thread-safe animation config instance that handlers can read/update +LEDAnimations = AnimationConfig() +LEDAnimations_lock = Lock() +# track last event timestamp (epoch seconds) for a simple 'comm' status +last_event_ts = None + + +# Ensure Flask looks for templates in the repository-level `templates/` folder +TEMPLATES_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "templates")) +STATIC_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "static")) +# Ensure Flask will serve files from the repository-level 'static' folder +app = Flask(__name__, template_folder=TEMPLATES_DIR, static_folder=STATIC_DIR) + + +# Single-instance helper: acquire an OS-level lock file in the data directory so +# only one instance of the app can run. Keeps the filehandle open for process +# lifetime. Uses msvcrt on Windows and fcntl on POSIX. +_app_lock_fh = None + +def acquire_instance_lock(lock_path: str): + """Try to acquire exclusive lock on lock_path. Returns file handle or None.""" + global _app_lock_fh + try: + os.makedirs(os.path.dirname(lock_path), exist_ok=True) + fh = open(lock_path, 'a+') + except Exception: + return None + try: + if os.name == 'nt': + try: + import msvcrt + # Lock the first byte (non-blocking) + msvcrt.locking(fh.fileno(), msvcrt.LK_NBLCK, 1) + except Exception: + try: + fh.close() + except Exception: + pass + return None + else: + try: + import fcntl + fcntl.flock(fh.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + except Exception: + try: + fh.close() + except Exception: + pass + return None + except Exception: + try: + fh.close() + except Exception: + pass + return None + # keep filehandle alive for lifetime of process + _app_lock_fh = fh + return fh + +def release_instance_lock(): + global _app_lock_fh + try: + if _app_lock_fh is None: + return + try: + if os.name == 'nt': + import msvcrt + try: + _app_lock_fh.seek(0) + msvcrt.locking(_app_lock_fh.fileno(), msvcrt.LK_UNLCK, 1) + except Exception: + pass + else: + import fcntl + try: + fcntl.flock(_app_lock_fh.fileno(), fcntl.LOCK_UN) + except Exception: + pass + except Exception: + pass + try: + _app_lock_fh.close() + except Exception: + pass + finally: + _app_lock_fh = None + + +@app.before_request +def _ensure_ble_on_request(): + # Ensure BleComm is started before handling any request. Idempotent. + ensure_ble_started() + +# Logging: rotating file handler + colored console handler +# Clear any existing handlers to avoid duplicate logs on reload +app.logger.handlers.clear() + +# Rotating file handler (plain text) +file_handler = RotatingFileHandler(LOG_FILE, maxBytes=MAX_LOG_BYTES, backupCount=BACKUP_COUNT, encoding="utf-8") +file_handler.setLevel(logging.INFO) +file_handler.setFormatter(logging.Formatter("%(asctime)s.%(msecs)03d %(levelname)s:%(name)s:%(message)s", datefmt="%Y-%m-%dT%H:%M:%S")) + +# Console handler (no colorlog) +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) +console_handler.setFormatter(logging.Formatter("%(asctime)s.%(msecs)03d %(levelname)s:%(name)s:%(message)s", datefmt="%H:%M:%S")) + +app.logger.setLevel(logging.INFO) +app.logger.addHandler(file_handler) +app.logger.addHandler(console_handler) +app.logger.propagate = False + +# Silence default werkzeug HTTP access logs (they clutter stdout) +logging.getLogger('werkzeug').setLevel(logging.WARNING) + +def now_stamp(): + # HH.MM.SS.mmm (period separators, millisecond precision) + # use full microsecond then trim to milliseconds + return datetime.now().strftime("%H.%M.%S.%f")[:-3] + + +# Load animation settings from data/config.json into LEDAnimations +def load_animation_config_from_file(): + try: + cfg_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data', 'config.json')) + if not os.path.exists(cfg_path): + app.logger.info(f"Animation config file not found: {cfg_path}") + return + with open(cfg_path, 'r', encoding='utf-8') as f: + data = json.load(f) + anim = data.get('animation-events', {}) + with LEDAnimations_lock: + # home + if 'home-state' in anim: + LEDAnimations.home_state = parse_state(anim.get('home-state')) + if 'home-color' in anim and anim.get('home-color'): + LEDAnimations.home_color = str(anim.get('home-color')) + if 'home-anim' in anim: + try: + LEDAnimations.home_anim = int(anim.get('home-anim')) + except Exception: + pass + + # countdown + if 'countdown-state' in anim: + LEDAnimations.countdown_state = parse_state(anim.get('countdown-state')) + if 'countdown-color' in anim and anim.get('countdown-color'): + LEDAnimations.countdown_color = str(anim.get('countdown-color')) + if 'countdown-anim' in anim: + try: + LEDAnimations.countdown_anim = int(anim.get('countdown-anim')) + except Exception: + pass + + # sharing + if 'sharing-state' in anim: + LEDAnimations.sharing_state = parse_state(anim.get('sharing-state')) + if 'sharing-color' in anim and anim.get('sharing-color'): + LEDAnimations.sharing_color = str(anim.get('sharing-color')) + if 'sharing-anim' in anim: + try: + LEDAnimations.sharing_anim = int(anim.get('sharing-anim')) + except Exception: + pass + app.logger.info(f"Loaded animation config from {cfg_path}") + except Exception as e: + app.logger.error(f"Failed to load animation config: {e}") + + +# Load BLE/communication defaults from data/config.json into a BLEConfig +CONFIG_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data', 'config.json')) +COMM_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data', 'comm.json')) + +def load_ble_config() -> BLEConfig: + cfg = BLEConfig() + try: + # BLE/communication defaults are stored in comm.json + if not os.path.exists(COMM_PATH): + # fallback to legacy config.json + app.logger.debug(f"{COMM_PATH} not found; falling back to config.json for BLE settings") + if os.path.exists(CONFIG_PATH): + try: + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + data = json.load(f) or {} + ble = data.get('ble', {}) + except Exception: + ble = {} + else: + return cfg + with open(COMM_PATH, 'r', encoding='utf-8') as f: + data = json.load(f) + ble = data.get('ble', {}) + # if comm.json exists but has no ble section, try legacy config.json + if not ble: + if os.path.exists(CONFIG_PATH): + try: + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + legacy = json.load(f) or {} + legacy_ble = legacy.get('ble', {}) + if legacy_ble: + app.logger.debug('comm.json has no ble section; using ble from config.json') + ble = legacy_ble + except Exception: + pass + # support both snake_case and kebab-case keys + cfg.device_name = ble.get('device_name', '') or ble.get('device-name', '') or cfg.device_name + cfg.address = ble.get('address', '') or ble.get('addr', '') or cfg.address + cfg.auto_connect = bool(ble.get('auto_connect', False) or ble.get('auto-connect', False) or cfg.auto_connect) + cfg.filter_name = ble.get('filter_name', '') or ble.get('filter-name', '') or cfg.filter_name + cfg.service_uuid = ble.get('service_uuid', '') or ble.get('service-uuid', '') or cfg.service_uuid + cfg.characteristic_uuid = ble.get('characteristic_uuid', '') or ble.get('characteristic-uuid', '') or cfg.characteristic_uuid + except Exception as e: + app.logger.debug(f"load_ble_config failed: {e}") + return cfg + + +def load_comm_config() -> dict: + """Load comm.json and return a dict with keys like host, port, and ble.""" + try: + if not os.path.exists(COMM_PATH): + return {} + with open(COMM_PATH, 'r', encoding='utf-8') as f: + return json.load(f) or {} + except Exception as e: + app.logger.debug(f"load_comm_config failed: {e}") + return {} + + +def persist_animation_events(ae: dict) -> bool: + """Persist only the 'animation-events' section into CONFIG_PATH, preserving other keys.""" + try: + base = {} + if os.path.exists(CONFIG_PATH): + try: + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + base = json.load(f) or {} + except Exception: + base = {} + base['animation-events'] = ae + with open(CONFIG_PATH, 'w', encoding='utf-8') as f: + json.dump(base, f, indent=2) + return True + except Exception as e: + app.logger.debug(f"persist_animation_events failed: {e}") + return False + + +def persist_comm_config(comm: dict) -> bool: + """Write the provided comm dict to COMM_PATH atomically.""" + try: + tmp = COMM_PATH + '.tmp' + with open(tmp, 'w', encoding='utf-8') as f: + json.dump(comm, f, indent=2) + os.replace(tmp, COMM_PATH) + return True + except Exception as e: + app.logger.debug(f"persist_comm_config failed: {e}") + return False + + +def tail_log(lines: int = 200) -> str: + """Return the last `lines` lines from the main log file as a single string.""" + try: + if not os.path.exists(LOG_FILE): + return '' + # read in a memory-efficient way: read tail by seeking from end + with open(LOG_FILE, 'rb') as f: + f.seek(0, os.SEEK_END) + end = f.tell() + block_size = 1024 + data = bytearray() + while end > 0 and len(data) < lines * 200: + read_size = min(block_size, end) + f.seek(end - read_size, os.SEEK_SET) + chunk = f.read(read_size) + data[0:0] = chunk + end -= read_size + text = data.decode('utf-8', errors='replace') + all_lines = text.splitlines() + return '\n'.join(all_lines[-lines:]) + except Exception as e: + app.logger.debug(f"tail_log failed: {e}") + return '' + +# Load animation config at module import so LEDAnimations is initialized from file +try: + # In some run modes app isn't fully configured yet; guard with try/except + load_animation_config_from_file() +except Exception: + pass + +# Normalize incoming payload to at least include event_type and any param* fields. +# Returns a dict with at least 'event_type' key if found, plus any param* +def normalize_event(payload: dict) -> dict: + """Normalize incoming payload to at least include event_type and any param* fields.""" + event = {} + + # If raw strings like {" event_type: 'session_start', param1: '5' "} come in, + # they might not be strict JSON. Try to coerce if needed: + # But first, trust anything the client already parsed as JSON. + + # Ensure keys are strings and trim spaces + clean = {} + for k, v in payload.items(): + if isinstance(k, str): + key = k.strip() + else: + key = str(k) + # flatten single-item lists (e.g., parse_qs output) + if isinstance(v, list) and len(v) == 1: + v = v[0] + clean[key] = v + + # event_type required + if "event_type" in clean: + event["event_type"] = str(clean["event_type"]) + elif "EventType" in clean: + event["event_type"] = str(clean["EventType"]) + else: + # try some common fallbacks + for alt in ("event", "type"): + if alt in clean: + event["event_type"] = str(clean[alt]) + break + + # Pull param1..param9 (typical) but also keep any extra fields users might send + for k, v in clean.items(): + if k == "event_type": + continue + if k.lower().startswith("param") or k in ("session_id", "file", "path", "url", "share_url", "album", "device", "printer", "count"): + event[k] = v + + # If nothing else, keep the rest (but avoid duplicating known keys) + for k, v in clean.items(): + if k not in event and k != "event_type": + event[k] = v + + return event + +# Flexible body parsing +# Accept JSON, form-encoded, querystring, or raw 'a=b&c=d'. +# Returns dict (may be empty). +def parse_body(): + """ + Accept JSON, form-encoded, querystring, or raw 'a=b&c=d'. + Returns dict (may be empty). + """ + # 1) JSON + if request.is_json: + try: + data = request.get_json(silent=True) or {} + if isinstance(data, dict): + return data + except Exception: + pass + + # 2) Form fields + if request.form: + return {k: v for k, v in request.form.items()} + + # 3) Query string + if request.args: + return {k: v for k, v in request.args.items()} + + # 4) Raw body like "event_type=session_start¶m1=PrintAndGIF" + try: + raw = request.get_data(as_text=True) or "" + if raw: + qs = parse_qs(raw, keep_blank_values=True) + return {k: (v[0] if isinstance(v, list) and len(v) == 1 else v) for k, v in qs.items()} + except Exception: + pass + + return {} + +# Log a compact JSON line with timestamp prefix +def log_event_line(event: dict): + # Compact JSON (no spaces) for the log line + compact = json.dumps(event, separators=(",", ":")) + line = f"{now_stamp()} {compact}" + try: + app.logger.debug(line) + except Exception: + pass + return line + +# Optional: brief three-line log for easier reading +def log_request_brief(): + """Log a brief three-line message similar to the example: + GET /?event_type=session_end + 2025-09-26T22:27:59-07:00 + 76.86.154.250 + """ + try: + # Request line + qs = "" if not request.query_string else f"?{request.query_string.decode('utf-8')}" + request_line = f"{request.method} {request.path}{qs}" + app.logger.info(request_line) + + # ISO timestamp with local timezone offset, without microseconds + ts = datetime.now().astimezone().replace(microsecond=0).isoformat() + app.logger.info(ts) + + # Client IP (Flask provides remote_addr, may be None behind proxies) + client = request.remote_addr or request.headers.get("X-Forwarded-For", "unknown") + app.logger.info(client) + except Exception as e: + app.logger.info(f"Failed to write brief request log: {e}") + +def build_event_from_query(payload: dict) -> dict: + """Build a normalized event structure containing event_type and params array. + + payload is expected to be a dict of query/form keys -> values. + Returns: { 'event_type': str, 'params': [ (k, v), ... ] } + """ + event_type = None + params = [] + # prefer explicit event_type key + if "event_type" in payload: + event_type = str(payload.get("event_type")) + + # collect param1..paramN in sorted numeric order if possible, else in insertion order + # also include other keys except event_type + # make a stable ordering: param1,param2,... then remaining keys alphabetically + param_items = [] + other_items = [] + for k, v in payload.items(): + if k == "event_type": + continue + if k.lower().startswith("param"): + param_items.append((k, v)) + else: + other_items.append((k, v)) + + # sort param_items by number if includes digits (param1, param2...) + def param_sort_key(item): + k = item[0] + digits = ''.join(ch for ch in k if ch.isdigit()) + return (int(digits) if digits else 9999, k) + + param_items.sort(key=param_sort_key) + other_items.sort(key=lambda x: x[0]) + + params = param_items + other_items + return {"event_type": event_type, "params": params} + +def log_event_single_line(event_struct: dict): + """Format and log the event in a single line: + Event: , param1: , param2: , ... + """ + et = event_struct.get("event_type") or "" + parts = [f"Event: {et}"] + for k, v in event_struct.get("params", []): + parts.append(f"{k}: {v}") + try: + app.logger.debug(", ".join(parts)) + except Exception: + pass + +def append_jsonl(event: dict): + with open(JSONL_FILE, "a", encoding="utf-8") as f: + f.write(json.dumps(event, ensure_ascii=False) + "\n") + + +def handle_event_dispatch(event: dict, payload: dict): + """Dispatch handling based on event_type. Uses Python 3.10 match/case. + + event: normalized event dict (must contain 'event_type') + payload: original parsed payload dict (for extra context if needed) + """ + et = event.get("event_type", "") + try: + match et: + case "capture_start": + # when camera capture starts + # Switch animation to constant white for both lights + #app.logger.info("Start White Countdown Animation") + app.logger.info("capture_start event received") + case "countdown": + # do nothing here + pass + case "countdown_start" : + countDownSecs_raw = payload.get("param1", event.get("param1", "")) + # Normalize to an integer when possible + try: + countDownSecs = int(countDownSecs_raw) + except (TypeError, ValueError): + countDownSecs = None + + if isinstance(countDownSecs, int): + if countDownSecs > 5: + countDownSecs = 5 + + result = send_led_command(countDownSecs, 0, 0, CMD_SET_ANIMATION) + + if not result: + app.logger.warning("Failed to send BLE command for countdown animation") + app.logger.info(f"Countdown started - {countDownSecs} sec(s)") + + else: + app.logger.info(f"Countdown started - unknown duration (param: {countDownSecs_raw})") + case "sharing_screen" | "sharing": + if(LEDAnimations.sharing_state == LED_SHOW.ANIMATION): + result = send_led_command(LEDAnimations.sharing_anim, 0, 0, CMD_SET_ANIMATION) + else: + r = int(LEDAnimations.sharing_color[1:3], 16) + g = int(LEDAnimations.sharing_color[3:5], 16) + b = int(LEDAnimations.sharing_color[5:7], 16) + result = send_led_command(r, g, b, CMD_SET_STATIC_COLOR) + + + if not result: + app.logger.warning("Failed to send BLE command for session end animation") + app.logger.info("Sharing screen Animation") + case "session_start" | "start_session": + param1 = payload.get("param1", event.get("param1", "")) + if param1 == "PrintOnly": + app.logger.info("Session started - PrintOnly") + elif param1 == "PrintAndGIF": + app.logger.info("Session started - PrintAndGIF") + elif param1 == "OnlyGIF": + app.logger.info("Session started - OnlyGIF") + elif param1 == "Boomerang": + app.logger.info("Session started - Boomerang") + elif param1 == "Video": + app.logger.info("Session started - Video") + else: + app.logger.info(f"Session started - unknown mode: '{param1}'") + case "session_end" | "end_session": + if(LEDAnimations.home_state == LED_SHOW.ANIMATION): + result = send_led_command(LEDAnimations.home_anim, 0, 0, CMD_SET_ANIMATION) + else: + r = int(LEDAnimations.home_color[1:3], 16) + g = int(LEDAnimations.home_color[3:5], 16) + b = int(LEDAnimations.home_color[5:7], 16) + result = send_led_command(r, g, b, CMD_SET_STATIC_COLOR) + + if not result: + app.logger.warning("Failed to send BLE command for session end animation") + case "file_download": + filename = payload.get("param1", event.get("param1", "")) + if filename: + app.logger.info(f"File downloaded: {filename}") + else: + app.logger.info("File download event with no filename") + case "file_upload": + filename = payload.get("param1", event.get("param1", "")) + if filename: + app.logger.info(f"File uploaded: {filename}") + else: + app.logger.info("File upload event with no filename") + case "processing_start": + app.logger.info("Processing started...") + case _: + # Default: unknown event_type + app.logger.warning(f"Handler: unhandled event_type '{et}'") + except Exception as e: + app.logger.error(f"Exception in handle_event_dispatch: {e}") + +def check_token(): + if not SECRET_TOKEN: + return True + return request.headers.get("X-Auth-Token", "") == SECRET_TOKEN + +@app.route("/health", methods=["GET"]) +def health(): + return jsonify({"status": "ok", "port": PORT}) + +@app.route("/api", methods=["GET", "POST"]) +def root(): + """Handle requests to the API root /api (moved from /)""" + # Informational root: does not accept event payloads. Use /dslrbooth for events. + return jsonify({"status": "api root", "note": "send event_type payloads to /dslrbooth"}) + +@app.route("/dslrbooth", methods=["POST", "GET"]) +def dslrbooth(): + # Build event from payload and log single-line summary + payload = parse_body() + # build and log single-line summary + log_event_single_line(build_event_from_query(payload)) + + if not check_token(): + return make_response(jsonify({"error": "unauthorized"}), 401) + + event = normalize_event(payload) + if "event_type" not in event: + return make_response(jsonify({"error": "event_type missing"}), 400) + + # Dispatch to per-event_type handlers (non-blocking, side-effect logging) + handle_event_dispatch(event, payload) + + line = log_event_line(event) + try: + append_jsonl({"ts": datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace('+00:00', 'Z'), **event}) + except Exception as e: + app.logger.error(f"Failed to append JSONL: {e}") + + # update last_event_ts for comm status + try: + global last_event_ts + last_event_ts = datetime.now(timezone.utc).timestamp() + except Exception: + pass + + return jsonify({"ok": True, "logged": line}) + +@app.route('/', methods=['GET']) +def config_index(): + # Render index.html with current animation config + with LEDAnimations_lock: + cfg = LEDAnimations.to_dict() + # derive simple boolean statuses for template (green if non-zero) + def is_enabled(val): + try: + return int(val) != 0 + except Exception: + return bool(val) + + # comm_status: consider 'up' if we received an event within the last 60 seconds + comm_up = False + try: + if last_event_ts is not None: + age = datetime.now(timezone.utc).timestamp() - float(last_event_ts) + comm_up = age <= 60 + except Exception: + comm_up = False + + return render_template('index.html', config=cfg, + comm_status=comm_up, + capture_start_animation_status=is_enabled(cfg.get('capture_start_animation')), + countdown_animation_status=is_enabled(cfg.get('countdown_animation')), + sharing_screen_animation_status=is_enabled(cfg.get('sharing_screen_animation')), + session_start_animation_status=is_enabled(cfg.get('session_start_animation')), + session_end_animation_status=is_enabled(cfg.get('session_end_animation'))) + + +@app.route('/config-animation', methods=['GET']) +def get_config_animation(): + # Return current animation configuration (used by front-end JS) + with LEDAnimations_lock: + reply = { + "home_mode": "animation" if LEDAnimations.home_state == LED_SHOW.ANIMATION else "solid", + "home_anim": LEDAnimations.home_anim, + "home_color": LEDAnimations.home_color, + "countdown_mode": "animation" if LEDAnimations.countdown_state == LED_SHOW.ANIMATION else "solid", + "countdown_anim": LEDAnimations.countdown_anim, + "countdown_color": LEDAnimations.countdown_color, + "sharing_mode": "animation" if LEDAnimations.sharing_state == LED_SHOW.ANIMATION else "solid", + "sharing_anim": LEDAnimations.sharing_anim, + "sharing_color": LEDAnimations.sharing_color, + } + return jsonify(reply) + +@app.route('/config-animation', methods=['POST']) +def set_config_animation(): + # Update animation configuration. + # Accept JSON or form-encoded bodies; update LEDAnimations in-memory and + # persist only the 'animation-events' section in the config file, leaving + # other top-level keys intact. + payload = parse_body() + reply = {"status": "success"} + app.logger.info(f"Config update payload: {payload}") + try: + with LEDAnimations_lock: + # home/home screen + if 'home_mode' in payload: + LEDAnimations.home_state = LED_SHOW.ANIMATION if str(payload.get('home_mode')) == 'animation' else LED_SHOW.STATIC_COLOR + if 'home_color' in payload and payload.get('home_color'): + LEDAnimations.home_color = str(payload.get('home_color')) + if 'home_animation' in payload and payload.get('home_animation') != '': + try: + LEDAnimations.home_anim = int(payload.get('home_nimation')) + except Exception: + pass + + # countdown + if 'countdown_mode' in payload: + LEDAnimations.countdown_state = LED_SHOW.ANIMATION if str(payload.get('countdown_mode')) == 'animation' else LED_SHOW.STATIC_COLOR + if 'countdown_color' in payload and payload.get('countdown_color'): + LEDAnimations.countdown_color = str(payload.get('countdown_color')) + if 'countdown_animation' in payload and payload.get('countdown_animation') != '': + try: + LEDAnimations.countdown_anim = int(payload.get('countdown_animation')) + except Exception: + pass + + # sharing + if 'sharing_mode' in payload: + LEDAnimations.sharing_state = LED_SHOW.ANIMATION if str(payload.get('sharing_mode')) == 'animation' else LED_SHOW.STATIC_COLOR + if 'sharing_color' in payload and payload.get('sharing_color'): + LEDAnimations.sharing_color = str(payload.get('sharing_color')) + if 'sharing_animation' in payload and payload.get('sharing_animation') != '': + try: + LEDAnimations.sharing_anim = int(payload.get('sharing_animation')) + except Exception: + pass + + # Persist only the animation-events section in the config file. + try: + base = {} + if os.path.exists(CONFIG_PATH): + try: + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + base = json.load(f) or {} + except Exception: + base = {} + + ae = base.get('animation-events', {}) + ae['home-state'] = 'animation' if LEDAnimations.home_state == LED_SHOW.ANIMATION else 'solid' + ae['home-color'] = LEDAnimations.home_color + ae['home-anim'] = int(LEDAnimations.home_anim) + + ae['countdown-state'] = 'animation' if LEDAnimations.countdown_state == LED_SHOW.ANIMATION else 'solid' + ae['countdown-color'] = LEDAnimations.countdown_color + ae['countdown-anim'] = int(LEDAnimations.countdown_anim) + + ae['sharing-state'] = 'animation' if LEDAnimations.sharing_state == LED_SHOW.ANIMATION else 'solid' + ae['sharing-color'] = LEDAnimations.sharing_color + ae['sharing-anim'] = int(LEDAnimations.sharing_anim) + + base['animation-events'] = ae + with open(CONFIG_PATH, 'w', encoding='utf-8') as f: + json.dump(base, f, indent=2) + except Exception as e: + app.logger.debug(f"Failed to persist animation config: {e}") + except Exception as e: + app.logger.error(f"Failed to update animation config: {e}") + reply["status"] = "error" + return jsonify(reply) + +@app.route('/comm-status', methods=['GET']) +def get_comm_status(): + # Return current communication status for front-end + # Defaults from data/config.json + cfg = load_ble_config() + device_name = cfg.device_name + address = cfg.address + auto_connect = cfg.auto_connect + filter_name = cfg.filter_name + try: + # load_ble_config already handled reading file; values available in cfg + pass + except Exception as e: + app.logger.debug(f"Failed to read comm defaults: {e}") + + connected = False + try: + if last_event_ts is not None: + age = datetime.now(timezone.utc).timestamp() - float(last_event_ts) + connected = age <= 60 + except Exception: + connected = False + + reply = { + "id": address or "", + "name": device_name, + "filter": filter_name, + "filter_name": filter_name, + "address": address or "", + "auto": auto_connect, + "connected": connected, + "last_connected_ts": datetime.now(timezone.utc).isoformat() if connected else None + } + return jsonify(reply) + +@app.route('/comm-status', methods=['POST']) +def set_comm_status(): + # Return current communication status + reply = {"status": "disconnected", "id":" ", "device-name":" ", "filter-name":" ", "auto-connect":True} + return jsonify(reply) + +@app.route('/update', methods=['POST']) +def config_update(): + # Accept form-encoded submission from the UI. For diagnostics, log the payload. + form = request.form + try: + payload = {k: v for k, v in form.items()} + app.logger.info(f"/update payload: {payload}") + + with LEDAnimations_lock: + # map form fields to LEDAnimations similarly to /config-animation + if 'home_mode' in payload: + LEDAnimations.home_state = LED_SHOW.ANIMATION if str(payload.get('home_mode')) == 'animation' else LED_SHOW.STATIC_COLOR + if 'home_color' in payload and payload.get('home_color'): + LEDAnimations.home_color = str(payload.get('home_color')) + if 'capture_start_animation' in payload and payload.get('capture_start_animation') != '': + try: + LEDAnimations.home_anim = int(payload.get('capture_start_animation')) + except Exception: + pass + + if 'countdown_mode' in payload: + LEDAnimations.countdown_state = LED_SHOW.ANIMATION if str(payload.get('countdown_mode')) == 'animation' else LED_SHOW.STATIC_COLOR + if 'countdown_color' in payload and payload.get('countdown_color'): + LEDAnimations.countdown_color = str(payload.get('countdown_color')) + if 'countdown_animation' in payload and payload.get('countdown_animation') != '': + try: + LEDAnimations.countdown_anim = int(payload.get('countdown_animation')) + except Exception: + pass + + if 'sharing_mode' in payload: + LEDAnimations.sharing_state = LED_SHOW.ANIMATION if str(payload.get('sharing_mode')) == 'animation' else LED_SHOW.STATIC_COLOR + if 'sharing_color' in payload and payload.get('sharing_color'): + LEDAnimations.sharing_color = str(payload.get('sharing_color')) + if 'sharing_screen_animation' in payload and payload.get('sharing_screen_animation') != '': + try: + LEDAnimations.sharing_anim = int(payload.get('sharing_screen_animation')) + except Exception: + pass + + # Also support legacy numeric-only fields that were originally handled here + for field in ('capture_start_animation','countdown_animation','sharing_screen_animation','session_start_animation','session_end_animation'): + if field in payload and payload.get(field) != '': + try: + val = int(payload.get(field)) + # try to set directly if attribute exists, else ignore + if hasattr(LEDAnimations, field): + setattr(LEDAnimations, field, val) + except Exception: + # ignore bad conversion + pass + + # Persist only the animation-events section in the config file (preserve other keys) + try: + base = {} + if os.path.exists(CONFIG_PATH): + try: + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + base = json.load(f) or {} + except Exception: + base = {} + + ae = base.get('animation-events', {}) + ae['home-state'] = 'animation' if LEDAnimations.home_state == LED_SHOW.ANIMATION else 'solid' + ae['home-color'] = LEDAnimations.home_color + ae['home-anim'] = int(LEDAnimations.home_anim) + + ae['countdown-state'] = 'animation' if LEDAnimations.countdown_state == LED_SHOW.ANIMATION else 'solid' + ae['countdown-color'] = LEDAnimations.countdown_color + ae['countdown-anim'] = int(LEDAnimations.countdown_anim) + + ae['sharing-state'] = 'animation' if LEDAnimations.sharing_state == LED_SHOW.ANIMATION else 'solid' + ae['sharing-color'] = LEDAnimations.sharing_color + ae['sharing-anim'] = int(LEDAnimations.sharing_anim) + + base['animation-events'] = ae + with open(CONFIG_PATH, 'w', encoding='utf-8') as f: + json.dump(base, f, indent=2) + except Exception as e: + app.logger.debug(f"Failed to persist animation config from /update: {e}") + + return redirect(url_for('config_index')) + except Exception as e: + app.logger.info(f"Config update failed: {e}") + return make_response(jsonify({"error": "failed to update"}), 500) + + +# The executable startup block is intentionally placed at the end of the file +# after all routes are defined so that imports and route registration occur +# before app.run() is invoked when this module is executed directly. + + + +@app.route('/ble/status', methods=['GET']) +def ble_status(): + """Return BLE connection status (simple JSON).""" + try: + # import lazily and query module helper if present + mod = importlib.import_module('src.BleComm') + if hasattr(mod, 'get_status'): + return jsonify(mod.get_status()) + # fallback: inspect internals + client = getattr(mod, '_client', None) + addr = getattr(mod, '_address', None) + connected = bool(getattr(client, 'is_connected', False)) if client is not None else False + return jsonify({"connected": connected, "address": addr}) + except Exception as e: + app.logger.error(f"ble/status failed: {e}") + return jsonify({"connected": False, "error": str(e)}) + + +@app.route('/ble/scan', methods=['GET']) +def ble_scan(): + """Scan for BLE devices. Optional query param: prefix to filter by name. + + Returns JSON array: [{"name": ..., "address": ..., "id": ...}, ...] + """ + prefix = request.args.get('prefix', '') or '' + try: + ensure_ble_started() + mod = importlib.import_module('src.BleComm') + devices = [] + # Prefer a scan() function exposed by the module + if hasattr(mod, 'scan') and callable(getattr(mod, 'scan')): + try: + devices = mod.scan(prefix) + except TypeError: + # maybe scan() expects no args + devices = mod.scan() + elif hasattr(mod, 'discover') and callable(getattr(mod, 'discover')): + # fallback name + try: + devices = mod.discover(prefix) + except TypeError: + devices = mod.discover() + else: + # No high-level helper available; return empty list + app.logger.info('BleComm has no scan/discover helper; returning empty list') + + # Normalize device list to objects with name/address/id + out = [] + if isinstance(devices, list): + for d in devices: + if isinstance(d, dict): + name = d.get('name') or d.get('device') or '' + addr = d.get('address') or d.get('id') or '' + out.append({'name': name, 'address': addr, 'id': addr}) + else: + # could be bleak BLEDevice or string + try: + name = getattr(d, 'name', None) or str(d) + addr = getattr(d, 'address', None) or getattr(d, 'id', None) or '' + out.append({'name': name, 'address': addr, 'id': addr}) + except Exception: + out.append({'name': str(d), 'address': '', 'id': ''}) + else: + app.logger.debug('ble_scan: unexpected scan result type: %s', type(devices)) + + # apply prefix filter server-side just in case + if prefix: + pf = prefix.lower() + out = [x for x in out if (x.get('name') or '').lower().startswith(pf)] + + return jsonify(out) + except Exception as e: + app.logger.error(f"ble/scan failed: {e}") + return make_response(jsonify({"error": str(e)}), 500) + + +@app.route('/ble/connect', methods=['POST']) +def ble_connect(): + """Connect to a BLE device. Accepts JSON body {id, name, auto} or form fields.""" + app.logger.info("ble_connect called") + try: + payload = parse_body() + address = payload.get('id') or payload.get('address') or payload.get('addr') or '' + name = payload.get('name') or payload.get('device') or '' + filter = payload.get('filter') or payload.get('filter_name') or payload.get('filter-name') or '' + # If the client did not supply id/address or name, fall back to configured BLE defaults + if not address and not name: + cfg = load_ble_config() + address = cfg.address or '' + device_name = cfg.device_name or '' + filter = cfg.filter_name or '' + # 'auto' present in payload but currently not used server-side + ensure_ble_started() + # Persist chosen BLE settings to config.json so they survive restarts + try: + cfg = load_ble_config() + # update fields from payload (if present) + if address: + cfg.address = address + if device_name: + cfg.device_name = device_name + if filter: + cfg.filter_name = filter + if 'auto' in payload: + try: + cfg.auto_connect = bool(payload.get('auto')) + except Exception: + pass + # write back into comm.json (preserve other keys) + try: + base = {} + if os.path.exists(COMM_PATH): + try: + with open(COMM_PATH, 'r', encoding='utf-8') as f: + base = json.load(f) or {} + except Exception: + base = {} + base['ble'] = base.get('ble', {}) + base['ble']['auto-connect'] = cfg.auto_connect + base['ble']['address'] = cfg.address + base['ble']['device-name'] = cfg.device_name + base['ble']['filter-name'] = cfg.filter_name + + with open(COMM_PATH, 'w', encoding='utf-8') as f: + json.dump(base, f, indent=2) + except Exception as e: + app.logger.debug(f"Failed to persist BLE config to comm.json: {e}") + + except Exception as e: + app.logger.debug(f"ble_connect: failed to persist config: {e}") + + # attempt to connect using BleComm if available + mod = importlib.import_module('src.BleComm') + if hasattr(mod, 'connect') and callable(getattr(mod, 'connect')): + try: + res = mod.connect(cfg.address or cfg.device_name) + return jsonify({'status': 'ok', 'connected': bool(res)}) + except Exception as e: + app.logger.error(f'ble_connect: connect call failed: {e}') + return make_response(jsonify({'error': str(e)}), 500) + else: + app.logger.warning('ble_connect: BleComm has no connect()') + return make_response(jsonify({'error': 'connect not supported'}), 400) + except Exception as e: + app.logger.error(f"ble/connect failed: {e}") + return make_response(jsonify({'error': str(e)}), 500) + + +@app.route('/ble/disconnect', methods=['POST']) +def ble_disconnect(): + try: + ensure_ble_started() + mod = importlib.import_module('src.BleComm') + # If BleComm exposes get_status, consult it to see if a client exists + try: + st = getattr(mod, 'get_status') and mod.get_status() + except Exception: + st = None + # if no connected client, return ok but don't call disconnect to avoid noisy logs + if not st or not st.get('connected'): + app.logger.info('ble_disconnect: no client present (nothing to do)') + return jsonify({'status': 'ok', 'disconnected': False, 'reason': 'no client present'}) + + if hasattr(mod, 'disconnect') and callable(getattr(mod, 'disconnect')): + mod.disconnect() + return jsonify({'status': 'ok', 'disconnected': True}) + else: + app.logger.warning('ble_disconnect: BleComm has no disconnect()') + return make_response(jsonify({'error': 'disconnect not supported'}), 400) + except Exception as e: + app.logger.error(f"ble/disconnect failed: {e}") + return make_response(jsonify({'error': str(e)}), 500) + + +if __name__ == "__main__": + # For Windows dev: this is fine. For production you could run with waitress/uvicorn. + # Start BLE background loop if available + # Load COMM settings (host/port and ble defaults) if present + try: + comm_cfg = load_comm_config() + if 'host' in comm_cfg and comm_cfg.get('host'): + HOST = str(comm_cfg.get('host')) + app.logger.info(f"Loaded host from comm.json: {HOST}") + if 'port' in comm_cfg and comm_cfg.get('port'): + try: + PORT = int(comm_cfg.get('port')) + app.logger.info(f"Loaded port from comm.json: {PORT}") + except Exception: + pass + except Exception as e: + app.logger.debug(f"Failed to load comm.json: {e}") + + # CLI flags: support --gui and --server. By default (no flags) run server. + import sys + import threading + + args = sys.argv[1:] + run_gui = '--gui' in args + run_server = '--server' in args or not run_gui + + # load comm.json settings if present + try: + comm_cfg = load_comm_config() + if 'host' in comm_cfg and comm_cfg.get('host'): + HOST = str(comm_cfg.get('host')) + app.logger.info(f"Loaded host from comm.json: {HOST}") + if 'port' in comm_cfg and comm_cfg.get('port'): + try: + PORT = int(comm_cfg.get('port')) + app.logger.info(f"Loaded port from comm.json: {PORT}") + except Exception: + pass + except Exception as e: + app.logger.debug(f"Failed to load comm.json: {e}") + + try: + # ensure BleComm is started eagerly when running directly + ensure_ble_started() + except Exception as e: + app.logger.error(f"Failed to start BleComm: {e}") + + # Acquire single-instance lock to prevent multiple running copies + try: + lock_file = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data', 'dslr_director.lock')) + fh = acquire_instance_lock(lock_file) + if fh is None: + app.logger.error(f"Another instance appears to be running (could not acquire lock {lock_file}). Exiting.") + raise SystemExit(1) + else: + app.logger.info(f"Acquired instance lock: {lock_file}") + import atexit as _atexit + _atexit.register(lambda: release_instance_lock()) + except SystemExit: + raise + except Exception as e: + app.logger.warning(f"Failed to acquire instance lock (continuing): {e}") + + # If server requested, prepare the server runner + def _run_server(): + try: + print(f"Starting Flask server on {HOST}:{PORT}") + print("Routes registered:") + for rule in app.url_map.iter_rules(): + print(f" {rule.methods} {rule.rule}") + # turn off reloader when running in thread + app.run(host=HOST, port=PORT, debug=False, use_reloader=False) + except Exception as e: + app.logger.error(f"Flask server failed: {e}") + + # If both GUI and server requested, start server in background thread + if run_server and run_gui: + t = threading.Thread(target=_run_server, daemon=True) + t.start() + + if run_server and not run_gui: + _run_server() + + if run_gui: + # Launch desktop GUI in main thread + try: + # import lazily to avoid Tkinter requirement when only running server + import importlib + gui_mod = None + try: + gui_mod = importlib.import_module('src.gui') + except Exception: + # Try fallback by file path loader + from importlib.machinery import SourceFileLoader + loader = SourceFileLoader('src.gui', os.path.join(os.path.dirname(__file__), 'gui.py')) + spec = importlib.util.spec_from_loader(loader.name, loader) + module = importlib.util.module_from_spec(spec) + loader.exec_module(module) + gui_mod = module + + if gui_mod is not None and hasattr(gui_mod, 'DSLRGui'): + gui = gui_mod.DSLRGui() + gui.mainloop() + except Exception as e: + app.logger.error(f"Failed to start GUI: {e}") diff --git a/src/gui.py b/src/gui.py new file mode 100644 index 0000000..336fc55 --- /dev/null +++ b/src/gui.py @@ -0,0 +1,1521 @@ +"""CustomTkinter GUI for DslrDirector based on templates/index.html. + +This module implements a modern dark desktop GUI using customtkinter. +It mirrors the structure and behavior of the web UI in templates/index.html +without using PySimpleGUI. The communication status is shown in a persistent +top-right panel and is polled frequently for responsive updates. + +If customtkinter is unavailable the module will attempt to fall back to the +standard tkinter controls with a simpler visual style; the user is encouraged +to "python -m pip install customtkinter" for the intended appearance. +""" + +from __future__ import annotations + +import importlib +import sys +import json +import os +import threading +import time +from typing import Optional, Any, Dict +import tkinter as _tk +try: + # colorchooser is a submodule of tkinter + from tkinter import colorchooser as _colorchooser +except Exception: + _colorchooser = None + +try: + import customtkinter as ctk + CTK_AVAILABLE = True +except Exception: + import tkinter as ctk # type: ignore + from tkinter import ttk # type: ignore + CTK_AVAILABLE = False + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +DATA_DIR = os.path.join(REPO_ROOT, 'data') +os.makedirs(DATA_DIR, exist_ok=True) +GUI_LOG = os.path.join(DATA_DIR, 'gui_start.log') + + +def _write_gui_log(msg: str) -> None: + try: + with open(GUI_LOG, 'a', encoding='utf-8') as f: + f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} {msg}\n") + except Exception: + pass + + +# Prefer the app-managed BleComm if available so there is a single running +# BLE manager. Fall back to importing src.BleComm as a module. +appmod = None +BleComm = None +try: + import src.app as appmod # type: ignore + BleComm = getattr(appmod, 'BleComm', None) +except Exception: + appmod = None + BleComm = None + +if BleComm is None: + try: + BleComm = importlib.import_module('src.BleComm') + except Exception: + BleComm = None + + +# Persistence helpers (small, tolerant) +CONFIG_PATH = os.path.join(DATA_DIR, 'config.json') +COMM_PATH = os.path.join(DATA_DIR, 'comm.json') + + +def load_animation() -> Dict[str, Any]: + try: + if not os.path.exists(CONFIG_PATH): + return {} + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + data = json.load(f) or {} + return data.get('animation-events', {}) + except Exception: + return {} + + +def save_animation(ae: Dict[str, Any]) -> bool: + try: + base = {} + if os.path.exists(CONFIG_PATH): + try: + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + base = json.load(f) or {} + except Exception: + base = {} + base['animation-events'] = ae + with open(CONFIG_PATH, 'w', encoding='utf-8') as f: + json.dump(base, f, indent=2) + return True + except Exception: + return False + + +def load_comm() -> Dict[str, Any]: + try: + if not os.path.exists(COMM_PATH): + return {} + with open(COMM_PATH, 'r', encoding='utf-8') as f: + return json.load(f) or {} + except Exception: + return {} + + +def save_comm(cfg: Dict[str, Any]) -> bool: + try: + with open(COMM_PATH, 'w', encoding='utf-8') as f: + json.dump(cfg, f, indent=2) + return True + except Exception: + return False + + +class DSLRGui(ctk.CTk if CTK_AVAILABLE else ctk.Tk): + def __init__(self) -> None: + if CTK_AVAILABLE: + ctk.set_appearance_mode('dark') + ctk.set_default_color_theme('dark-blue') + super().__init__() + else: + super().__init__() + + self.title('DSLR Director') + self.geometry('980x640') + try: + self.iconbitmap(False) + except Exception: + pass + + # top-right connection status overlay + self._status_frame = None + self._status_dot = None + self._status_text = None + self._status_last = None + # tray icon state + self._tray_icon = None + self._tray_thread = None + self._tray_image = None + + # central frames + self._build_ui() + + # internal state + self._last_status: Optional[Dict[str, Any]] = None + self._poll_interval_ms = 1000 # frequent polling for responsiveness + _write_gui_log('GUI: initialized (customtkinter)') + # start polling + try: + self.after(200, self.poll_status) + except Exception: + pass + + # Disable maximize button on Windows and hook minimize->tray behavior + try: + self._disable_maximize_button() + except Exception as e: + _write_gui_log(f'_disable_maximize_button exception: {e}') + # Bind unmap (minimize) and map (restore) events for tray behavior + try: + try: + self.bind('', self._on_unmap) + except Exception as e: + _write_gui_log(f'bind failed: {e}') + try: + self.bind('', self._on_map) + except Exception as e: + _write_gui_log(f'bind failed: {e}') + # Ensure cleanup on close + try: + self.protocol('WM_DELETE_WINDOW', self._on_close) + except Exception as e: + _write_gui_log(f'protocol WM_DELETE_WINDOW failed: {e}') + except Exception as e: + _write_gui_log(f'Tray binding setup failed: {e}') + + def _build_ui(self) -> None: + # root grid + container = ctk.CTkFrame(self) if CTK_AVAILABLE else ctk.Frame(self, bg='#111') + + def _disable_maximize_button(self) -> None: + """Attempt to disable the maximize box on Windows. Fall back to + disabling resizing if platform APIs aren't available.""" + try: + if sys.platform.startswith('win'): + import ctypes + GWL_STYLE = -16 + WS_MAXIMIZEBOX = 0x00010000 + hwnd = self.winfo_id() + style = ctypes.windll.user32.GetWindowLongW(hwnd, GWL_STYLE) + style &= ~WS_MAXIMIZEBOX + ctypes.windll.user32.SetWindowLongW(hwnd, GWL_STYLE, style) + # refresh window frame + SWP_NOSIZE = 0x0001 + SWP_NOMOVE = 0x0002 + SWP_NOZORDER = 0x0004 + SWP_FRAMECHANGED = 0x0020 + ctypes.windll.user32.SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED) + return + except Exception: + pass + # Generic fallback: make window non-resizable which effectively disables maximize + try: + self.resizable(False, False) + except Exception: + pass + + def _on_unmap(self, event=None) -> None: + """Called when the window is minimized (unmap). Attempt to send to tray.""" + try: + # Attempt to create tray icon and hide the window. Some window managers + # may not report 'iconic' reliably, so we proactively try to minimize-to-tray. + _write_gui_log(f'_on_unmap called; state={getattr(self, "state", lambda: "")( )}') + created = self._create_tray_icon() + if created: + try: + self.withdraw() + except Exception: + pass + except Exception as e: + _write_gui_log(f'_on_unmap failed: {e}') + + def _on_map(self, event=None) -> None: + """Called when the window is mapped (restored). Ensure tray icon removed.""" + try: + _write_gui_log('_on_map called; restoring window') + try: + # stop tray icon if present + self._stop_tray_icon() + except Exception: + pass + try: + # ensure visible + self.deiconify() + self.lift() + except Exception: + pass + except Exception as e: + _write_gui_log(f'_on_map failed: {e}') + + def _create_tray_icon(self) -> bool: + """Create a system tray icon using pystray if available. Returns True if a tray was created.""" + if self._tray_icon is not None: + return True + try: + import pystray + from PIL import Image, ImageDraw + except Exception: + _write_gui_log('pystray or PIL not available; minimize-to-tray disabled') + return False + + try: + # create a simple icon image (transparent background with a small circle) + img = Image.new('RGBA', (64, 64), (0, 0, 0, 0)) + draw = ImageDraw.Draw(img) + draw.ellipse((8, 8, 56, 56), fill=(124, 58, 237, 255)) + self._tray_image = img + + def _on_restore(icon, item): + try: + self.after(0, self._restore_from_tray) + except Exception: + pass + + def _on_quit(icon, item): + try: + self.after(0, self._on_close) + except Exception: + pass + + menu = pystray.Menu(pystray.MenuItem('Restore', _on_restore), pystray.MenuItem('Quit', _on_quit)) + icon = pystray.Icon('dslr_director', img, 'DSLR Director', menu) + self._tray_icon = icon + + def _run_icon(): + try: + icon.run() + except Exception as e: + _write_gui_log(f'Tray icon run failed: {e}') + + t = threading.Thread(target=_run_icon, name='TrayThread', daemon=True) + t.start() + self._tray_thread = t + _write_gui_log('Tray icon created') + return True + except Exception as e: + _write_gui_log(f'Failed to create tray icon: {e}') + self._tray_icon = None + return False + + def _restore_from_tray(self) -> None: + try: + if self._tray_icon is not None: + try: + self._tray_icon.stop() + except Exception: + pass + self._tray_icon = None + try: + self.deiconify() + self.lift() + except Exception: + pass + _write_gui_log('Restored from tray') + except Exception as e: + _write_gui_log(f'Restore from tray failed: {e}') + + def _stop_tray_icon(self) -> None: + try: + if self._tray_icon is not None: + try: + self._tray_icon.stop() + except Exception: + pass + self._tray_icon = None + if self._tray_thread is not None: + try: + self._tray_thread.join(timeout=0.1) + except Exception: + pass + self._tray_thread = None + _write_gui_log('Tray icon stopped') + except Exception as e: + _write_gui_log(f'Stop tray failed: {e}') + + def _on_close(self) -> None: + try: + # ensure tray is stopped and resources cleaned up + try: + self._stop_tray_icon() + except Exception: + pass + try: + self.destroy() + except Exception: + try: + self.quit() + except Exception: + pass + except Exception as e: + _write_gui_log(f'Close handler failed: {e}') + container.pack(fill='both', expand=True, padx=18, pady=18) + + # Header: logo + title + header = ctk.CTkFrame(container) if CTK_AVAILABLE else ctk.Frame(container, bg='#101314') + header.pack(fill='x', padx=6, pady=(4, 12)) + + left = ctk.CTkFrame(header) if CTK_AVAILABLE else ctk.Frame(header, bg='#101314') + left.pack(side='left', anchor='w') + + # Logo image (use processed if present) + logo_path = os.path.join(DATA_DIR, 'ata_logo_out.png') + if not os.path.exists(logo_path): + logo_path = os.path.join(REPO_ROOT, 'static', 'images', 'ata_logo.png') + + # Load logo image and show it to the left of the title. Prefer Pillow for + # high-quality resizing; fall back to Tk's PhotoImage subsample if needed. + lbl_logo = None + self._logo_image = None + try: + target_size = (60, 60) + img_path = logo_path + # Try Pillow first + try: + from PIL import Image, ImageTk + pil = Image.open(img_path).convert('RGBA') + # fit and preserve aspect ratio + pil.thumbnail(target_size, Image.LANCZOS) + photo = ImageTk.PhotoImage(pil) + self._logo_image = photo + if CTK_AVAILABLE and hasattr(ctk, 'CTkImage'): + try: + # CTkImage accepts a PIL image or PhotoImage in newer CTk versions + ctki = ctk.CTkImage(light_image=pil, size=target_size) + lbl_logo = ctk.CTkLabel(left, image=ctki, text='') + # keep reference to CTkImage as well + self._ctk_logo_image = ctki + except Exception: + lbl_logo = ctk.CTkLabel(left, image=photo, text='') + else: + lbl_logo = ctk.CTkLabel(left, image=photo, text='') if CTK_AVAILABLE else _tk.Label(left, image=photo, bd=0) + except Exception: + # Pillow not available or failed: try Tk.PhotoImage directly + try: + tkimg = _tk.PhotoImage(file=img_path) + # subsample if image larger than target + w = tkimg.width() + h = tkimg.height() + subs_w = max(1, int(w / target_size[0])) + subs_h = max(1, int(h / target_size[1])) + subs = max(subs_w, subs_h) + if subs > 1: + try: + tkimg = tkimg.subsample(subs, subs) + except Exception: + pass + self._logo_image = tkimg + lbl_logo = ctk.CTkLabel(left, image=tkimg, text='') if CTK_AVAILABLE else _tk.Label(left, image=tkimg, bd=0) + except Exception: + # last resort: text placeholder + lbl_logo = ctk.CTkLabel(left, text='') if CTK_AVAILABLE else _tk.Label(left, text='') + except Exception: + lbl_logo = ctk.CTkLabel(left, text='') if CTK_AVAILABLE else _tk.Label(left, text='') + try: + lbl_logo.pack(side='left') + except Exception: + pass + + title_col = ctk.CTkFrame(header) if CTK_AVAILABLE else ctk.Frame(header, bg='#101314') + title_col.pack(side='left', padx=12) + title = ctk.CTkLabel(title_col, text='DSLR Director', font=ctk.CTkFont(size=20, weight='bold')) if CTK_AVAILABLE else ctk.Label(title_col, text='DSLR Director', fg='#e6eef6', bg='#101314', font=('Segoe UI', 16, 'bold')) + title.pack(anchor='w') + lead = ctk.CTkLabel(title_col, text='Configure LED animations and communication.', text_color='#9aa6b2') if CTK_AVAILABLE else ctk.Label(title_col, text='Configure LED animations and communication.', fg='#9aa6b2', bg='#101314') + lead.pack(anchor='w', pady=(4, 0)) + + # comm status overlay on top-right + status_frame = ctk.CTkFrame(self, fg_color='transparent') if CTK_AVAILABLE else ctk.Frame(self, bg='#0b0f14') + status_frame.place(relx=0.98, x=-18, y=18, anchor='ne') + self._status_frame = status_frame + + dot = ctk.CTkLabel(status_frame, text=' ', width=12, height=12, corner_radius=6, fg_color='#e55353') if CTK_AVAILABLE else ctk.Canvas(status_frame, width=12, height=12, bg='#0b0f14', highlightthickness=0) + if not CTK_AVAILABLE: + dot.create_oval(0, 0, 12, 12, fill='#e55353', outline='') + dot.pack(side='left', padx=(6, 6)) + self._status_dot = dot + + st_lbl = ctk.CTkLabel(status_frame, text='Disconnected', text_color='#9aa6b2') if CTK_AVAILABLE else ctk.Label(status_frame, text='Disconnected', fg='#9aa6b2', bg='#0b0f14') + st_lbl.pack(side='left') + self._status_text = st_lbl + + st_last = ctk.CTkLabel(status_frame, text='', text_color='#9aa6b2') if CTK_AVAILABLE else ctk.Label(status_frame, text='', fg='#9aa6b2', bg='#0b0f14') + st_last.pack(side='left', padx=(8, 6)) + self._status_last = st_last + + # Main card area with tabs + card = ctk.CTkFrame(container) if CTK_AVAILABLE else ctk.Frame(container, bg='#0f1720') + card.pack(fill='both', expand=True) + + if CTK_AVAILABLE: + tabview = ctk.CTkTabview(card) + tabview.pack(fill='both', expand=True, padx=12, pady=12) + tabview.add('Animations') + tabview.add('Communication') + anim_frame = tabview.tab('Animations') + comm_frame = tabview.tab('Communication') + else: + # simple fallback using ttk.Notebook + try: + nb = ttk.Notebook(card) # type: ignore + anim_frame = ttk.Frame(nb) + comm_frame = ttk.Frame(nb) + nb.add(anim_frame, text='Animations') + nb.add(comm_frame, text='Communication') + nb.pack(fill='both', expand=True) + except Exception: + anim_frame = ctk.Frame(card) # type: ignore + comm_frame = ctk.Frame(card) # type: ignore + + # Animations tab content + self._build_animations_tab(anim_frame) + + # Communication tab content + self._build_comm_tab(comm_frame) + + # Footer note + note = ctk.CTkLabel(card, text="Tip: Animation IDs are integers. Use 'Solid Color' to send a static color.", text_color='#9aa6b2') if CTK_AVAILABLE else ctk.Label(card, text="Tip: Animation IDs are integers. Use 'Solid Color' to send a static color.", fg='#9aa6b2', bg='#0f1720') + note.pack(side='bottom', anchor='w', padx=12, pady=10) + + def _build_animations_tab(self, parent) -> None: + anim = load_animation() + frm = ctk.CTkFrame(parent) if CTK_AVAILABLE else ctk.Frame(parent) + frm.pack(fill='both', expand=True, padx=12, pady=8) + + # Home + row = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row.pack(fill='x', pady=6) + lbl = ctk.CTkLabel(row, text='Home Screen', width=180) if CTK_AVAILABLE else ctk.Label(row, text='Home Screen', width=18) + lbl.pack(side='left') + self.home_mode = ctk.CTkOptionMenu(row, values=['animation', 'solid']) if CTK_AVAILABLE else ctk.Entry(row) + try: + self.home_mode.set(anim.get('home-state', 'animation')) + except Exception: + pass + self.home_mode.pack(side='left', padx=8) + self.home_id = ctk.CTkEntry(row, width=80) if CTK_AVAILABLE else ctk.Entry(row, width=10) + self.home_id.insert(0, str(anim.get('home-anim', ''))) + self.home_id.pack(side='left', padx=8) + # color button opens color chooser + self.home_color_hex = anim.get('home-color', '#ffffff') + if CTK_AVAILABLE: + self.home_color = ctk.CTkButton(row, text='', width=44, height=30, fg_color=self.home_color_hex, command=lambda: self._choose_color('home')) + else: + self.home_color = ctk.Button(row, text='Color', command=lambda: self._choose_color('home'), bg=self.home_color_hex) + self.home_color.pack(side='left', padx=8) + # Test button - send static color command for home color + try: + test_home_btn = ctk.CTkButton(row, text='Test', command=lambda: self._test_color('home'), fg_color='#3b82f6') if CTK_AVAILABLE else ctk.Button(row, text='Test', command=lambda: self._test_color('home')) + test_home_btn.pack(side='left', padx=6) + except Exception: + pass + + # Sharing + row2 = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row2.pack(fill='x', pady=6) + # Use same fixed width as Home Screen label to align fields + lbl2 = ctk.CTkLabel(row2, text='Sharing Screen', width=180) if CTK_AVAILABLE else ctk.Label(row2, text='Sharing Screen', width=18) + lbl2.pack(side='left') + self.share_mode = ctk.CTkOptionMenu(row2, values=['animation', 'solid']) if CTK_AVAILABLE else ctk.Entry(row2) + try: + if CTK_AVAILABLE: + self.share_mode.set(anim.get('sharing-state', 'animation')) + except Exception: + pass + try: + self.share_mode.pack(side='left', padx=8) + except Exception: + pass + self.share_id = ctk.CTkEntry(row2, width=80) if CTK_AVAILABLE else ctk.Entry(row2, width=10) + try: + self.share_id.insert(0, str(anim.get('sharing-anim', ''))) + except Exception: + pass + self.share_id.pack(side='left', padx=8) + self.share_color_hex = anim.get('sharing-color', '#ffffff') + if CTK_AVAILABLE: + self.share_color = ctk.CTkButton(row2, text='', width=44, height=30, fg_color=self.share_color_hex, command=lambda: self._choose_color('share')) + else: + self.share_color = ctk.Button(row2, text='Color', command=lambda: self._choose_color('share'), bg=self.share_color_hex) + self.share_color.pack(side='left', padx=8) + # Test button - send static color command for sharing color + try: + test_share_btn = ctk.CTkButton(row2, text='Test', command=lambda: self._test_color('share'), fg_color='#3b82f6') if CTK_AVAILABLE else ctk.Button(row2, text='Test', command=lambda: self._test_color('share')) + test_share_btn.pack(side='left', padx=6) + except Exception: + pass + + # Save button + save_btn = ctk.CTkButton(frm, text='Save Animations', command=self._save_animations, fg_color='#7c3aed') if CTK_AVAILABLE else ctk.Button(frm, text='Save Animations', command=self._save_animations) + save_btn.pack(anchor='e', pady=(12, 0), padx=12) + + def _build_comm_tab(self, parent) -> None: + # Prefer using the app's loader which normalizes keys; fall back to raw comm.json + cfg = load_comm() + try: + if appmod is not None and hasattr(appmod, 'load_ble_config'): + try: + ble_cfg = appmod.load_ble_config() + # ble_cfg is a BLEConfig instance (or similar); convert to simple dict + cfg = { + 'ble': { + 'address': getattr(ble_cfg, 'address', '') or getattr(ble_cfg, 'addr', ''), + 'device-name': getattr(ble_cfg, 'device_name', '') or getattr(ble_cfg, 'device-name', '') or getattr(ble_cfg, 'device_name', ''), + 'filter-name': getattr(ble_cfg, 'filter_name', '') or getattr(ble_cfg, 'filter-name', ''), + 'auto-connect': getattr(ble_cfg, 'auto_connect', False) or getattr(ble_cfg, 'auto-connect', False) + } + } + except Exception: + pass + except Exception: + pass + # Debug: write loaded comm config to GUI log to aid diagnostics + try: + _write_gui_log(f'Comm config loaded for UI: {cfg}') + except Exception: + pass + frm = ctk.CTkFrame(parent) if CTK_AVAILABLE else ctk.Frame(parent) + frm.pack(fill='both', expand=True, padx=12, pady=8) + + # ID + row = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row.pack(fill='x', pady=6) + lbl = ctk.CTkLabel(row, text='ID', width=180) if CTK_AVAILABLE else ctk.Label(row, text='ID', width=18) + lbl.pack(side='left') + self.comm_id = ctk.CTkEntry(row, width=360) if CTK_AVAILABLE else ctk.Entry(row, width=40) + # support multiple shapes of comm config (top-level or nested under 'ble') + comm_id = '' + try: + if isinstance(cfg, dict): + # top-level keys + comm_id = cfg.get('id') or cfg.get('address') or cfg.get('addr') or comm_id + # ble section (accept snake_case and kebab-case) + ble = cfg.get('ble') if isinstance(cfg.get('ble'), dict) else {} + if ble: + comm_id = comm_id or ble.get('address') or ble.get('addr') or ble.get('id') or ble.get('device_name') or ble.get('device-name') or '' + except Exception: + comm_id = '' + # If app provides a normalized loader, prefer its values directly + try: + if appmod is not None and hasattr(appmod, 'load_ble_config'): + try: + ble_cfg = appmod.load_ble_config() + val_addr = getattr(ble_cfg, 'address', None) or getattr(ble_cfg, 'addr', None) or '' + if val_addr: + self.comm_id.delete(0, 'end') + self.comm_id.insert(0, val_addr) + else: + self.comm_id.insert(0, comm_id or '') + except Exception: + try: + self.comm_id.insert(0, comm_id or '') + except Exception: + pass + else: + self.comm_id.insert(0, comm_id or '') + except Exception: + pass + self.comm_id.pack(side='left', padx=8) + + # Device Name + row2 = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row2.pack(fill='x', pady=6) + lbl2 = ctk.CTkLabel(row2, text='Device Name', width=180) if CTK_AVAILABLE else ctk.Label(row2, text='Device Name', width=18) + lbl2.pack(side='left') + self.comm_name = ctk.CTkEntry(row2, width=360) if CTK_AVAILABLE else ctk.Entry(row2, width=40) + comm_name = '' + try: + if isinstance(cfg, dict): + comm_name = cfg.get('name') or cfg.get('device_name') or cfg.get('device-name') or comm_name + ble = cfg.get('ble') if isinstance(cfg.get('ble'), dict) else {} + if ble: + comm_name = comm_name or ble.get('device_name') or ble.get('device-name') or ble.get('name') or '' + except Exception: + comm_name = '' + try: + if appmod is not None and hasattr(appmod, 'load_ble_config'): + try: + ble_cfg = appmod.load_ble_config() + val_name = getattr(ble_cfg, 'device_name', None) or getattr(ble_cfg, 'device-name', None) or getattr(ble_cfg, 'deviceName', None) or '' + if val_name: + self.comm_name.delete(0, 'end') + self.comm_name.insert(0, val_name) + else: + self.comm_name.insert(0, comm_name or '') + except Exception: + try: + self.comm_name.insert(0, comm_name or '') + except Exception: + pass + else: + self.comm_name.insert(0, comm_name or '') + except Exception: + pass + self.comm_name.pack(side='left', padx=8) + + # Filter + Scan + row3 = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row3.pack(fill='x', pady=6) + lbl3 = ctk.CTkLabel(row3, text='Filter', width=180) if CTK_AVAILABLE else ctk.Label(row3, text='Filter', width=18) + lbl3.pack(side='left') + self.comm_filter = ctk.CTkEntry(row3, width=240) if CTK_AVAILABLE else ctk.Entry(row3, width=24) + comm_filter = '' + try: + if isinstance(cfg, dict): + comm_filter = cfg.get('filter') or cfg.get('filter_name') or cfg.get('filter-name') or comm_filter + ble = cfg.get('ble') if isinstance(cfg.get('ble'), dict) else {} + if ble: + comm_filter = comm_filter or ble.get('filter_name') or ble.get('filter-name') or ble.get('filter') or '' + except Exception: + comm_filter = '' + try: + if appmod is not None and hasattr(appmod, 'load_ble_config'): + try: + ble_cfg = appmod.load_ble_config() + val_filter = getattr(ble_cfg, 'filter_name', None) or getattr(ble_cfg, 'filter-name', None) or '' + if val_filter: + self.comm_filter.delete(0, 'end') + self.comm_filter.insert(0, val_filter) + else: + self.comm_filter.insert(0, comm_filter or '') + except Exception: + try: + self.comm_filter.insert(0, comm_filter or '') + except Exception: + pass + else: + self.comm_filter.insert(0, comm_filter or '') + except Exception: + pass + self.comm_filter.pack(side='left', padx=8) + scan_btn = ctk.CTkButton(row3, text='Scan', command=self._open_scan_modal, fg_color='#7c3aed') if CTK_AVAILABLE else ctk.Button(row3, text='Scan', command=self._open_scan_modal) + scan_btn.pack(side='left', padx=8) + + # Auto connect + row4 = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row4.pack(fill='x', pady=6) + lbl4 = ctk.CTkLabel(row4, text='Auto Connect', width=180) if CTK_AVAILABLE else ctk.Label(row4, text='Auto Connect', width=18) + lbl4.pack(side='left') + self.comm_auto = ctk.CTkCheckBox(row4, text='') if CTK_AVAILABLE else ctk.Checkbutton(row4) + # set auto flag from either top-level or 'ble' section + try: + auto_flag = False + if isinstance(cfg, dict): + auto_flag = bool(cfg.get('auto') or cfg.get('auto_connect') or cfg.get('auto-connect') or False) + ble = cfg.get('ble') if isinstance(cfg.get('ble'), dict) else {} + if ble: + auto_flag = auto_flag or bool(ble.get('auto') or ble.get('auto_connect') or ble.get('auto-connect') or False) + if auto_flag: + try: + # CTk and tk checkbox both support select() in this usage + self.comm_auto.select() + except Exception: + pass + except Exception: + pass + self.comm_auto.pack(side='left', padx=8) + + # Connect toggle + row5 = ctk.CTkFrame(frm) if CTK_AVAILABLE else ctk.Frame(frm) + row5.pack(fill='x', pady=6) + lbl5 = ctk.CTkLabel(row5, text='Action', width=180) if CTK_AVAILABLE else ctk.Label(row5, text='Action', width=18) + lbl5.pack(side='left') + self.comm_toggle = ctk.CTkButton(row5, text='Connect', command=self._toggle_connect, fg_color='#2f313a') if CTK_AVAILABLE else ctk.Button(row5, text='Connect', command=self._toggle_connect) + self.comm_toggle.pack(side='left', padx=8) + # initialize toggle label and status from runtime BLE status if available + try: + runtime = self._get_runtime_ble() + st = {'connected': False} + if runtime is not None and hasattr(runtime, 'get_status'): + try: + st = runtime.get_status() or {'connected': False} + except Exception as e: + _write_gui_log(f'poll init status error from runtime: {e}') + st = {'connected': False} + + # fallback to importing module directly + if not st.get('connected'): + try: + mod = importlib.import_module('src.BleComm') + if hasattr(mod, 'get_status'): + st = mod.get_status() or {'connected': False} + except Exception: + pass + + # Always apply status to UI to avoid stale displays + try: + if st.get('connected'): + try: + self.comm_toggle.configure(text='Disconnect') + except Exception: + try: + self.comm_toggle.config(text='Disconnect') + except Exception: + pass + if CTK_AVAILABLE: + try: + self._status_dot.configure(fg_color='#28a745') + self._status_text.configure(text='Connected') + except Exception: + pass + else: + try: + self._status_text.config(text='Connected') + except Exception: + pass + else: + try: + self.comm_toggle.configure(text='Connect') + except Exception: + try: + self.comm_toggle.config(text='Connect') + except Exception: + pass + if CTK_AVAILABLE: + try: + self._status_dot.configure(fg_color='#e55353') + self._status_text.configure(text='Disconnected') + except Exception: + pass + else: + try: + self._status_text.config(text='Disconnected') + except Exception: + pass + except Exception: + pass + except Exception: + # tolerate any errors while initializing runtime status + pass + + def _save_animations(self) -> None: + try: + ae = {} + try: + ae['home-state'] = self.home_mode.get() if hasattr(self.home_mode, 'get') else 'animation' + except Exception: + ae['home-state'] = 'animation' + ae['home-anim'] = int(self.home_id.get()) if self.home_id.get().strip() else 0 + ae['sharing-state'] = self.share_mode.get() if hasattr(self.share_mode, 'get') else 'animation' + ae['sharing-anim'] = int(self.share_id.get()) if self.share_id.get().strip() else 0 + # include chosen colors if present + try: + ae['home-color'] = getattr(self, 'home_color_hex', '') + except Exception: + pass + try: + ae['sharing-color'] = getattr(self, 'share_color_hex', '') + except Exception: + pass + ok = save_animation(ae) + _write_gui_log(f'Animations saved: {ok}') + # Also update the running app's in-memory LEDAnimations so changes + # take effect immediately without restarting the server/GUI. + try: + target_app = appmod + # If we don't have appmod (maybe import failed earlier), try dynamic import + if target_app is None: + try: + target_app = importlib.import_module('src.app') + except Exception: + target_app = None + + if target_app is not None: + # Prefer the app's persistence helper if available (it preserves other keys) + try: + if hasattr(target_app, 'persist_animation_events'): + try: + target_app.persist_animation_events(ae) + except Exception as e: + _write_gui_log(f'app.persist_animation_events failed: {e}') + except Exception: + pass + + # Update the in-memory LEDAnimations under its lock so event handlers + # use the new values immediately. + try: + if hasattr(target_app, 'LEDAnimations') and hasattr(target_app, 'LEDAnimations_lock'): + try: + with target_app.LEDAnimations_lock: + # Home + try: + if hasattr(target_app, 'parse_state'): + target_app.LEDAnimations.home_state = target_app.parse_state(ae.get('home-state')) + else: + # best-effort: accept string 'animation'/'solid' + hs = str(ae.get('home-state') or 'animation').strip().lower() + target_app.LEDAnimations.home_state = getattr(target_app, 'LED_SHOW', None).ANIMATION if hs.startswith('anim') else getattr(target_app, 'LED_SHOW', None).STATIC_COLOR + except Exception: + pass + try: + if ae.get('home-color'): + target_app.LEDAnimations.home_color = str(ae.get('home-color')) + except Exception: + pass + try: + target_app.LEDAnimations.home_anim = int(ae.get('home-anim') or 0) + except Exception: + pass + + # Sharing + try: + if hasattr(target_app, 'parse_state'): + target_app.LEDAnimations.sharing_state = target_app.parse_state(ae.get('sharing-state')) + else: + ss = str(ae.get('sharing-state') or 'animation').strip().lower() + target_app.LEDAnimations.sharing_state = getattr(target_app, 'LED_SHOW', None).ANIMATION if ss.startswith('anim') else getattr(target_app, 'LED_SHOW', None).STATIC_COLOR + except Exception: + pass + try: + if ae.get('sharing-color'): + target_app.LEDAnimations.sharing_color = str(ae.get('sharing-color')) + except Exception: + pass + try: + target_app.LEDAnimations.sharing_anim = int(ae.get('sharing-anim') or 0) + except Exception: + pass + except Exception as e: + _write_gui_log(f'Failed updating in-memory LEDAnimations: {e}') + try: + _write_gui_log(f'Updated target_app.LEDAnimations id={id(target_app.LEDAnimations)} module={getattr(target_app, "__name__", "")}') + except Exception: + pass + except Exception: + pass + else: + _write_gui_log('No app module available to update in-memory LEDAnimations') + except Exception as e: + _write_gui_log(f'Failed to persist/update animations in app module: {e}') + # Also attempt to update the module that may be running as __main__ + try: + import sys as _sys + main_mod = _sys.modules.get('__main__') + if main_mod is not None and main_mod is not target_app: + try: + if hasattr(main_mod, 'LEDAnimations') and hasattr(main_mod, 'LEDAnimations_lock'): + try: + with main_mod.LEDAnimations_lock: + try: + if hasattr(main_mod, 'parse_state'): + main_mod.LEDAnimations.home_state = main_mod.parse_state(ae.get('home-state')) + else: + hs = str(ae.get('home-state') or 'animation').strip().lower() + main_mod.LEDAnimations.home_state = getattr(main_mod, 'LED_SHOW', None).ANIMATION if hs.startswith('anim') else getattr(main_mod, 'LED_SHOW', None).STATIC_COLOR + except Exception: + pass + try: + if ae.get('home-color'): + main_mod.LEDAnimations.home_color = str(ae.get('home-color')) + except Exception: + pass + try: + main_mod.LEDAnimations.home_anim = int(ae.get('home-anim') or 0) + except Exception: + pass + + try: + if hasattr(main_mod, 'parse_state'): + main_mod.LEDAnimations.sharing_state = main_mod.parse_state(ae.get('sharing-state')) + else: + ss = str(ae.get('sharing-state') or 'animation').strip().lower() + main_mod.LEDAnimations.sharing_state = getattr(main_mod, 'LED_SHOW', None).ANIMATION if ss.startswith('anim') else getattr(main_mod, 'LED_SHOW', None).STATIC_COLOR + except Exception: + pass + try: + if ae.get('sharing-color'): + main_mod.LEDAnimations.sharing_color = str(ae.get('sharing-color')) + except Exception: + pass + try: + main_mod.LEDAnimations.sharing_anim = int(ae.get('sharing-anim') or 0) + except Exception: + pass + except Exception as e: + _write_gui_log(f'Failed updating __main__.LEDAnimations: {e}') + try: + _write_gui_log(f'Updated __main__.LEDAnimations id={id(main_mod.LEDAnimations)} module={getattr(main_mod, "__name__", "__main__")}') + except Exception: + pass + except Exception: + pass + except Exception: + pass + except Exception as e: + _write_gui_log(f'Failed to save animations: {e}') + + def _open_scan_modal(self) -> None: + # modal Toplevel showing scan results + try: + top = ctk.CTkToplevel(self) if CTK_AVAILABLE else ctk.Toplevel(self) + top.title('Scan Results') + # desired modal size + modal_w = 560 + modal_h = 360 + # center the modal relative to the main GUI window + try: + # ensure geometry info for parent is up-to-date + self.update_idletasks() + root_x = self.winfo_rootx() + root_y = self.winfo_rooty() + root_w = self.winfo_width() + root_h = self.winfo_height() + x = int(root_x + (root_w - modal_w) / 2) + y = int(root_y + (root_h - modal_h) / 2) + top.geometry(f"{modal_w}x{modal_h}+{x}+{y}") + except Exception: + try: + top.geometry(f"{modal_w}x{modal_h}") + except Exception: + pass + try: + # make modal: keep on top, set transient to parent and grab input + top.transient(self) + except Exception: + pass + try: + top.grab_set() + except Exception: + pass + try: + top.attributes('-topmost', True) + except Exception: + pass + frm = ctk.CTkFrame(top) if CTK_AVAILABLE else ctk.Frame(top) + frm.pack(fill='both', expand=True, padx=12, pady=12) + filter_entry = ctk.CTkEntry(frm, width=360) if CTK_AVAILABLE else ctk.Entry(frm, width=40) + filter_entry.pack(fill='x') + + # Use a selectable Listbox for results so the user can pick an item + # easily. Keep scan_results (list of device dicts) so we can insert + # the exact address for the selected device instead of parsing text. + scan_results = [] + listbox_frame = _tk.Frame(frm) + listbox_frame.pack(fill='both', expand=False, pady=8) + scrollbar = _tk.Scrollbar(listbox_frame, orient='vertical') + # Increase font size for readability + try: + import tkinter.font as tkfont + listbox_font = tkfont.Font(size=12) + except Exception: + listbox_font = None + + listbox = _tk.Listbox(listbox_frame, width=80, height=12, yscrollcommand=scrollbar.set) + try: + if listbox_font is not None: + listbox.config(font=listbox_font) + except Exception: + pass + scrollbar.config(command=listbox.yview) + listbox.pack(side='left', fill='both', expand=True) + scrollbar.pack(side='right', fill='y') + + def do_refresh(): + try: + listbox.delete(0, 'end') + except Exception: + try: + listbox.delete('1.0', 'end') + except Exception: + pass + + def _scan(): + # Worker thread: collect results and schedule UI update on main thread + try: + pref = filter_entry.get() if hasattr(filter_entry, 'get') else '' + pref_norm = (pref or '').strip().lower() + # Let the BleComm implementation do its own scanning; pass pref + # if it accepts a filter, but always apply a strict "starts + # with" filter in the UI so behavior is predictable. + res = BleComm.scan(pref) if BleComm is not None else [] + devices = [] + items = [] + if not res: + items = ['No devices found'] + else: + for d in res: + # Normalize name and address + name = (d.get('name') or d.get('device_name') or d.get('device-name') or '') + addr = d.get('address') or d.get('id') or d.get('addr') or '' + # If a filter is provided, only include devices whose + # name starts with the filter text (case-insensitive). + if pref_norm: + if not name: + # skip unnamed devices when a filter is active + continue + if not str(name).strip().lower().startswith(pref_norm): + continue + # keep device + devices.append(d) + display_name = name or '' + items.append(f"{display_name} — {addr}") + if not devices: + if pref_norm: + items = [f'No devices found matching "{pref.strip()}"'] + else: + items = ['No devices found'] + except Exception as e: + devices = [] + items = [f'Scan failed: {e}'] + + def _update_ui(): + try: + try: + listbox.delete(0, 'end') + except Exception: + try: + listbox.delete('1.0', 'end') + except Exception: + pass + scan_results.clear() + scan_results.extend(devices) + for it in items: + try: + listbox.insert('end', it) + except Exception: + pass + except Exception: + pass + + try: + top.after(0, _update_ui) + except Exception: + # fallback: call directly (if top already destroyed this may fail) + try: + _update_ui() + except Exception: + pass + + threading.Thread(target=_scan, daemon=True).start() + + def on_select(): + try: + # Prefer to read the index from the Listbox and use the + # corresponding device dict from scan_results to obtain the + # address. This avoids parsing the display text. + try: + sel = listbox.curselection() + if not sel: + return + idx = int(sel[0]) + except Exception: + return + + addr = '' + name = '' + try: + if 0 <= idx < len(scan_results): + d = scan_results[idx] + addr = d.get('address') or d.get('id') or d.get('addr') or '' + name = d.get('name') or d.get('device_name') or d.get('device-name') or '' + except Exception: + addr = '' + name = '' + + if not addr: + try: + text = listbox.get(idx) + # fallback: take RHS of em-dash if present + addr = str(text).split('—')[-1].strip() if '—' in str(text) else str(text).strip() + except Exception: + addr = '' + + # Populate both ID and Device Name fields when possible + try: + if hasattr(self.comm_id, 'delete'): + self.comm_id.delete(0, 'end') + if addr: + self.comm_id.insert(0, addr) + except Exception: + pass + try: + if hasattr(self.comm_name, 'delete'): + self.comm_name.delete(0, 'end') + if name: + self.comm_name.insert(0, name) + except Exception: + pass + + try: + top.destroy() + except Exception: + pass + except Exception: + try: + top.destroy() + except Exception: + pass + + # double-click to select + try: + listbox.bind('', lambda e: on_select()) + except Exception: + pass + + refresh_btn = ctk.CTkButton(frm, text='Refresh', command=do_refresh, fg_color='#7c3aed') if CTK_AVAILABLE else ctk.Button(frm, text='Refresh', command=do_refresh) + refresh_btn.pack(side='left', padx=6) + close_btn = ctk.CTkButton(frm, text='Close', command=top.destroy) if CTK_AVAILABLE else ctk.Button(frm, text='Close', command=top.destroy) + close_btn.pack(side='left', padx=6) + select_btn = ctk.CTkButton(frm, text='Select', command=on_select) if CTK_AVAILABLE else ctk.Button(frm, text='Select', command=on_select) + select_btn.pack(side='right', padx=6) + + do_refresh() + except Exception as e: + _write_gui_log(f'Open scan modal failed: {e}') + + def _toggle_connect(self) -> None: + # optimistic UI update and call BleComm.connect/disconnect in background + try: + label = getattr(self.comm_toggle, 'cget', lambda k: 'Connect')('text') if CTK_AVAILABLE else self.comm_toggle.cget('text') + is_connect = (label.lower().startswith('connect')) + + def _do(): + try: + address = self.comm_id.get() if hasattr(self.comm_id, 'get') else '' + device_name = self.comm_name.get() if hasattr(self.comm_name, 'get') else '' + if is_connect: + # Persist chosen BLE settings to comm.json so they survive restarts + try: + # determine auto flag from widget (best effort) + auto_flag = False + try: + if hasattr(self.comm_auto, 'get'): + auto_flag = bool(self.comm_auto.get()) + else: + # CTk CheckBox may expose get(); otherwise try var + auto_flag = bool(getattr(self.comm_auto, 'var', False)) + except Exception: + auto_flag = False + try: + base = load_comm() or {} + ble = base.get('ble') if isinstance(base.get('ble'), dict) else {} + ble['address'] = address or ble.get('address') or '' + ble['device-name'] = device_name or ble.get('device-name') or '' + # also write legacy keys for robustness + #ble['addr'] = addr or ble.get('addr') or '' + #ble['device_name'] = name or ble.get('device_name') or '' + ble['filter-name'] = (self.comm_filter.get() if hasattr(self.comm_filter, 'get') else '') or ble.get('filter-name') or ble.get('filter_name') or '' + ble['auto-connect'] = bool(auto_flag) + base['ble'] = ble + save_comm(base) + except Exception as e: + _write_gui_log(f'Failed to persist comm config from GUI: {e}') + except Exception: + pass + if BleComm is not None and hasattr(BleComm, 'connect'): + res = BleComm.connect(address or device_name) + _write_gui_log(f'Connect result: {res}') + else: + if BleComm is not None and hasattr(BleComm, 'disconnect'): + res = BleComm.disconnect() + _write_gui_log(f'Disconnect result: {res}') + except Exception as e: + _write_gui_log(f'Connect action failed: {e}') + + threading.Thread(target=_do, daemon=True).start() + + # optimistic UI change + try: + if is_connect: + self.comm_toggle.configure(text='Disconnect') + if CTK_AVAILABLE: + self._status_dot.configure(fg_color='#28a745') + self._status_text.configure(text='Connected') + else: + pass + else: + self.comm_toggle.configure(text='Connect') + if CTK_AVAILABLE: + self._status_dot.configure(fg_color='#e55353') + self._status_text.configure(text='Disconnected') + except Exception: + pass + except Exception as e: + _write_gui_log(f'Toggle connect failed: {e}') + + def _choose_color(self, target: str) -> None: + """Open a color chooser and apply the selected hex to the target button. + + target is 'home' or 'share'. Uses tkinter.colorchooser.askcolor. + """ + try: + if _colorchooser is not None and hasattr(_colorchooser, 'askcolor'): + col = _colorchooser.askcolor(title='Pick a color') + else: + col = _tk.colorchooser.askcolor(title='Pick a color') if hasattr(_tk, 'colorchooser') else None + if not col: + return + hexc = None + try: + hexc = col[1] + except Exception: + hexc = None + if not hexc: + return + if target == 'home': + self.home_color_hex = hexc + try: + if CTK_AVAILABLE: + self.home_color.configure(fg_color=hexc) + else: + self.home_color.configure(bg=hexc) + except Exception: + pass + elif target == 'share': + self.share_color_hex = hexc + try: + if CTK_AVAILABLE: + self.share_color.configure(fg_color=hexc) + else: + self.share_color.configure(bg=hexc) + except Exception: + pass + _write_gui_log(f'Color chosen for {target}: {hexc}') + except Exception as e: + _write_gui_log(f'Color chooser failed: {e}') + + def _test_color(self, target: str) -> None: + """Send a static-color LED command for the given target ('home' or 'share'). + + This converts the selected hex color to RGB bytes and calls the + app-level send_led_command wrapper when available so the app-managed + BleComm is used. Falls back to calling BleComm.send_led_command. + Runs in a background thread to avoid blocking the UI. + """ + try: + # pick hex from stored attributes + hexc = None + if target == 'home': + hexc = getattr(self, 'home_color_hex', None) + elif target == 'share': + hexc = getattr(self, 'share_color_hex', None) + if not hexc: + _write_gui_log(f'Test color: no color set for {target}') + return + + def _worker(): + try: + # convert #RRGGBB -> r,g,b ints + s = str(hexc).strip() + if s.startswith('#'): + s = s[1:] + if len(s) == 6: + r = int(s[0:2], 16) + g = int(s[2:4], 16) + b = int(s[4:6], 16) + else: + # fallback: try parsing shorter forms or raise + if len(s) == 3: + r = int(s[0]*2, 16) + g = int(s[1]*2, 16) + b = int(s[2]*2, 16) + else: + _write_gui_log(f'Test color: unsupported color format: {hexc}') + return + + # Decide whether to send an animation command or a static-color + # command based on the UI mode for the target. + mode_val = '' + anim_id_val = None + try: + if target == 'home': + if hasattr(self.home_mode, 'get'): + mode_val = str(self.home_mode.get()).strip().lower() + # animation id + try: + anim_id_val = int(self.home_id.get()) if hasattr(self.home_id, 'get') and str(self.home_id.get()).strip() else None + except Exception: + anim_id_val = None + else: + if hasattr(self.share_mode, 'get'): + mode_val = str(self.share_mode.get()).strip().lower() + try: + anim_id_val = int(self.share_id.get()) if hasattr(self.share_id, 'get') and str(self.share_id.get()).strip() else None + except Exception: + anim_id_val = None + except Exception: + mode_val = '' + + # Determine command constants (prefer app-level constants) + CMD_SET_STATIC = None + CMD_SET_ANIM = None + try: + if appmod is not None: + CMD_SET_STATIC = getattr(appmod, 'CMD_SET_STATIC_COLOR', None) + CMD_SET_ANIM = getattr(appmod, 'CMD_SET_ANIMATION', None) + except Exception: + CMD_SET_STATIC = CMD_SET_STATIC or None + CMD_SET_ANIM = CMD_SET_ANIM or None + if CMD_SET_STATIC is None or CMD_SET_ANIM is None: + try: + am = importlib.import_module('src.app') + CMD_SET_STATIC = CMD_SET_STATIC or getattr(am, 'CMD_SET_STATIC_COLOR', None) + CMD_SET_ANIM = CMD_SET_ANIM or getattr(am, 'CMD_SET_ANIMATION', None) + except Exception: + pass + if CMD_SET_STATIC is None: + CMD_SET_STATIC = 0x1E + if CMD_SET_ANIM is None: + CMD_SET_ANIM = 0x2C + + # Prepare the actual send arguments depending on mode + send_args = None + send_cmd = None + if mode_val and mode_val.startswith('anim'): + # animation mode: need an animation id + if anim_id_val is None: + _write_gui_log(f'Test color: animation id missing for {target}') + return + send_args = (int(anim_id_val), 0, 0) + send_cmd = CMD_SET_ANIM + else: + # static color + send_args = (r, g, b) + send_cmd = CMD_SET_STATIC + + # prefer using app's send_led_command wrapper for consistent module instance + ok = False + try: + if appmod is not None and hasattr(appmod, 'send_led_command'): + ok = appmod.send_led_command(send_args[0], send_args[1], send_args[2], send_cmd) + else: + try: + am = importlib.import_module('src.app') + if hasattr(am, 'send_led_command'): + ok = am.send_led_command(send_args[0], send_args[1], send_args[2], send_cmd) + except Exception: + ok = False + except Exception: + ok = False + + # fallback to BleComm directly if app wrapper not available + if not ok: + try: + if BleComm is not None and hasattr(BleComm, 'send_led_command'): + ok = BleComm.send_led_command(send_args[0], send_args[1], send_args[2], send_cmd) + except Exception: + ok = False + + _write_gui_log(f'Test send for {target}: mode={mode_val} args={send_args} cmd={hex(send_cmd) if isinstance(send_cmd, int) else send_cmd} ok={ok}') + except Exception as e: + _write_gui_log(f'Test color worker failed: {e}') + + threading.Thread(target=_worker, daemon=True).start() + except Exception as e: + _write_gui_log(f'Test color failed: {e}') + + def _get_runtime_ble(self): + try: + # Prefer the app-managed BleComm. If app is present, ensure its BleComm is started + if appmod is not None: + try: + if hasattr(appmod, 'ensure_ble_started'): + try: + appmod.ensure_ble_started() + except Exception: + pass + return getattr(appmod, 'BleComm', None) or BleComm + except Exception: + return BleComm + # If appmod not set, try importing app dynamically and ensure BleComm started + try: + am = importlib.import_module('src.app') + if hasattr(am, 'ensure_ble_started'): + try: + am.ensure_ble_started() + except Exception: + pass + return getattr(am, 'BleComm', None) or BleComm + except Exception: + return BleComm + except Exception: + return BleComm + + def poll_status(self) -> None: + try: + runtime = self._get_runtime_ble() + st = {'connected': False} + # Prefer the app-managed runtime BleComm when possible + tried = [] + if runtime is not None and hasattr(runtime, 'get_status'): + try: + st = runtime.get_status() or {'connected': False} + tried.append('appmod.BleComm') + except Exception as e: + _write_gui_log(f'poll_status error from runtime: {e}') + st = {'connected': False} + + # If not connected, try importing the BleComm module directly (fallback to avoid stale refs) + if not st.get('connected'): + try: + mod = importlib.import_module('src.BleComm') + if hasattr(mod, 'get_status'): + st_mod = mod.get_status() or {'connected': False} + st = st_mod + tried.append('imported src.BleComm') + except Exception as e: + _write_gui_log(f'poll_status import fallback failed: {e}') + + # update UI if changed + if st != self._last_status: + self._last_status = st + try: + if st.get('connected'): + if CTK_AVAILABLE: + self._status_dot.configure(fg_color='#28a745') + self._status_text.configure(text='Connected') + else: + self._status_text.config(text='Connected') + else: + if CTK_AVAILABLE: + self._status_dot.configure(fg_color='#e55353') + self._status_text.configure(text='Disconnected') + else: + self._status_text.config(text='Disconnected') + + if st.get('last_connected_ts'): + ts = st.get('last_connected_ts') + try: + d = None + # try parsing ISO string first, then epoch float/int + from datetime import datetime + if isinstance(ts, (int, float)): + d = datetime.fromtimestamp(float(ts)) + else: + try: + d = datetime.fromisoformat(str(ts)) + except Exception: + try: + d = datetime.fromtimestamp(float(ts)) + except Exception: + d = None + if d is not None: + self._status_last.configure(text='Last: ' + d.strftime('%Y-%m-%d %H:%M:%S')) + else: + self._status_last.configure(text='') + except Exception: + try: + self._status_last.configure(text='') + except Exception: + pass + except Exception: + pass + + # schedule next poll + except Exception as e: + _write_gui_log(f'poll_status top error: {e}') + finally: + try: + self.after(self._poll_interval_ms, self.poll_status) + except Exception: + pass + + +if __name__ == '__main__': + _write_gui_log('GUI: starting custom GUI') + try: + app = DSLRGui() + try: + import signal + + signal.signal(signal.SIGINT, lambda s, f: app.destroy()) + except Exception: + pass + app.mainloop() + except Exception as e: + _write_gui_log(f'GUI main failed: {e}') diff --git a/src/test_blecomm.py b/src/test_blecomm.py new file mode 100644 index 0000000..e1746d4 --- /dev/null +++ b/src/test_blecomm.py @@ -0,0 +1,20 @@ +"""Simple test harness for BleComm module. + +Run this with your project venv active. It will start the BleComm background loop, +attempt to connect, and try to send a simple LED command. +""" + +import time +from src import BleComm + +if __name__ == "__main__": + try: + print("Starting BleComm...") + BleComm.start() + print("Sleeping 8s to allow discovery/connection...") + time.sleep(8) + ok = BleComm.send_led_command(0x00, 0x00, 0x00, 0x01) + print("send_led_command returned:", ok) + finally: + BleComm.stop() + print("Stopped BleComm") diff --git a/static/css/styles.css b/static/css/styles.css new file mode 100644 index 0000000..7ab8891 --- /dev/null +++ b/static/css/styles.css @@ -0,0 +1,107 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f0f0f0; +} + +.navbar { + width: 100%; + background-color: black; + border-bottom: 2px solid white; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; /* Ensure padding and border are included in the width */ +} + +.navbar-left { + padding: 0 10px; +} + +.navbar ul { + list-style-type: none; + margin: 0; + padding: 0; + display: flex; + align-items: center; + position: relative; /* Ensure relative positioning for the submenu */ +} + +.navbar ul li { + float: left; + position: relative; /* Ensure relative positioning for the submenu */ +} + +.navbar ul li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; + border-right: 1px solid white; +} + +.navbar ul li a:hover { + background-color: grey; +} + +.navbar ul li a.disabled { + color: grey; + pointer-events: none; +} + +.navbar ul .submenu { + display: none; + position: absolute; + top: 100%; + left: 0; + background-color: black; + list-style-type: none; + margin: 0; + padding: 0; + border-top: 2px solid white; + z-index: 1000; +} + +.navbar ul .submenu li { + float: none; + border-right: none; +} + +.navbar ul .submenu li a { + padding: 10px 16px; + border-bottom: 1px solid white; +} + +.navbar ul .submenu li a:hover { + background-color: grey; +} + +.navbar ul li:hover > .submenu { + display: block; +} + + +.nav-image { + height: 40px; + width: auto; +} + +.content-wrapper { + display: flex; + justify-content: center; + width: 100%; + box-sizing: border-box; /* Ensure padding and border are included in the width */ +} + +.content { + width: 90%; /* Increased width */ + max-width: 1400px; /* Increased max-width */ + text-align: center; + box-sizing: border-box; /* Ensure padding and border are included in the width */ +} + +.content h1 { + color: black; +} diff --git a/static/fontawesome/css/all.css b/static/fontawesome/css/all.css new file mode 100644 index 0000000..7e4dfe1 --- /dev/null +++ b/static/fontawesome/css/all.css @@ -0,0 +1,8030 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); + unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/static/fontawesome/css/all.min.css b/static/fontawesome/css/all.min.css new file mode 100644 index 0000000..45072b3 --- /dev/null +++ b/static/fontawesome/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/static/fontawesome/css/brands.css b/static/fontawesome/css/brands.css new file mode 100644 index 0000000..12ad3aa --- /dev/null +++ b/static/fontawesome/css/brands.css @@ -0,0 +1,1594 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } diff --git a/static/fontawesome/css/brands.min.css b/static/fontawesome/css/brands.min.css new file mode 100644 index 0000000..3e70760 --- /dev/null +++ b/static/fontawesome/css/brands.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"} \ No newline at end of file diff --git a/static/fontawesome/css/fontawesome.css b/static/fontawesome/css/fontawesome.css new file mode 100644 index 0000000..ca00c63 --- /dev/null +++ b/static/fontawesome/css/fontawesome.css @@ -0,0 +1,6375 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } diff --git a/static/fontawesome/css/fontawesome.min.css b/static/fontawesome/css/fontawesome.min.css new file mode 100644 index 0000000..7e1c254 --- /dev/null +++ b/static/fontawesome/css/fontawesome.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0} \ No newline at end of file diff --git a/static/fontawesome/css/regular.css b/static/fontawesome/css/regular.css new file mode 100644 index 0000000..dfb7e76 --- /dev/null +++ b/static/fontawesome/css/regular.css @@ -0,0 +1,19 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } diff --git a/static/fontawesome/css/regular.min.css b/static/fontawesome/css/regular.min.css new file mode 100644 index 0000000..7f1cb00 --- /dev/null +++ b/static/fontawesome/css/regular.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400} \ No newline at end of file diff --git a/static/fontawesome/css/solid.css b/static/fontawesome/css/solid.css new file mode 100644 index 0000000..3897c23 --- /dev/null +++ b/static/fontawesome/css/solid.css @@ -0,0 +1,19 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } diff --git a/static/fontawesome/css/solid.min.css b/static/fontawesome/css/solid.min.css new file mode 100644 index 0000000..e7d97d2 --- /dev/null +++ b/static/fontawesome/css/solid.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900} \ No newline at end of file diff --git a/static/fontawesome/css/svg-with-js.css b/static/fontawesome/css/svg-with-js.css new file mode 100644 index 0000000..85b8e6d --- /dev/null +++ b/static/fontawesome/css/svg-with-js.css @@ -0,0 +1,640 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular'; + --fa-font-light: normal 300 1em/1 'Font Awesome 6 Light'; + --fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin'; + --fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone'; + --fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp'; + --fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp'; + --fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp'; + --fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 6 Sharp'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa { + overflow: visible; + box-sizing: content-box; } + +.svg-inline--fa { + display: var(--fa-display, inline-block); + height: 1em; + overflow: visible; + vertical-align: -.125em; } + .svg-inline--fa.fa-2xs { + vertical-align: 0.1em; } + .svg-inline--fa.fa-xs { + vertical-align: 0em; } + .svg-inline--fa.fa-sm { + vertical-align: -0.07143em; } + .svg-inline--fa.fa-lg { + vertical-align: -0.2em; } + .svg-inline--fa.fa-xl { + vertical-align: -0.25em; } + .svg-inline--fa.fa-2xl { + vertical-align: -0.3125em; } + .svg-inline--fa.fa-pull-left { + margin-right: var(--fa-pull-margin, 0.3em); + width: auto; } + .svg-inline--fa.fa-pull-right { + margin-left: var(--fa-pull-margin, 0.3em); + width: auto; } + .svg-inline--fa.fa-li { + width: var(--fa-li-width, 2em); + top: 0.25em; } + .svg-inline--fa.fa-fw { + width: var(--fa-fw-width, 1.25em); } + +.fa-layers svg.svg-inline--fa { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; } + +.fa-layers-text, .fa-layers-counter { + display: inline-block; + position: absolute; + text-align: center; } + +.fa-layers { + display: inline-block; + height: 1em; + position: relative; + text-align: center; + vertical-align: -.125em; + width: 1em; } + .fa-layers svg.svg-inline--fa { + -webkit-transform-origin: center center; + transform-origin: center center; } + +.fa-layers-text { + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + -webkit-transform-origin: center center; + transform-origin: center center; } + +.fa-layers-counter { + background-color: var(--fa-counter-background-color, #ff253a); + border-radius: var(--fa-counter-border-radius, 1em); + box-sizing: border-box; + color: var(--fa-inverse, #fff); + line-height: var(--fa-counter-line-height, 1); + max-width: var(--fa-counter-max-width, 5em); + min-width: var(--fa-counter-min-width, 1.5em); + overflow: hidden; + padding: var(--fa-counter-padding, 0.25em 0.5em); + right: var(--fa-right, 0); + text-overflow: ellipsis; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-counter-scale, 0.25)); + transform: scale(var(--fa-counter-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; } + +.fa-layers-bottom-right { + bottom: var(--fa-bottom, 0); + right: var(--fa-right, 0); + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom right; + transform-origin: bottom right; } + +.fa-layers-bottom-left { + bottom: var(--fa-bottom, 0); + left: var(--fa-left, 0); + right: auto; + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom left; + transform-origin: bottom left; } + +.fa-layers-top-right { + top: var(--fa-top, 0); + right: var(--fa-right, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; } + +.fa-layers-top-left { + left: var(--fa-left, 0); + right: auto; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + vertical-align: middle; + height: 2em; + position: relative; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; + z-index: var(--fa-stack-z-index, auto); } + +.svg-inline--fa.fa-stack-1x { + height: 1em; + width: 1.25em; } + +.svg-inline--fa.fa-stack-2x { + height: 2em; + width: 2.5em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.svg-inline--fa .fa-primary { + fill: var(--fa-primary-color, currentColor); + opacity: var(--fa-primary-opacity, 1); } + +.svg-inline--fa .fa-secondary { + fill: var(--fa-secondary-color, currentColor); + opacity: var(--fa-secondary-opacity, 0.4); } + +.svg-inline--fa.fa-swap-opacity .fa-primary { + opacity: var(--fa-secondary-opacity, 0.4); } + +.svg-inline--fa.fa-swap-opacity .fa-secondary { + opacity: var(--fa-primary-opacity, 1); } + +.svg-inline--fa mask .fa-primary, +.svg-inline--fa mask .fa-secondary { + fill: black; } + +.fad.fa-inverse, +.fa-duotone.fa-inverse { + color: var(--fa-inverse, #fff); } diff --git a/static/fontawesome/css/svg-with-js.min.css b/static/fontawesome/css/svg-with-js.min.css new file mode 100644 index 0000000..a99cebb --- /dev/null +++ b/static/fontawesome/css/svg-with-js.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Solid";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Regular";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Light";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Thin";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-thin:normal 100 1em/1 "Font Awesome 6 Sharp";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.07143em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor)}.svg-inline--fa .fa-secondary,.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)} \ No newline at end of file diff --git a/static/fontawesome/css/v4-font-face.css b/static/fontawesome/css/v4-font-face.css new file mode 100644 index 0000000..9e02283 --- /dev/null +++ b/static/fontawesome/css/v4-font-face.css @@ -0,0 +1,26 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); + unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/static/fontawesome/css/v4-font-face.min.css b/static/fontawesome/css/v4-font-face.min.css new file mode 100644 index 0000000..140e09d --- /dev/null +++ b/static/fontawesome/css/v4-font-face.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/static/fontawesome/css/v4-shims.css b/static/fontawesome/css/v4-shims.css new file mode 100644 index 0000000..ea60ea4 --- /dev/null +++ b/static/fontawesome/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/static/fontawesome/css/v4-shims.min.css b/static/fontawesome/css/v4-shims.min.css new file mode 100644 index 0000000..09baf5f --- /dev/null +++ b/static/fontawesome/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/static/fontawesome/css/v5-font-face.css b/static/fontawesome/css/v5-font-face.css new file mode 100644 index 0000000..7b736b1 --- /dev/null +++ b/static/fontawesome/css/v5-font-face.css @@ -0,0 +1,22 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } diff --git a/static/fontawesome/css/v5-font-face.min.css b/static/fontawesome/css/v5-font-face.min.css new file mode 100644 index 0000000..0cb8f13 --- /dev/null +++ b/static/fontawesome/css/v5-font-face.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")} \ No newline at end of file diff --git a/static/fontawesome/webfonts/fa-brands-400.ttf b/static/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..1fbb1f7 Binary files /dev/null and b/static/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/static/fontawesome/webfonts/fa-brands-400.woff2 b/static/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..5d28021 Binary files /dev/null and b/static/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/static/fontawesome/webfonts/fa-regular-400.ttf b/static/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..549d68d Binary files /dev/null and b/static/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/static/fontawesome/webfonts/fa-regular-400.woff2 b/static/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..18400d7 Binary files /dev/null and b/static/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/static/fontawesome/webfonts/fa-solid-900.ttf b/static/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..bb2a869 Binary files /dev/null and b/static/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/static/fontawesome/webfonts/fa-solid-900.woff2 b/static/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..758dd4f Binary files /dev/null and b/static/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/static/fontawesome/webfonts/fa-v4compatibility.ttf b/static/fontawesome/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000..8c5864c Binary files /dev/null and b/static/fontawesome/webfonts/fa-v4compatibility.ttf differ diff --git a/static/fontawesome/webfonts/fa-v4compatibility.woff2 b/static/fontawesome/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000..f94bec2 Binary files /dev/null and b/static/fontawesome/webfonts/fa-v4compatibility.woff2 differ diff --git a/static/images/ata_logo.png b/static/images/ata_logo.png new file mode 100644 index 0000000..40f3ee6 Binary files /dev/null and b/static/images/ata_logo.png differ diff --git a/static/images/favicon.ico b/static/images/favicon.ico new file mode 100644 index 0000000..5118fd1 Binary files /dev/null and b/static/images/favicon.ico differ diff --git a/static/images/helio-posh.png b/static/images/helio-posh.png new file mode 100644 index 0000000..d9db790 Binary files /dev/null and b/static/images/helio-posh.png differ diff --git a/static/images/internet_icon.png b/static/images/internet_icon.png new file mode 100644 index 0000000..5689453 Binary files /dev/null and b/static/images/internet_icon.png differ diff --git a/static/images/switch-icon.png b/static/images/switch-icon.png new file mode 100644 index 0000000..ef68010 Binary files /dev/null and b/static/images/switch-icon.png differ diff --git a/static/js/crypto-js.min.js b/static/js/crypto-js.min.js new file mode 100644 index 0000000..1deebee --- /dev/null +++ b/static/js/crypto-js.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports?module.exports=exports=e():"function"==typeof define&&define.amd?define([],e):t.CryptoJS=e()}(this,function(){var h,t,e,r,i,n,f,o,s,c,a,l,d,m,x,b,H,z,A,u,p,_,v,y,g,B,w,k,S,C,D,E,R,M,F,P,W,O,I,U,K,X,L,j,N,T,q,Z,V,G,J,$,Q,Y,tt,et,rt,it,nt,ot,st,ct,at,ht,lt,ft,dt,ut,pt,_t,vt,yt,gt,Bt,wt,kt,St,bt=bt||function(l){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&"undefined"!=typeof global&&global.crypto&&(t=global.crypto),!t&&"function"==typeof require)try{t=require("crypto")}catch(t){}function i(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")}var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var e={},o=e.lib={},s=o.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=o.WordArray=s.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||a).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=l.ceil(e/4)},clone:function(){var t=s.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new f.init(r,e/2)}},h=c.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new f.init(r,e)}},d=c.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},u=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=d.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e,r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,s=n/(4*o),c=(s=t?l.ceil(s):l.max((0|s)-this._minBufferSize,0))*o,a=l.min(4*c,n);if(c){for(var h=0;h>>32-e}function Dt(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}function Rt(){for(var t=this._X,e=this._C,r=0;r<8;r++)ft[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);dt[r]=s^c}t[0]=dt[0]+(dt[7]<<16|dt[7]>>>16)+(dt[6]<<16|dt[6]>>>16)|0,t[1]=dt[1]+(dt[0]<<8|dt[0]>>>24)+dt[7]|0,t[2]=dt[2]+(dt[1]<<16|dt[1]>>>16)+(dt[0]<<16|dt[0]>>>16)|0,t[3]=dt[3]+(dt[2]<<8|dt[2]>>>24)+dt[1]|0,t[4]=dt[4]+(dt[3]<<16|dt[3]>>>16)+(dt[2]<<16|dt[2]>>>16)|0,t[5]=dt[5]+(dt[4]<<8|dt[4]>>>24)+dt[3]|0,t[6]=dt[6]+(dt[5]<<16|dt[5]>>>16)+(dt[4]<<16|dt[4]>>>16)|0,t[7]=dt[7]+(dt[6]<<8|dt[6]>>>24)+dt[5]|0}function Mt(){for(var t=this._X,e=this._C,r=0;r<8;r++)wt[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);kt[r]=s^c}t[0]=kt[0]+(kt[7]<<16|kt[7]>>>16)+(kt[6]<<16|kt[6]>>>16)|0,t[1]=kt[1]+(kt[0]<<8|kt[0]>>>24)+kt[7]|0,t[2]=kt[2]+(kt[1]<<16|kt[1]>>>16)+(kt[0]<<16|kt[0]>>>16)|0,t[3]=kt[3]+(kt[2]<<8|kt[2]>>>24)+kt[1]|0,t[4]=kt[4]+(kt[3]<<16|kt[3]>>>16)+(kt[2]<<16|kt[2]>>>16)|0,t[5]=kt[5]+(kt[4]<<8|kt[4]>>>24)+kt[3]|0,t[6]=kt[6]+(kt[5]<<16|kt[5]>>>16)+(kt[4]<<16|kt[4]>>>16)|0,t[7]=kt[7]+(kt[6]<<8|kt[6]>>>24)+kt[5]|0}return h=bt.lib.WordArray,bt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var n=0;n>>6-o%4*2,a=s|c;i[n>>>2]|=a<<24-n%4*8,n++}return h.create(i,n)}(t,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(l){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,n=t.algo,H=[];!function(){for(var t=0;t<64;t++)H[t]=4294967296*l.abs(l.sin(t+1))|0}();var o=n.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],c=t[e+1],a=t[e+2],h=t[e+3],l=t[e+4],f=t[e+5],d=t[e+6],u=t[e+7],p=t[e+8],_=t[e+9],v=t[e+10],y=t[e+11],g=t[e+12],B=t[e+13],w=t[e+14],k=t[e+15],S=o[0],m=o[1],x=o[2],b=o[3];S=z(S,m,x,b,s,7,H[0]),b=z(b,S,m,x,c,12,H[1]),x=z(x,b,S,m,a,17,H[2]),m=z(m,x,b,S,h,22,H[3]),S=z(S,m,x,b,l,7,H[4]),b=z(b,S,m,x,f,12,H[5]),x=z(x,b,S,m,d,17,H[6]),m=z(m,x,b,S,u,22,H[7]),S=z(S,m,x,b,p,7,H[8]),b=z(b,S,m,x,_,12,H[9]),x=z(x,b,S,m,v,17,H[10]),m=z(m,x,b,S,y,22,H[11]),S=z(S,m,x,b,g,7,H[12]),b=z(b,S,m,x,B,12,H[13]),x=z(x,b,S,m,w,17,H[14]),S=A(S,m=z(m,x,b,S,k,22,H[15]),x,b,c,5,H[16]),b=A(b,S,m,x,d,9,H[17]),x=A(x,b,S,m,y,14,H[18]),m=A(m,x,b,S,s,20,H[19]),S=A(S,m,x,b,f,5,H[20]),b=A(b,S,m,x,v,9,H[21]),x=A(x,b,S,m,k,14,H[22]),m=A(m,x,b,S,l,20,H[23]),S=A(S,m,x,b,_,5,H[24]),b=A(b,S,m,x,w,9,H[25]),x=A(x,b,S,m,h,14,H[26]),m=A(m,x,b,S,p,20,H[27]),S=A(S,m,x,b,B,5,H[28]),b=A(b,S,m,x,a,9,H[29]),x=A(x,b,S,m,u,14,H[30]),S=C(S,m=A(m,x,b,S,g,20,H[31]),x,b,f,4,H[32]),b=C(b,S,m,x,p,11,H[33]),x=C(x,b,S,m,y,16,H[34]),m=C(m,x,b,S,w,23,H[35]),S=C(S,m,x,b,c,4,H[36]),b=C(b,S,m,x,l,11,H[37]),x=C(x,b,S,m,u,16,H[38]),m=C(m,x,b,S,v,23,H[39]),S=C(S,m,x,b,B,4,H[40]),b=C(b,S,m,x,s,11,H[41]),x=C(x,b,S,m,h,16,H[42]),m=C(m,x,b,S,d,23,H[43]),S=C(S,m,x,b,_,4,H[44]),b=C(b,S,m,x,g,11,H[45]),x=C(x,b,S,m,k,16,H[46]),S=D(S,m=C(m,x,b,S,a,23,H[47]),x,b,s,6,H[48]),b=D(b,S,m,x,u,10,H[49]),x=D(x,b,S,m,w,15,H[50]),m=D(m,x,b,S,f,21,H[51]),S=D(S,m,x,b,g,6,H[52]),b=D(b,S,m,x,h,10,H[53]),x=D(x,b,S,m,v,15,H[54]),m=D(m,x,b,S,c,21,H[55]),S=D(S,m,x,b,p,6,H[56]),b=D(b,S,m,x,k,10,H[57]),x=D(x,b,S,m,d,15,H[58]),m=D(m,x,b,S,B,21,H[59]),S=D(S,m,x,b,l,6,H[60]),b=D(b,S,m,x,y,10,H[61]),x=D(x,b,S,m,a,15,H[62]),m=D(m,x,b,S,_,21,H[63]),o[0]=o[0]+S|0,o[1]=o[1]+m|0,o[2]=o[2]+x|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32;var n=l.floor(r/4294967296),o=r;e[15+(64+i>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(64+i>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,c=s.words,a=0;a<4;a++){var h=c[a];c[a]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return s},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function z(t,e,r,i,n,o,s){var c=t+(e&r|~e&i)+n+s;return(c<>>32-o)+e}function A(t,e,r,i,n,o,s){var c=t+(e&i|r&~i)+n+s;return(c<>>32-o)+e}function C(t,e,r,i,n,o,s){var c=t+(e^r^i)+n+s;return(c<>>32-o)+e}function D(t,e,r,i,n,o,s){var c=t+(r^(e|~i))+n+s;return(c<>>32-o)+e}t.MD5=i._createHelper(o),t.HmacMD5=i._createHmacHelper(o)}(Math),e=(t=bt).lib,r=e.WordArray,i=e.Hasher,n=t.algo,f=[],o=n.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=0;a<80;a++){if(a<16)f[a]=0|t[e+a];else{var h=f[a-3]^f[a-8]^f[a-14]^f[a-16];f[a]=h<<1|h>>>31}var l=(i<<5|i>>>27)+c+f[a];l+=a<20?1518500249+(n&o|~n&s):a<40?1859775393+(n^o^s):a<60?(n&o|n&s|o&s)-1894007588:(n^o^s)-899497514,c=s,s=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}}),t.SHA1=i._createHelper(o),t.HmacSHA1=i._createHmacHelper(o),function(n){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,o=t.algo,s=[],B=[];!function(){function t(t){for(var e=n.sqrt(t),r=2;r<=e;r++)if(!(t%r))return;return 1}function e(t){return 4294967296*(t-(0|t))|0}for(var r=2,i=0;i<64;)t(r)&&(i<8&&(s[i]=e(n.pow(r,.5))),B[i]=e(n.pow(r,1/3)),i++),r++}();var w=[],c=o.SHA256=i.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=0;f<64;f++){if(f<16)w[f]=0|t[e+f];else{var d=w[f-15],u=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,p=w[f-2],_=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;w[f]=u+w[f-7]+_+w[f-16]}var v=i&n^i&o^n&o,y=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),g=l+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&a^~c&h)+B[f]+w[f];l=h,h=a,a=c,c=s+g|0,s=o,o=n,n=i,i=g+(y+v)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+a|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=n.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA256=i._createHelper(c),t.HmacSHA256=i._createHmacHelper(c)}(Math),function(){var n=bt.lib.WordArray,t=bt.enc;t.Utf16=t.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>1]|=t.charCodeAt(i)<<16-i%2*16;return n.create(r,2*e)}};function s(t){return t<<8&4278255360|t>>>8&16711935}t.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535);i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>1]|=s(t.charCodeAt(i)<<16-i%2*16);return n.create(r,2*e)}}}(),function(){if("function"==typeof ArrayBuffer){var t=bt.lib.WordArray,n=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],i=0;i>>2]|=t[i]<<24-i%4*8;n.call(this,r,e)}else n.apply(this,arguments)}).prototype=t}}(),Math,c=(s=bt).lib,a=c.WordArray,l=c.Hasher,d=s.algo,m=a.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=a.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=a.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),H=a.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),z=a.create([0,1518500249,1859775393,2400959708,2840853838]),A=a.create([1352829926,1548603684,1836072691,2053994217,0]),u=d.RIPEMD160=l.extend({_doReset:function(){this._hash=a.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,c,a,h,l,f,d,u,p,_,v=this._hash.words,y=z.words,g=A.words,B=m.words,w=x.words,k=b.words,S=H.words;l=o=v[0],f=s=v[1],d=c=v[2],u=a=v[3],p=h=v[4];for(r=0;r<80;r+=1)_=o+t[e+B[r]]|0,_+=r<16?mt(s,c,a)+y[0]:r<32?xt(s,c,a)+y[1]:r<48?Ht(s,c,a)+y[2]:r<64?zt(s,c,a)+y[3]:At(s,c,a)+y[4],_=(_=Ct(_|=0,k[r]))+h|0,o=h,h=a,a=Ct(c,10),c=s,s=_,_=l+t[e+w[r]]|0,_+=r<16?At(f,d,u)+g[0]:r<32?zt(f,d,u)+g[1]:r<48?Ht(f,d,u)+g[2]:r<64?xt(f,d,u)+g[3]:mt(f,d,u)+g[4],_=(_=Ct(_|=0,S[r]))+p|0,l=p,p=u,u=Ct(d,10),d=f,f=_;_=v[1]+c+u|0,v[1]=v[2]+a+p|0,v[2]=v[3]+h+l|0,v[3]=v[4]+o+f|0,v[4]=v[0]+s+d|0,v[0]=_},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=l.clone.call(this);return t._hash=this._hash.clone(),t}}),s.RIPEMD160=l._createHelper(u),s.HmacRIPEMD160=l._createHmacHelper(u),p=bt.lib.Base,_=bt.enc.Utf8,bt.algo.HMAC=p.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),o=this._iKey=e.clone(),s=n.words,c=o.words,a=0;a>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(x=r[n]).high^=s,x.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++){h^=(x=r[a+5*f]).high,l^=x.low}var d=R[a];d.high=h,d.low=l}for(a=0;a<5;a++){var u=R[(a+4)%5],p=R[(a+1)%5],_=p.high,v=p.low;for(h=u.high^(_<<1|v>>>31),l=u.low^(v<<1|_>>>31),f=0;f<5;f++){(x=r[a+5*f]).high^=h,x.low^=l}}for(var y=1;y<25;y++){var g=(x=r[y]).high,B=x.low,w=C[y];l=w<32?(h=g<>>32-w,B<>>32-w):(h=B<>>64-w,g<>>64-w);var k=R[D[y]];k.high=h,k.low=l}var S=R[0],m=r[0];S.high=m.high,S.low=m.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var x=r[y=a+5*f],b=R[y],H=R[(a+1)%5+5*f],z=R[(a+2)%5+5*f];x.high=b.high^~H.high&z.high,x.low=b.low^~H.low&z.low}x=r[0];var A=E[c];x.high^=A.high,x.low^=A.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(d.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,o=this.cfg.outputLength/8,s=o/8,c=[],a=0;a>>24)|4278255360&(l<<24|l>>>8),f=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8),c.push(f),c.push(l)}return new u.init(c,o)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(n),t.HmacSHA3=i._createHmacHelper(n)}(Math),function(){var t=bt,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var mt=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],xt=[];!function(){for(var t=0;t<80;t++)xt[t]=s()}();var c=o.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=i.high,d=i.low,u=n.high,p=n.low,_=o.high,v=o.low,y=s.high,g=s.low,B=c.high,w=c.low,k=a.high,S=a.low,m=h.high,x=h.low,b=l.high,H=l.low,z=f,A=d,C=u,D=p,E=_,R=v,M=y,F=g,P=B,W=w,O=k,I=S,U=m,K=x,X=b,L=H,j=0;j<80;j++){var N,T,q=xt[j];if(j<16)T=q.high=0|t[e+2*j],N=q.low=0|t[e+2*j+1];else{var Z=xt[j-15],V=Z.high,G=Z.low,J=(V>>>1|G<<31)^(V>>>8|G<<24)^V>>>7,$=(G>>>1|V<<31)^(G>>>8|V<<24)^(G>>>7|V<<25),Q=xt[j-2],Y=Q.high,tt=Q.low,et=(Y>>>19|tt<<13)^(Y<<3|tt>>>29)^Y>>>6,rt=(tt>>>19|Y<<13)^(tt<<3|Y>>>29)^(tt>>>6|Y<<26),it=xt[j-7],nt=it.high,ot=it.low,st=xt[j-16],ct=st.high,at=st.low;T=(T=(T=J+nt+((N=$+ot)>>>0<$>>>0?1:0))+et+((N+=rt)>>>0>>0?1:0))+ct+((N+=at)>>>0>>0?1:0),q.high=T,q.low=N}var ht,lt=P&O^~P&U,ft=W&I^~W&K,dt=z&C^z&E^C&E,ut=A&D^A&R^D&R,pt=(z>>>28|A<<4)^(z<<30|A>>>2)^(z<<25|A>>>7),_t=(A>>>28|z<<4)^(A<<30|z>>>2)^(A<<25|z>>>7),vt=(P>>>14|W<<18)^(P>>>18|W<<14)^(P<<23|W>>>9),yt=(W>>>14|P<<18)^(W>>>18|P<<14)^(W<<23|P>>>9),gt=mt[j],Bt=gt.high,wt=gt.low,kt=X+vt+((ht=L+yt)>>>0>>0?1:0),St=_t+ut;X=U,L=K,U=O,K=I,O=P,I=W,P=M+(kt=(kt=(kt=kt+lt+((ht=ht+ft)>>>0>>0?1:0))+Bt+((ht=ht+wt)>>>0>>0?1:0))+T+((ht=ht+N)>>>0>>0?1:0))+((W=F+ht|0)>>>0>>0?1:0)|0,M=E,F=R,E=C,R=D,C=z,D=A,z=kt+(pt+dt+(St>>>0<_t>>>0?1:0))+((A=ht+St|0)>>>0>>0?1:0)|0}d=i.low=d+A,i.high=f+z+(d>>>0>>0?1:0),p=n.low=p+D,n.high=u+C+(p>>>0>>0?1:0),v=o.low=v+R,o.high=_+E+(v>>>0>>0?1:0),g=s.low=g+F,s.high=y+M+(g>>>0>>0?1:0),w=c.low=w+W,c.high=B+P+(w>>>0>>0?1:0),S=a.low=S+I,a.high=k+O+(S>>>0>>0?1:0),x=h.low=x+K,h.high=m+U+(x>>>0>>0?1:0),H=l.low=H+L,l.high=b+X+(H>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),Z=(q=bt).x64,V=Z.Word,G=Z.WordArray,J=q.algo,$=J.SHA512,Q=J.SHA384=$.extend({_doReset:function(){this._hash=new G.init([new V.init(3418070365,3238371032),new V.init(1654270250,914150663),new V.init(2438529370,812702999),new V.init(355462360,4144912697),new V.init(1731405415,4290775857),new V.init(2394180231,1750603025),new V.init(3675008525,1694076839),new V.init(1203062813,3204075428)])},_doFinalize:function(){var t=$._doFinalize.call(this);return t.sigBytes-=16,t}}),q.SHA384=$._createHelper(Q),q.HmacSHA384=$._createHmacHelper(Q),bt.lib.Cipher||function(){var t=bt,e=t.lib,r=e.Base,a=e.WordArray,i=e.BufferedBlockAlgorithm,n=t.enc,o=(n.Utf8,n.Base64),s=t.algo.EvpKDF,c=e.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(i){return{encrypt:function(t,e,r){return h(e).encrypt(i,t,e,r)},decrypt:function(t,e,r){return h(e).decrypt(i,t,e,r)}}}});function h(t){return"string"==typeof t?w:g}e.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l,f=t.mode={},d=e.BlockCipherMode=r.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),u=f.CBC=((l=d.extend()).Encryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;p.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),l.Decryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);r.decryptBlock(t,e),p.call(this,t,e,i),this._prevBlock=n}}),l);function p(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o>>2];t.sigBytes-=e}},v=(e.BlockCipher=c.extend({cfg:c.cfg.extend({mode:u,padding:_}),reset:function(){var t;c.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?a.create([1398893684,1701076831]).concat(r).concat(e):e).toString(o)},parse:function(t){var e,r=o.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=a.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),v.create({ciphertext:r,salt:e})}},g=e.SerializableCipher=r.extend({cfg:r.extend({format:y}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),B=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||a.random(8);var n=s.create({keySize:e+r}).compute(t,i),o=a.create(n.words.slice(e),4*r);return n.sigBytes=4*e,v.create({key:n,iv:o,salt:i})}},w=e.PasswordBasedCipher=g.extend({cfg:g.cfg.extend({kdf:B}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=g.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=n.iv,g.decrypt.call(this,t,e,n.key,i)}})}(),bt.mode.CFB=((Y=bt.lib.BlockCipherMode.extend()).Encryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Dt.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),Y.Decryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);Dt.call(this,t,e,i,r),this._prevBlock=n}}),Y),bt.mode.ECB=((tt=bt.lib.BlockCipherMode.extend()).Encryptor=tt.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),tt.Decryptor=tt.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),tt),bt.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,i=4*e,n=i-r%i,o=r+n-1;t.clamp(),t.words[o>>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(bt.lib.WordArray.random(i-1)).concat(bt.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso97971={pad:function(t,e){t.concat(bt.lib.WordArray.create([2147483648],1)),bt.pad.ZeroPadding.pad(t,e)},unpad:function(t){bt.pad.ZeroPadding.unpad(t),t.sigBytes--}},bt.mode.OFB=(et=bt.lib.BlockCipherMode.extend(),rt=et.Encryptor=et.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s>>8^255&n^99,h[r]=n;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a;a=16843009*c^65537*s^257*o^16843008*r;_[n]=a<<24|a>>>8,v[n]=a<<16|a>>>16,y[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],i=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c>>24]]^v[h[a>>>16&255]]^y[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,v,y,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],v=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],y=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++];h=_,l=v,f=y,d=g}_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],v=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],y=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=v,t[e+2]=y,t[e+3]=g},keySize:8});t.AES=e._createHelper(i)}(),function(){var t=bt,e=t.lib,n=e.WordArray,r=e.BlockCipher,i=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],o=i.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var s=n[o]=[],c=f[o];for(r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}var a=this._invSubKeys=[];for(r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),i=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=o.createEncryptor(n.create(e)),this._des2=o.createEncryptor(n.create(r)),this._des3=o.createEncryptor(n.create(i))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(s)}(),function(){var t=bt,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,c=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+c)%256;var a=i[n];i[n]=i[o],i[o]=a}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(r=this._b=0;r<4;r++)Rt.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;n[0]^=a,n[1]^=l,n[2]^=h,n[3]^=f,n[4]^=a,n[5]^=l,n[6]^=h,n[7]^=f;for(r=0;r<4;r++)Rt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Rt.call(this),lt[0]=r[0]^r[5]>>>16^r[3]<<16,lt[1]=r[2]^r[7]>>>16^r[5]<<16,lt[2]=r[4]^r[1]>>>16^r[7]<<16,lt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)lt[i]=16711935&(lt[i]<<8|lt[i]>>>24)|4278255360&(lt[i]<<24|lt[i]>>>8),t[e+i]^=lt[i]},blockSize:4,ivSize:2}),ct.Rabbit=at._createHelper(ut),bt.mode.CTR=(pt=bt.lib.BlockCipherMode.extend(),_t=pt.Encryptor=pt.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)Mt.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;i[0]^=a,i[1]^=l,i[2]^=h,i[3]^=f,i[4]^=a,i[5]^=l,i[6]^=h,i[7]^=f;for(n=0;n<4;n++)Mt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Mt.call(this),Bt[0]=r[0]^r[5]>>>16^r[3]<<16,Bt[1]=r[2]^r[7]>>>16^r[5]<<16,Bt[2]=r[4]^r[1]>>>16^r[7]<<16,Bt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)Bt[i]=16711935&(Bt[i]<<8|Bt[i]>>>24)|4278255360&(Bt[i]<<24|Bt[i]>>>8),t[e+i]^=Bt[i]},blockSize:4,ivSize:2}),vt.RabbitLegacy=yt._createHelper(St),bt.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},bt}); \ No newline at end of file diff --git a/static/js/data-request.js b/static/js/data-request.js new file mode 100644 index 0000000..e24bca9 --- /dev/null +++ b/static/js/data-request.js @@ -0,0 +1,29 @@ +function requestJsonFromServer(route) { + return fetch(route) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not ok'); + } + return response.json(); // Assuming the server returns a JSON response + }) + .then(jsonData => { + //console.log('Received JSON data:', jsonData); + return jsonData; // Return the JSON data + }) + .catch(error => { + console.error('There was a problem with the fetch operation:', error); + return null; // Return null in case of an error + }); +} + +/* Example usage +requestJsonFromServer('/get_data') + .then(data => { + if (data !== null) { + console.log("Data received:", data); + // You can process the data here as needed + } else { + console.log("Failed to retrieve data from the server."); + } + }); +*/ diff --git a/static/js/jquery-3.7.1.js b/static/js/jquery-3.7.1.js new file mode 100644 index 0000000..5a1e8cd --- /dev/null +++ b/static/js/jquery-3.7.1.js @@ -0,0 +1,10716 @@ +/*! + * jQuery JavaScript Library v3.7.1 + * https://jquery.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-08-28T13:37Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket trac-14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var version = "3.7.1", + + rhtmlSuffix = /HTML$/i, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + + // Retrieve the text value of an array of DOM nodes + text: function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += jQuery.text( node ); + } + } + if ( nodeType === 1 || nodeType === 11 ) { + return elem.textContent; + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + isXMLDoc: function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Assume HTML when documentElement doesn't yet exist, such as inside + // document fragments. + return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var pop = arr.pop; + + +var sort = arr.sort; + + +var splice = arr.splice; + + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +// Note: an element does not contain itself +jQuery.contains = function( a, b ) { + var bup = b && b.parentNode; + + return a === bup || !!( bup && bup.nodeType === 1 && ( + + // Support: IE 9 - 11+ + // IE doesn't have `contains` on SVG. + a.contains ? + a.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); +}; + + + + +// CSS string/identifier serialization +// https://drafts.csswg.org/cssom/#common-serializing-idioms +var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + +function fcssescape( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; +} + +jQuery.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + + + + +var preferredDoc = document, + pushNative = push; + +( function() { + +var i, + Expr, + outermostContext, + sortInput, + hasDuplicate, + push = pushNative, + + // Local document vars + document, + documentElement, + documentIsHTML, + rbuggyQSA, + matches, + + // Instance-specific data + expando = jQuery.expando, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + + "loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + ID: new RegExp( "^#(" + identifier + ")" ), + CLASS: new RegExp( "^\\.(" + identifier + ")" ), + TAG: new RegExp( "^(" + identifier + "|[*])" ), + ATTR: new RegExp( "^" + attributes ), + PSEUDO: new RegExp( "^" + pseudos ), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + bool: new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + needsContext: new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + if ( nonHex ) { + + // Strip the backslash prefix from a non-hex escape sequence + return nonHex; + } + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + return high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes; see `setDocument`. + // Support: IE 9 - 11+, Edge 12 - 18+ + // Removing the function wrapper causes a "Permission Denied" + // error in IE/Edge. + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && nodeName( elem, "fieldset" ); + }, + { dir: "parentNode", next: "legend" } + ); + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android <=4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { + apply: function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + }, + call: function( target ) { + pushNative.apply( target, slice.call( arguments, 1 ) ); + } + }; +} + +function find( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE 9 only + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + push.call( results, elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE 9 only + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + find.contains( context, elem ) && + elem.id === m ) { + + push.call( results, elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when + // strict-comparing two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( newContext != context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = jQuery.escapeSelector( nid ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties + // (see https://github.com/jquery/sizzle/issues/157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by jQuery selector module + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + return nodeName( elem, "input" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && + elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11+ + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a jQuery selector context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [node] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +function setDocument( node ) { + var subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + documentElement = document.documentElement; + documentIsHTML = !jQuery.isXMLDoc( document ); + + // Support: iOS 7 only, IE 9 - 11+ + // Older browsers didn't support unprefixed `matches`. + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.msMatchesSelector; + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 9 - 11+, Edge 12 - 18+ + subWindow.addEventListener( "unload", unloadHandler ); + } + + // Support: IE <10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + documentElement.appendChild( el ).id = jQuery.expando; + return !document.getElementsByName || + !document.getElementsByName( jQuery.expando ).length; + } ); + + // Support: IE 9 only + // Check to see if it's possible to do matchesSelector + // on a disconnected node. + support.disconnectedMatch = assert( function( el ) { + return matches.call( el, "*" ); + } ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // IE/Edge don't support the :scope pseudo-class. + support.scope = assert( function() { + return document.querySelectorAll( ":scope" ); + } ); + + // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only + // Make sure the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter.ID = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find.ID = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter.ID = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find.ID = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find.TAG = function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else { + return context.querySelectorAll( tag ); + } + }; + + // Class + Expr.find.CLASS = function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + rbuggyQSA = []; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + documentElement.appendChild( el ).innerHTML = + "" + + ""; + + // Support: iOS <=7 - 8 only + // Boolean attributes and "value" are not treated correctly in some XML documents + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: iOS <=7 - 8 only + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: iOS 8 only + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE 9 - 11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + documentElement.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + } ); + + if ( !support.cssHas ) { + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a === document || a.ownerDocument == preferredDoc && + find.contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b === document || b.ownerDocument == preferredDoc && + find.contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + }; + + return document; +} + +find.matches = function( expr, elements ) { + return find( expr, null, null, elements ); +}; + +find.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return find( expr, document, null, [ elem ] ).length > 0; +}; + +find.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return jQuery.contains( context, elem ); +}; + + +find.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (see trac-13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + if ( val !== undefined ) { + return val; + } + + return elem.getAttribute( name ); +}; + +find.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +jQuery.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + // + // Support: Android <=4.0+ + // Testing for detecting duplicates is unpredictable so instead assume we can't + // depend on duplicate detection in all browsers without a stable sort. + hasDuplicate = !support.sortStable; + sortInput = !support.sortStable && slice.call( results, 0 ); + sort.call( results, sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + splice.call( results, duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +jQuery.fn.uniqueSort = function() { + return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); +}; + +Expr = jQuery.expr = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + ATTR: function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) + .replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + CHILD: function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + find.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) + ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + find.error( match[ 0 ] ); + } + + return match; + }, + + PSEUDO: function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr.CHILD.test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + TAG: function( nodeNameSelector ) { + var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return nodeName( elem, expectedNodeName ); + }; + }, + + CLASS: function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + ")" + className + + "(" + whitespace + "|$)" ) ) && + classCache( className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + ATTR: function( name, operator, check ) { + return function( elem ) { + var result = find.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + if ( operator === "=" ) { + return result === check; + } + if ( operator === "!=" ) { + return result !== check; + } + if ( operator === "^=" ) { + return check && result.indexOf( check ) === 0; + } + if ( operator === "*=" ) { + return check && result.indexOf( check ) > -1; + } + if ( operator === "$=" ) { + return check && result.slice( -check.length ) === check; + } + if ( operator === "~=" ) { + return ( " " + result.replace( rwhitespace, " " ) + " " ) + .indexOf( check ) > -1; + } + if ( operator === "|=" ) { + return result === check || result.slice( 0, check.length + 1 ) === check + "-"; + } + + return false; + }; + }, + + CHILD: function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + nodeName( node, name ) : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || ( parent[ expando ] = {} ); + cache = outerCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + cache = outerCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + nodeName( node, name ) : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + outerCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + PSEUDO: function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // https://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + find.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as jQuery does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + not: markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrimCSS, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element + // (see https://github.com/jquery/sizzle/issues/299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + has: markFunction( function( selector ) { + return function( elem ) { + return find( selector, elem ).length > 0; + }; + } ), + + contains: markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // https://www.w3.org/TR/selectors/#lang-pseudo + lang: markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + find.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + target: function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + root: function( elem ) { + return elem === documentElement; + }, + + focus: function( elem ) { + return elem === safeActiveElement() && + document.hasFocus() && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + enabled: createDisabledPseudo( false ), + disabled: createDisabledPseudo( true ), + + checked: function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + return ( nodeName( elem, "input" ) && !!elem.checked ) || + ( nodeName( elem, "option" ) && !!elem.selected ); + }, + + selected: function( elem ) { + + // Support: IE <=11+ + // Accessing the selectedIndex property + // forces the browser to treat the default option as + // selected when in an optgroup. + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + empty: function( elem ) { + + // https://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + parent: function( elem ) { + return !Expr.pseudos.empty( elem ); + }, + + // Element/input types + header: function( elem ) { + return rheader.test( elem.nodeName ); + }, + + input: function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + button: function( elem ) { + return nodeName( elem, "input" ) && elem.type === "button" || + nodeName( elem, "button" ); + }, + + text: function( elem ) { + var attr; + return nodeName( elem, "input" ) && elem.type === "text" && + + // Support: IE <10 only + // New HTML5 attribute values (e.g., "search") appear + // with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + first: createPositionalPseudo( function() { + return [ 0 ]; + } ), + + last: createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + even: createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + odd: createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + lt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i; + + if ( argument < 0 ) { + i = argument + length; + } else if ( argument > length ) { + i = length; + } else { + i = argument; + } + + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + gt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos.nth = Expr.pseudos.eq; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rleadingCombinator.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrimCSS, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + if ( parseOnly ) { + return soFar.length; + } + + return soFar ? + find.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + if ( skip && nodeName( elem, skip ) ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = outerCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + outerCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + find( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, matcherOut, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || + multipleContexts( selector || "*", + context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems; + + if ( matcher ) { + + // If we have a postFinder, or filtered seed, or non-seed postFilter + // or preexisting results, + matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results; + + // Find primary matches + matcher( matcherIn, matcherOut, context, xml ); + } else { + matcherOut = matcherIn; + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element + // (see https://github.com/jquery/sizzle/issues/299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrimCSS, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find.TAG( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: iOS <=7 - 9 only + // Tolerate NodeList properties (IE: "length"; Safari: ) matching + // elements by id. (see trac-14142) + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + push.call( results, elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + jQuery.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +function compile( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +} + +/** + * A low-level selection function that works with jQuery's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with jQuery selector compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find.ID( + token.matches[ 0 ].replace( runescape, funescape ), + context + ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && + testContext( context.parentNode ) || context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +} + +// One-time assignments + +// Support: Android <=4.0 - 4.1+ +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Initialize against the default document +setDocument(); + +// Support: Android <=4.0 - 4.1+ +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +jQuery.find = find; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.unique = jQuery.uniqueSort; + +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. +find.compile = compile; +find.select = select; +find.setDocument = setDocument; +find.tokenize = tokenize; + +find.escape = jQuery.escapeSelector; +find.getText = jQuery.text; +find.isXML = jQuery.isXMLDoc; +find.selectors = jQuery.expr; +find.support = jQuery.support; +find.uniqueSort = jQuery.uniqueSort; + + /* eslint-enable */ + +} )(); + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to jQuery#find + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.error ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the error, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getErrorHook ) { + process.error = jQuery.Deferred.getErrorHook(); + + // The deprecated alias of the above. While the name suggests + // returning the stack, not an error instance, jQuery just passes + // it directly to `console.warn` so both will work; an instance + // just better cooperates with source maps. + } else if ( jQuery.Deferred.getStackHook ) { + process.error = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error +// captured before the async barrier to get the original error cause +// which may otherwise be hidden. +jQuery.Deferred.exceptionHook = function( error, asyncError ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, + error.stack, asyncError ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See trac-6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (trac-9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see trac-8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (trac-14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (trac-11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (trac-14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (trac-13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (trac-12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (trac-13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", true ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, isSetup ) { + + // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add + if ( !isSetup ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + if ( !saved ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + this[ type ](); + result = dataPriv.get( this, type ); + dataPriv.set( this, type, false ); + + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + return result; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved ) { + + // ...and capture the result + dataPriv.set( this, type, jQuery.event.trigger( + saved[ 0 ], + saved.slice( 1 ), + this + ) ); + + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (trac-504, trac-13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + + function focusMappedHandler( nativeEvent ) { + if ( document.documentMode ) { + + // Support: IE 11+ + // Attach a single focusin/focusout handler on the document while someone wants + // focus/blur. This is because the former are synchronous in IE while the latter + // are async. In other browsers, all those handlers are invoked synchronously. + + // `handle` from private data would already wrap the event, but we need + // to change the `type` here. + var handle = dataPriv.get( this, "handle" ), + event = jQuery.event.fix( nativeEvent ); + event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; + event.isSimulated = true; + + // First, handle focusin/focusout + handle( nativeEvent ); + + // ...then, handle focus/blur + // + // focus/blur don't bubble while focusin/focusout do; simulate the former by only + // invoking the handler at the lower level. + if ( event.target === event.currentTarget ) { + + // The setup part calls `leverageNative`, which, in turn, calls + // `jQuery.event.add`, so event handle will already have been set + // by this point. + handle( event ); + } + } else { + + // For non-IE browsers, attach a single capturing handler on the document + // while someone wants focusin/focusout. + jQuery.event.simulate( delegateType, nativeEvent.target, + jQuery.event.fix( nativeEvent ) ); + } + } + + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + var attaches; + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, true ); + + if ( document.documentMode ) { + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + attaches = dataPriv.get( this, delegateType ); + if ( !attaches ) { + this.addEventListener( delegateType, focusMappedHandler ); + } + dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); + } else { + + // Return false to allow normal processing in the caller + return false; + } + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + teardown: function() { + var attaches; + + if ( document.documentMode ) { + attaches = dataPriv.get( this, delegateType ) - 1; + if ( !attaches ) { + this.removeEventListener( delegateType, focusMappedHandler ); + dataPriv.remove( this, delegateType ); + } else { + dataPriv.set( this, delegateType, attaches ); + } + } else { + + // Return false to indicate standard teardown should be applied + return false; + } + }, + + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function( event ) { + return dataPriv.get( event.target, type ); + }, + + delegateType: delegateType + }; + + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + // + // Support: IE 9 - 11+ + // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, + // attach a single handler for both events in IE. + jQuery.event.special[ delegateType ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ); + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + if ( !attaches ) { + if ( document.documentMode ) { + this.addEventListener( delegateType, focusMappedHandler ); + } else { + doc.addEventListener( type, focusMappedHandler, true ); + } + } + dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ) - 1; + + if ( !attaches ) { + if ( document.documentMode ) { + this.removeEventListener( delegateType, focusMappedHandler ); + } else { + doc.removeEventListener( type, focusMappedHandler, true ); + } + dataPriv.remove( dataHolder, delegateType ); + } else { + dataPriv.set( dataHolder, delegateType, attaches ); + } + } + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (trac-8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Re-enable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew jQuery#find here for performance reasons: + // https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var rcustomProp = /^--/; + + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (trac-8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "box-sizing:content-box;border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is `display: block` + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test( name ), + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) + if ( computed ) { + + // Support: IE <=9 - 11+ + // IE only supports `"float"` in `getPropertyValue`; in computed styles + // it's only available as `"cssFloat"`. We no longer modify properties + // sent to `.css()` apart from camelCasing, so we need to check both. + // Normally, this would create difference in behavior: if + // `getPropertyValue` returns an empty string, the value returned + // by `.css()` would be `undefined`. This is usually the case for + // disconnected elements. However, in IE even disconnected elements + // with no styles return `"none"` for `getPropertyValue( "float" )` + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( isCustomProp && ret ) { + + // Support: Firefox 105+, Chrome <=105+ + // Spec requires trimming whitespace for custom properties (gh-4926). + // Firefox only trims leading whitespace. Chrome just collapses + // both leading & trailing whitespace to a single space. + // + // Fall back to `undefined` if empty string returned. + // This collapses a missing definition with property defined + // and set to an empty string but there's no standard API + // allowing us to differentiate them without a performance penalty + // and returning `undefined` aligns with older jQuery. + // + // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace( rtrimCSS, "$1" ) || undefined; + } + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0, + marginDelta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + // Count margin delta separately to only add it after scroll gutter adjustment. + // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). + if ( box === "margin" ) { + marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta + marginDelta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + animationIterationCount: true, + aspectRatio: true, + borderImageSlice: true, + columnCount: true, + flexGrow: true, + flexShrink: true, + fontWeight: true, + gridArea: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnStart: true, + gridRow: true, + gridRowEnd: true, + gridRowStart: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + scale: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeMiterlimit: true, + strokeOpacity: true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (trac-7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug trac-9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (trac-7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // Use proper attribute retrieval (trac-12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + if ( cur.indexOf( " " + className + " " ) < 0 ) { + cur += className + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + removeClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + + // This expression is here for better compressibility (see addClass) + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Remove *all* instances + while ( cur.indexOf( " " + className + " " ) > -1 ) { + cur = cur.replace( " " + className + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var classNames, className, i, self, + type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + classNames = classesToArray( value ); + + return this.each( function() { + if ( isValidValue ) { + + // Toggle individual class names + self = jQuery( this ); + + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (trac-14686, trac-14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (trac-2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (trac-6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // trac-7653, trac-8125, trac-8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes trac-9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket trac-12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // trac-9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (trac-11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // trac-1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see trac-8605, trac-14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // trac-14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + diff --git a/test_dispatch.py b/test_dispatch.py new file mode 100644 index 0000000..8248a98 --- /dev/null +++ b/test_dispatch.py @@ -0,0 +1,6 @@ +from src import app as application + +client = application.app.test_client() +resp = client.get('/dslrbooth?event_type=session_start¶m1=PrintAndGIF') +print('Status', resp.status_code) +print('Data', resp.get_data(as_text=True)) diff --git a/test_health.py b/test_health.py new file mode 100644 index 0000000..ba17cd2 --- /dev/null +++ b/test_health.py @@ -0,0 +1,9 @@ +import requests + +try: + print("Testing /health endpoint...") + response = requests.get("http://127.0.0.1:8090/health", timeout=5) + print(f"Status Code: {response.status_code}") + print(f"Response: {response.text}") +except Exception as e: + print(f"Error: {e}") \ No newline at end of file diff --git a/test_requests.py b/test_requests.py new file mode 100644 index 0000000..fa21701 --- /dev/null +++ b/test_requests.py @@ -0,0 +1,26 @@ +import requests +import time + +# Give the server a moment +time.sleep(2) + +try: + print("Testing server with GET request...") + response = requests.get("http://127.0.0.1:8090/?event_type=session_start¶m1=PrintAndGIF", timeout=10) + print(f"Status Code: {response.status_code}") + print(f"Response: {response.text}") + + print("\nTesting countdown request...") + response2 = requests.get("http://127.0.0.1:8090/?event_type=countdown¶m1=30", timeout=10) + print(f"Status Code: {response2.status_code}") + print(f"Response: {response2.text}") + + print("\nTesting file_download request...") + response3 = requests.get("http://127.0.0.1:8090/?event_type=file_download¶m1=20250926_222756_010.jpg", timeout=10) + print(f"Status Code: {response3.status_code}") + print(f"Response: {response3.text}") + +except requests.exceptions.ConnectionError as e: + print(f"Connection error: {e}") +except Exception as e: + print(f"Error: {e}") \ No newline at end of file diff --git a/test_server.py b/test_server.py new file mode 100644 index 0000000..f38138e --- /dev/null +++ b/test_server.py @@ -0,0 +1,23 @@ +import requests +import time + +# Give the server a moment to start if needed +time.sleep(1) + +# Test the server with a GET request +try: + print("Testing server with GET request...") + response = requests.get("http://127.0.0.1:8090/?event_type=session_start¶m1=PrintAndGIF", timeout=5) + print(f"Status Code: {response.status_code}") + print(f"Response: {response.text}") + + # Test another request + print("\nTesting another request...") + response2 = requests.get("http://127.0.0.1:8090/?event_type=countdown¶m1=30", timeout=5) + print(f"Status Code: {response2.status_code}") + print(f"Response: {response2.text}") + +except requests.exceptions.ConnectionError: + print("Could not connect to the server. Is it running on port 8090?") +except Exception as e: + print(f"Error: {e}") \ No newline at end of file diff --git a/test_servers.py b/test_servers.py new file mode 100644 index 0000000..fdd6bcf --- /dev/null +++ b/test_servers.py @@ -0,0 +1,6 @@ +from src import app as application + +client = application.app.test_client() +print('GET / ->', client.get('/').status_code) +print('GET /api ->', client.get('/api?event_type=session_start¶m1=PrintAndGIF').get_data(as_text=True)) +print('GET /dslrbooth ->', client.get('/dslrbooth?event_type=countdown¶m1=3').get_data(as_text=True))