diff --git a/vitallink/backend/__pycache__/database.cpython-39.pyc b/vitallink/backend/__pycache__/database.cpython-39.pyc
new file mode 100644
index 0000000..e9719f6
Binary files /dev/null and b/vitallink/backend/__pycache__/database.cpython-39.pyc differ
diff --git a/vitallink/backend/database.py b/vitallink/backend/database.py
new file mode 100644
index 0000000..caabe03
--- /dev/null
+++ b/vitallink/backend/database.py
@@ -0,0 +1,623 @@
+"""
+VitalLink Database Layer
+SQLite persistence for patients, vitals, and audit trail
+Enables replay, analysis, and incident investigation
+"""
+
+import sqlite3
+import json
+from datetime import datetime
+from typing import List, Dict, Optional
+from contextlib import asynccontextmanager
+import aiosqlite
+
+# ============================================================================
+# DATABASE SCHEMA
+# ============================================================================
+
+SCHEMA_SQL = """
+-- Patients table
+CREATE TABLE IF NOT EXISTS patients (
+ patient_id TEXT PRIMARY KEY,
+ band_id TEXT NOT NULL,
+ first_name TEXT NOT NULL,
+ last_name TEXT NOT NULL,
+ dob TEXT NOT NULL,
+ symptoms TEXT, -- JSON array
+ severity TEXT,
+ check_in_time TIMESTAMP NOT NULL,
+ discharge_time TIMESTAMP,
+ current_tier TEXT DEFAULT 'NORMAL',
+ is_active BOOLEAN DEFAULT 1,
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- Vitals readings table (time-series data)
+CREATE TABLE IF NOT EXISTS vitals_readings (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ patient_id TEXT NOT NULL,
+ band_id TEXT NOT NULL,
+ timestamp REAL NOT NULL,
+ seq INTEGER,
+ hr_bpm INTEGER,
+ spo2 INTEGER,
+ temp_c REAL,
+ activity REAL,
+ tier TEXT,
+ flags TEXT, -- JSON array
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (patient_id) REFERENCES patients(patient_id)
+);
+
+-- Triage assessments (audit trail)
+CREATE TABLE IF NOT EXISTS triage_assessments (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ patient_id TEXT NOT NULL,
+ assessment_time TIMESTAMP NOT NULL,
+ triage_level INTEGER,
+ tier_name TEXT,
+ priority_score REAL,
+ reasoning TEXT,
+ abnormalities TEXT, -- JSON array
+ wait_time_minutes INTEGER,
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (patient_id) REFERENCES patients(patient_id)
+);
+
+-- Tier changes (for incident investigation)
+CREATE TABLE IF NOT EXISTS tier_changes (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ patient_id TEXT NOT NULL,
+ change_time TIMESTAMP NOT NULL,
+ old_tier TEXT,
+ new_tier TEXT,
+ trigger_reason TEXT,
+ vitals_snapshot TEXT, -- JSON
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (patient_id) REFERENCES patients(patient_id)
+);
+
+-- System events (audit log)
+CREATE TABLE IF NOT EXISTS system_events (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ event_time TIMESTAMP NOT NULL,
+ event_type TEXT NOT NULL, -- 'patient_checkin', 'discharge', 'tier_change', 'alert', etc.
+ patient_id TEXT,
+ band_id TEXT,
+ details TEXT, -- JSON
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- Wristband assignments (inventory tracking)
+CREATE TABLE IF NOT EXISTS wristband_assignments (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ band_id TEXT NOT NULL,
+ patient_id TEXT,
+ assigned_at TIMESTAMP,
+ released_at TIMESTAMP,
+ packet_count INTEGER DEFAULT 0,
+ band_type TEXT, -- 'real' or 'simulated'
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- Indexes for performance
+CREATE INDEX IF NOT EXISTS idx_vitals_patient ON vitals_readings(patient_id, timestamp);
+CREATE INDEX IF NOT EXISTS idx_vitals_timestamp ON vitals_readings(timestamp);
+CREATE INDEX IF NOT EXISTS idx_patients_active ON patients(is_active);
+CREATE INDEX IF NOT EXISTS idx_tier_changes_patient ON tier_changes(patient_id, change_time);
+"""
+
+# ============================================================================
+# DATABASE MANAGER
+# ============================================================================
+
+
+class VitalLinkDatabase:
+ """Database manager for VitalLink system"""
+
+ def __init__(self, db_path: str = "vitallink.db"):
+ self.db_path = db_path
+ self.conn = None
+
+ async def initialize(self):
+ """Initialize database and create tables"""
+ self.conn = await aiosqlite.connect(self.db_path)
+ await self.conn.executescript(SCHEMA_SQL)
+ await self.conn.commit()
+ print(f"✓ Database initialized: {self.db_path}")
+
+ async def close(self):
+ """Close database connection"""
+ if self.conn:
+ await self.conn.close()
+
+ # ========================================================================
+ # PATIENT OPERATIONS
+ # ========================================================================
+
+ async def save_patient(self, patient_data: Dict):
+ """Save new patient to database"""
+ await self.conn.execute(
+ """
+ INSERT INTO patients (
+ patient_id, band_id, first_name, last_name, dob,
+ symptoms, severity, check_in_time, current_tier
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
+ """,
+ (
+ patient_data["patient_id"],
+ patient_data["band_id"],
+ patient_data["first_name"],
+ patient_data["last_name"],
+ patient_data["dob"],
+ json.dumps(patient_data["symptoms"]),
+ patient_data["severity"],
+ patient_data["check_in_time"],
+ patient_data.get("current_tier", "NORMAL"),
+ ),
+ )
+ await self.conn.commit()
+
+ # Log event
+ await self.log_event(
+ "patient_checkin",
+ patient_data["patient_id"],
+ patient_data["band_id"],
+ patient_data,
+ )
+
+ async def update_patient_tier(self, patient_id: str, new_tier: str):
+ """Update patient's current tier"""
+ await self.conn.execute(
+ """
+ UPDATE patients SET current_tier = ? WHERE patient_id = ?
+ """,
+ (new_tier, patient_id),
+ )
+ await self.conn.commit()
+
+ async def discharge_patient(self, patient_id: str):
+ """Mark patient as discharged"""
+ await self.conn.execute(
+ """
+ UPDATE patients
+ SET is_active = 0, discharge_time = ?
+ WHERE patient_id = ?
+ """,
+ (datetime.now(), patient_id),
+ )
+ await self.conn.commit()
+
+ await self.log_event(
+ "discharge",
+ patient_id,
+ None,
+ {"discharge_time": datetime.now().isoformat()},
+ )
+
+ # ========================================================================
+ # VITALS OPERATIONS
+ # ========================================================================
+
+ async def save_vitals(self, vitals_data: Dict):
+ """Save vital signs reading"""
+ await self.conn.execute(
+ """
+ INSERT INTO vitals_readings (
+ patient_id, band_id, timestamp, seq, hr_bpm, spo2,
+ temp_c, activity, tier, flags
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ """,
+ (
+ vitals_data["patient_id"],
+ vitals_data["band_id"],
+ vitals_data["timestamp"],
+ vitals_data.get("seq", 0),
+ vitals_data["hr_bpm"],
+ vitals_data["spo2"],
+ vitals_data["temp_c"],
+ vitals_data["activity"],
+ vitals_data["tier"],
+ json.dumps(vitals_data.get("flags", [])),
+ ),
+ )
+ await self.conn.commit()
+
+ async def get_patient_vitals_history(
+ self, patient_id: str, limit: int = 100
+ ) -> List[Dict]:
+ """Get vital signs history for a patient"""
+ cursor = await self.conn.execute(
+ """
+ SELECT timestamp, hr_bpm, spo2, temp_c, activity, tier, seq
+ FROM vitals_readings
+ WHERE patient_id = ?
+ ORDER BY timestamp DESC
+ LIMIT ?
+ """,
+ (patient_id, limit),
+ )
+
+ rows = await cursor.fetchall()
+
+ return [
+ {
+ "timestamp": row[0],
+ "hr_bpm": row[1],
+ "spo2": row[2],
+ "temp_c": row[3],
+ "activity": row[4],
+ "tier": row[5],
+ "seq": row[6],
+ }
+ for row in rows
+ ]
+
+ # ========================================================================
+ # TIER CHANGE TRACKING
+ # ========================================================================
+
+ async def log_tier_change(
+ self, patient_id: str, old_tier: str, new_tier: str, reason: str, vitals: Dict
+ ):
+ """Log tier change for audit trail"""
+ await self.conn.execute(
+ """
+ INSERT INTO tier_changes (
+ patient_id, change_time, old_tier, new_tier,
+ trigger_reason, vitals_snapshot
+ ) VALUES (?, ?, ?, ?, ?, ?)
+ """,
+ (
+ patient_id,
+ datetime.now(),
+ old_tier,
+ new_tier,
+ reason,
+ json.dumps(vitals),
+ ),
+ )
+ await self.conn.commit()
+
+ await self.log_event(
+ "tier_change",
+ patient_id,
+ None,
+ {"old_tier": old_tier, "new_tier": new_tier, "reason": reason},
+ )
+
+ async def get_tier_history(self, patient_id: str) -> List[Dict]:
+ """Get tier change history for incident review"""
+ cursor = await self.conn.execute(
+ """
+ SELECT change_time, old_tier, new_tier, trigger_reason, vitals_snapshot
+ FROM tier_changes
+ WHERE patient_id = ?
+ ORDER BY change_time ASC
+ """,
+ (patient_id,),
+ )
+
+ rows = await cursor.fetchall()
+
+ return [
+ {
+ "change_time": row[0],
+ "old_tier": row[1],
+ "new_tier": row[2],
+ "reason": row[3],
+ "vitals": json.loads(row[4]) if row[4] else {},
+ }
+ for row in rows
+ ]
+
+ # ========================================================================
+ # SYSTEM EVENTS (Audit Trail)
+ # ========================================================================
+
+ async def log_event(
+ self,
+ event_type: str,
+ patient_id: Optional[str],
+ band_id: Optional[str],
+ details: Dict,
+ ):
+ """Log system event for audit trail"""
+ await self.conn.execute(
+ """
+ INSERT INTO system_events (
+ event_time, event_type, patient_id, band_id, details
+ ) VALUES (?, ?, ?, ?, ?)
+ """,
+ (datetime.now(), event_type, patient_id, band_id, json.dumps(details)),
+ )
+ await self.conn.commit()
+
+ async def get_events(
+ self,
+ event_type: Optional[str] = None,
+ patient_id: Optional[str] = None,
+ hours: int = 24,
+ ) -> List[Dict]:
+ """Get system events for analysis"""
+
+ query = "SELECT event_time, event_type, patient_id, band_id, details FROM system_events WHERE 1=1"
+ params = []
+
+ if event_type:
+ query += " AND event_type = ?"
+ params.append(event_type)
+
+ if patient_id:
+ query += " AND patient_id = ?"
+ params.append(patient_id)
+
+ query += " AND event_time > datetime('now', '-' || ? || ' hours')"
+ params.append(hours)
+
+ query += " ORDER BY event_time DESC LIMIT 1000"
+
+ cursor = await self.conn.execute(query, params)
+ rows = await cursor.fetchall()
+
+ return [
+ {
+ "event_time": row[0],
+ "event_type": row[1],
+ "patient_id": row[2],
+ "band_id": row[3],
+ "details": json.loads(row[4]) if row[4] else {},
+ }
+ for row in rows
+ ]
+
+ # ========================================================================
+ # ANALYTICS & REPLAY
+ # ========================================================================
+
+ async def get_session_summary(
+ self, start_time: datetime, end_time: datetime
+ ) -> Dict:
+ """Get summary statistics for a session (for incident review)"""
+
+ cursor = await self.conn.execute(
+ """
+ SELECT
+ COUNT(DISTINCT patient_id) as total_patients,
+ COUNT(*) as total_vitals,
+ AVG(hr_bpm) as avg_hr,
+ AVG(spo2) as avg_spo2,
+ AVG(temp_c) as avg_temp
+ FROM vitals_readings
+ WHERE timestamp BETWEEN ? AND ?
+ """,
+ (start_time.timestamp(), end_time.timestamp()),
+ )
+
+ row = await cursor.fetchone()
+
+ return {
+ "total_patients": row[0],
+ "total_vitals_recorded": row[1],
+ "average_hr": round(row[2], 1) if row[2] else 0,
+ "average_spo2": round(row[3], 1) if row[3] else 0,
+ "average_temp": round(row[4], 2) if row[4] else 0,
+ }
+
+ async def export_patient_data(self, patient_id: str) -> Dict:
+ """Export complete patient data for incident investigation"""
+
+ # Get patient info
+ cursor = await self.conn.execute(
+ """
+ SELECT * FROM patients WHERE patient_id = ?
+ """,
+ (patient_id,),
+ )
+ patient_row = await cursor.fetchone()
+
+ if not patient_row:
+ return None
+
+ # Get all vitals
+ vitals = await self.get_patient_vitals_history(patient_id, limit=10000)
+
+ # Get tier changes
+ tier_changes = await self.get_tier_history(patient_id)
+
+ # Get related events
+ events = await self.get_events(patient_id=patient_id, hours=24)
+
+ return {
+ "patient_id": patient_id,
+ "name": f"{patient_row[2]} {patient_row[3]}",
+ "dob": patient_row[4],
+ "symptoms": json.loads(patient_row[5]) if patient_row[5] else [],
+ "severity": patient_row[6],
+ "check_in_time": patient_row[7],
+ "discharge_time": patient_row[8],
+ "total_vitals": len(vitals),
+ "vitals_timeline": vitals,
+ "tier_changes": tier_changes,
+ "events": events,
+ "export_time": datetime.now().isoformat(),
+ }
+
+
+# ============================================================================
+# REPLAY SYSTEM
+# ============================================================================
+
+
+class VitalsReplaySystem:
+ """Replay historical vitals data for analysis"""
+
+ def __init__(self, db: VitalLinkDatabase):
+ self.db = db
+
+ async def replay_patient_session(self, patient_id: str, speed: float = 1.0):
+ """
+ Replay a patient's entire session
+ speed: 1.0 = real-time, 10.0 = 10x faster, 0.1 = slow motion
+ """
+
+ vitals = await self.db.get_patient_vitals_history(patient_id, limit=10000)
+ vitals.reverse() # Chronological order
+
+ if not vitals:
+ print(f"No data found for patient {patient_id}")
+ return
+
+ print(f"\n{'=' * 80}")
+ print(f"REPLAYING SESSION: {patient_id} ({len(vitals)} readings)")
+ print(f"Speed: {speed}x | Press Ctrl+C to stop")
+ print(f"{'=' * 80}\n")
+
+ start_time = vitals[0]["timestamp"]
+
+ for i, reading in enumerate(vitals):
+ # Calculate delay
+ if i > 0:
+ time_diff = reading["timestamp"] - vitals[i - 1]["timestamp"]
+ await asyncio.sleep(time_diff / speed)
+
+ # Display reading
+ elapsed = reading["timestamp"] - start_time
+ tier_symbol = (
+ "🔴"
+ if reading["tier"] == "EMERGENCY"
+ else "🟡"
+ if reading["tier"] == "ALERT"
+ else "🟢"
+ )
+
+ print(
+ f"[{elapsed:7.1f}s] {tier_symbol} Seq={reading['seq']:3d} | "
+ f"HR={reading['hr_bpm']:3d} SpO2={reading['spo2']:2d}% "
+ f"Temp={reading['temp_c']:.1f}°C | {reading['tier']}"
+ )
+
+ print(f"\n{'=' * 80}")
+ print(f"Replay complete: {len(vitals)} readings")
+ print(f"{'=' * 80}\n")
+
+ async def analyze_critical_events(self, patient_id: str):
+ """Analyze critical tier changes and deterioration events"""
+
+ tier_changes = await self.db.get_tier_history(patient_id)
+
+ print(f"\n{'=' * 80}")
+ print(f"CRITICAL EVENT ANALYSIS: {patient_id}")
+ print(f"{'=' * 80}\n")
+
+ for change in tier_changes:
+ print(f"[{change['change_time']}]")
+ print(f" {change['old_tier']} → {change['new_tier']}")
+ print(f" Reason: {change['reason']}")
+ print(f" Vitals: {change['vitals']}")
+ print()
+
+ print(f"{'=' * 80}\n")
+
+
+# ============================================================================
+# INTEGRATION HELPERS
+# ============================================================================
+
+
+async def init_database(db_path: str = "vitallink.db") -> VitalLinkDatabase:
+ """Initialize database for use in FastAPI"""
+ db = VitalLinkDatabase(db_path)
+ await db.initialize()
+ return db
+
+
+# ============================================================================
+# CLI TOOLS
+# ============================================================================
+
+
+async def cli_export_patient(patient_id: str, output_file: str = None):
+ """Export patient data to JSON file"""
+ db = VitalLinkDatabase()
+ await db.initialize()
+
+ data = await db.export_patient_data(patient_id)
+
+ if not data:
+ print(f"Patient {patient_id} not found")
+ return
+
+ if output_file:
+ with open(output_file, "w") as f:
+ json.dump(data, f, indent=2)
+ print(f"✓ Exported to {output_file}")
+ else:
+ print(json.dumps(data, indent=2))
+
+ await db.close()
+
+
+async def cli_replay_session(patient_id: str, speed: float = 1.0):
+ """Replay a patient session"""
+ db = VitalLinkDatabase()
+ await db.initialize()
+
+ replay = VitalsReplaySystem(db)
+ await replay.replay_patient_session(patient_id, speed)
+
+ await db.close()
+
+
+async def cli_analyze_incident(patient_id: str):
+ """Analyze critical events for a patient"""
+ db = VitalLinkDatabase()
+ await db.initialize()
+
+ replay = VitalsReplaySystem(db)
+ await replay.analyze_critical_events(patient_id)
+
+ # Also show vital trends
+ vitals = await db.get_patient_vitals_history(patient_id, limit=1000)
+
+ if vitals:
+ print("VITAL SIGN TRENDS:")
+ print(
+ f" HR range: {min(v['hr_bpm'] for v in vitals)} - {max(v['hr_bpm'] for v in vitals)} bpm"
+ )
+ print(
+ f" SpO2 range: {min(v['spo2'] for v in vitals)} - {max(v['spo2'] for v in vitals)}%"
+ )
+ print(
+ f" Temp range: {min(v['temp_c'] for v in vitals):.1f} - {max(v['temp_c'] for v in vitals):.1f}°C"
+ )
+ print()
+
+ await db.close()
+
+
+if __name__ == "__main__":
+ import argparse
+ import asyncio
+
+ parser = argparse.ArgumentParser(description="VitalLink Database Tools")
+ parser.add_argument("--export", metavar="PATIENT_ID", help="Export patient data")
+ parser.add_argument("--replay", metavar="PATIENT_ID", help="Replay patient session")
+ parser.add_argument(
+ "--analyze", metavar="PATIENT_ID", help="Analyze critical events"
+ )
+ parser.add_argument(
+ "--speed", type=float, default=1.0, help="Replay speed multiplier"
+ )
+ parser.add_argument("--output", "-o", help="Output file for export")
+
+ args = parser.parse_args()
+
+ if args.export:
+ asyncio.run(cli_export_patient(args.export, args.output))
+ elif args.replay:
+ asyncio.run(cli_replay_session(args.replay, args.speed))
+ elif args.analyze:
+ asyncio.run(cli_analyze_incident(args.analyze))
+ else:
+ parser.print_help()
diff --git a/vitallink/backend/server.py b/vitallink/backend/server.py
index 557f23d..2f01230 100644
--- a/vitallink/backend/server.py
+++ b/vitallink/backend/server.py
@@ -14,6 +14,7 @@ import json
import time
from collections import defaultdict
from triage_engine import TriageEngine, VitalSigns, TriageLevel, triage_from_vitals
+from database import VitalLinkDatabase
# ============================================================================
# LIFESPAN MANAGEMENT
@@ -23,14 +24,23 @@ from triage_engine import TriageEngine, VitalSigns, TriageLevel, triage_from_vit
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
+ global db
print("=" * 80)
print("VitalLink Backend API Started")
print("=" * 80)
+
+ # Initialize database
+ db = VitalLinkDatabase("vitallink.db")
+ await db.initialize()
+
print("API Documentation: http://localhost:8000/docs")
print("WebSocket Endpoint: ws://localhost:8000/ws")
+ print("Database: vitallink.db")
print("=" * 80)
yield
# Shutdown
+ if db:
+ await db.close()
print("\nVitalLink Backend API Shutting Down")
@@ -115,6 +125,7 @@ active_websockets: List[WebSocket] = []
# Wristband details cache
wristband_details_cache = {}
+db: Optional[VitalLinkDatabase] = None
# ============================================================================
# PRIORITY ALGORITHM
@@ -195,6 +206,10 @@ async def check_in_patient(data: PatientCheckIn):
patients_db[patient_id] = patient
+ # Save to database
+ if db:
+ await db.save_patient(patient.dict())
+
await broadcast_update({"type": "patient_added", "patient": patient.dict()})
return {
@@ -303,6 +318,9 @@ async def receive_vitals(data: VitalsData):
final_tier = tracker["current_tier"]
patient.current_tier = final_tier
patient.last_vitals = data.dict()
+ # Save to database
+ if db:
+ await db.save_vitals(data.dict())
# Store in history
vitals_history[patient_id].append(data)
@@ -439,6 +457,32 @@ async def get_statistics():
}
+@app.get("/api/patients/{patient_id}/vitals-history")
+async def get_patient_vitals_history(patient_id: str, limit: int = 100):
+ """Get patient vitals history for graphing"""
+
+ if patient_id not in patients_db:
+ raise HTTPException(status_code=404, detail="Patient not found")
+
+ patient = patients_db[patient_id]
+
+ if db:
+ # Get from database
+ vitals = await db.get_patient_vitals_history(patient_id, limit)
+ tier_changes = await db.get_tier_history(patient_id)
+ else:
+ # Fallback to in-memory
+ vitals = [v.dict() for v in vitals_history.get(patient_id, [])[-limit:]]
+ tier_changes = []
+
+ return {
+ "patient": patient.dict(),
+ "vitals_history": vitals,
+ "tier_changes": tier_changes,
+ "total_readings": len(vitals),
+ }
+
+
# ============================================================================
# WRISTBAND ENDPOINTS
# ============================================================================
diff --git a/vitallink/frontend/dashboard/package-lock.json b/vitallink/frontend/dashboard/package-lock.json
index 6602ac9..6b51386 100644
--- a/vitallink/frontend/dashboard/package-lock.json
+++ b/vitallink/frontend/dashboard/package-lock.json
@@ -10,7 +10,8 @@
"dependencies": {
"lucide-react": "^0.546.0",
"react": "^19.1.1",
- "react-dom": "^19.1.1"
+ "react-dom": "^19.1.1",
+ "recharts": "^3.5.0"
},
"devDependencies": {
"@eslint/js": "^9.36.0",
@@ -770,7 +771,6 @@
"version": "4.9.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
"integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
@@ -789,7 +789,6 @@
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -802,7 +801,6 @@
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
"integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -812,7 +810,6 @@
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
"integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.7",
@@ -827,7 +824,6 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz",
"integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.16.0"
@@ -840,7 +836,6 @@
"version": "0.16.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz",
"integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
@@ -853,7 +848,6 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
@@ -877,7 +871,6 @@
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -890,7 +883,6 @@
"version": "9.38.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz",
"integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==",
- "dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -903,7 +895,6 @@
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
"integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -913,7 +904,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz",
"integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.16.0",
@@ -927,7 +917,6 @@
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18.0"
@@ -937,7 +926,6 @@
"version": "0.16.7",
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
"integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@humanfs/core": "^0.19.1",
@@ -951,7 +939,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=12.22"
@@ -965,7 +952,6 @@
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18"
@@ -1038,6 +1024,42 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@reduxjs/toolkit": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.0.tgz",
+ "integrity": "sha512-hBjYg0aaRL1O2Z0IqWhnTLytnjDIxekmRxm1snsHjHaKVmIF1HiImWqsq+PuEbn6zdMlkIj9WofK1vR8jjx+Xw==",
+ "license": "MIT",
+ "dependencies": {
+ "@standard-schema/spec": "^1.0.0",
+ "@standard-schema/utils": "^0.3.0",
+ "immer": "^11.0.0",
+ "redux": "^5.0.1",
+ "redux-thunk": "^3.1.0",
+ "reselect": "^5.1.0"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+ "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@reduxjs/toolkit/node_modules/immer": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-11.0.0.tgz",
+ "integrity": "sha512-XtRG4SINt4dpqlnJvs70O2j6hH7H0X8fUzFsjMn1rwnETaxwp83HLNimXBjZ78MrKl3/d3/pkzDH0o0Lkxm37Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.38",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.38.tgz",
@@ -1353,6 +1375,18 @@
"win32"
]
},
+ "node_modules/@standard-schema/spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+ "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "license": "MIT"
+ },
+ "node_modules/@standard-schema/utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
+ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
+ "license": "MIT"
+ },
"node_modules/@tailwindcss/node": {
"version": "4.1.14",
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.14.tgz",
@@ -1674,25 +1708,86 @@
"@babel/types": "^7.28.2"
}
},
+ "node_modules/@types/d3-array": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+ "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+ "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+ "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/react": {
"version": "19.2.2",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
"integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
@@ -1709,6 +1804,12 @@
"@types/react": "^19.2.0"
}
},
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
+ "license": "MIT"
+ },
"node_modules/@vitejs/plugin-react": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.4.tgz",
@@ -1734,7 +1835,6 @@
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "dev": true,
"license": "MIT",
"peer": true,
"bin": {
@@ -1748,7 +1848,6 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
"license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
@@ -1758,7 +1857,6 @@
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -1775,7 +1873,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -1791,7 +1888,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
"license": "Python-2.0"
},
"node_modules/autoprefixer": {
@@ -1836,7 +1932,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
@@ -1853,7 +1948,6 @@
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -1899,7 +1993,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -1930,7 +2023,6 @@
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -1953,11 +2045,19 @@
"node": ">=18"
}
},
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -1970,14 +2070,12 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
"license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
"license": "MIT"
},
"node_modules/convert-source-map": {
@@ -1991,7 +2089,6 @@
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -2006,14 +2103,134 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -2027,11 +2244,16 @@
}
}
},
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+ "license": "MIT"
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/detect-libc": {
@@ -2065,6 +2287,16 @@
"node": ">=10.13.0"
}
},
+ "node_modules/es-toolkit": {
+ "version": "1.42.0",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.42.0.tgz",
+ "integrity": "sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==",
+ "license": "MIT",
+ "workspaces": [
+ "docs",
+ "benchmarks"
+ ]
+ },
"node_modules/esbuild": {
"version": "0.25.11",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz",
@@ -2121,7 +2353,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -2134,7 +2365,6 @@
"version": "9.38.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz",
"integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==",
- "dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
@@ -2204,6 +2434,18 @@
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
}
},
+ "node_modules/eslint-plugin-react-perf": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-perf/-/eslint-plugin-react-perf-3.3.3.tgz",
+ "integrity": "sha512-EzPdxsRJg5IllCAH9ny/3nK7sv9251tvKmi/d3Ouv5KzI8TB3zNhzScxL9wnh9Hvv8GYC5LEtzTauynfOEYiAw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.1"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
"node_modules/eslint-plugin-react-refresh": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz",
@@ -2218,7 +2460,6 @@
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
@@ -2235,7 +2476,6 @@
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2248,7 +2488,6 @@
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.15.0",
@@ -2266,7 +2505,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
"integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
@@ -2279,7 +2517,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
@@ -2292,7 +2529,6 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
@@ -2302,31 +2538,33 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "license": "MIT"
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
"license": "MIT"
},
"node_modules/fdir": {
@@ -2351,7 +2589,6 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"flat-cache": "^4.0.0"
@@ -2364,7 +2601,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
@@ -2381,7 +2617,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
@@ -2395,7 +2630,6 @@
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true,
"license": "ISC"
},
"node_modules/fraction.js": {
@@ -2441,7 +2675,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
@@ -2474,7 +2707,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -2484,17 +2716,25 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
+ "node_modules/immer": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz",
+ "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
"node_modules/import-fresh": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
@@ -2511,17 +2751,24 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -2531,7 +2778,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@@ -2544,16 +2790,14 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
"license": "ISC"
},
"node_modules/jiti": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
"integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
- "peer": true,
"bin": {
"jiti": "lib/jiti-cli.mjs"
}
@@ -2569,7 +2813,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -2595,21 +2838,18 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
"license": "MIT"
},
"node_modules/json5": {
@@ -2629,7 +2869,6 @@
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
@@ -2639,7 +2878,6 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
@@ -2655,7 +2893,6 @@
"integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
"dev": true,
"license": "MPL-2.0",
- "peer": true,
"dependencies": {
"detect-libc": "^2.0.3"
},
@@ -2893,7 +3130,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
@@ -2909,7 +3145,6 @@
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/lru-cache": {
@@ -2945,7 +3180,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -2981,7 +3215,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
"license": "MIT"
},
"node_modules/nanoid": {
@@ -3007,7 +3240,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
"license": "MIT"
},
"node_modules/node-releases": {
@@ -3031,7 +3263,6 @@
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"deep-is": "^0.1.3",
@@ -3049,7 +3280,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
@@ -3065,7 +3295,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
@@ -3081,7 +3310,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
@@ -3094,7 +3322,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3104,7 +3331,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3172,7 +3398,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8.0"
@@ -3182,7 +3407,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -3203,6 +3427,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -3210,6 +3435,37 @@
"react": "^19.2.0"
}
},
+ "node_modules/react-is": {
+ "version": "19.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz",
+ "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/react-redux": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+ "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/use-sync-external-store": "^0.0.6",
+ "use-sync-external-store": "^1.4.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^18.2.25 || ^19",
+ "react": "^18.0 || ^19",
+ "redux": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-refresh": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
@@ -3220,11 +3476,63 @@
"node": ">=0.10.0"
}
},
+ "node_modules/recharts": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.5.0.tgz",
+ "integrity": "sha512-jWqBtu8L3VICXWa3g/y+bKjL8DDHSRme7DHD/70LQ/Tk0di1h11Y0kKC0nPh6YJ2oaa0k6anIFNhg6SfzHWdEA==",
+ "license": "MIT",
+ "workspaces": [
+ "www"
+ ],
+ "dependencies": {
+ "@reduxjs/toolkit": "1.x.x || 2.x.x",
+ "clsx": "^2.1.1",
+ "decimal.js-light": "^2.5.1",
+ "es-toolkit": "^1.39.3",
+ "eslint-plugin-react-perf": "^3.3.3",
+ "eventemitter3": "^5.0.1",
+ "immer": "^10.1.1",
+ "react-redux": "8.x.x || 9.x.x",
+ "reselect": "5.1.1",
+ "tiny-invariant": "^1.3.3",
+ "use-sync-external-store": "^1.2.2",
+ "victory-vendor": "^37.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/redux": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/redux-thunk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+ "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "redux": "^5.0.0"
+ }
+ },
+ "node_modules/reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "license": "MIT"
+ },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -3292,7 +3600,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -3305,7 +3612,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3325,7 +3631,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3338,7 +3643,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -3395,6 +3699,12 @@
"node": ">=18"
}
},
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -3416,7 +3726,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
@@ -3460,12 +3769,42 @@
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/victory-vendor": {
+ "version": "37.3.6",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
+ "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
+ "license": "MIT AND ISC",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
"node_modules/vite": {
"version": "7.1.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.10.tgz",
@@ -3546,7 +3885,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -3562,7 +3900,6 @@
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -3579,7 +3916,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
diff --git a/vitallink/frontend/dashboard/package.json b/vitallink/frontend/dashboard/package.json
index 809e052..517ff2d 100644
--- a/vitallink/frontend/dashboard/package.json
+++ b/vitallink/frontend/dashboard/package.json
@@ -12,7 +12,8 @@
"dependencies": {
"lucide-react": "^0.546.0",
"react": "^19.1.1",
- "react-dom": "^19.1.1"
+ "react-dom": "^19.1.1",
+ "recharts": "^3.5.0"
},
"devDependencies": {
"@eslint/js": "^9.36.0",
diff --git a/vitallink/frontend/dashboard/src/App.jsx b/vitallink/frontend/dashboard/src/App.jsx
index 56218c1..09f6d72 100644
--- a/vitallink/frontend/dashboard/src/App.jsx
+++ b/vitallink/frontend/dashboard/src/App.jsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
import * as LucideIcons from 'lucide-react';
+import PatientDetailModal from './PatientDetailModal'; // ADD THIS IMPORT
const { Activity, AlertCircle, Clock, Users, Bell, Heart, Thermometer, Wind, CheckCircle, UserX } = LucideIcons;
@@ -17,6 +18,7 @@ function App() {
const [activeTab, setActiveTab] = useState('patients');
const [wristbands, setWristbands] = useState([]);
const [selectedWristband, setSelectedWristband] = useState(null);
+ const [selectedPatient, setSelectedPatient] = useState(null); // ADD THIS STATE
useEffect(() => {
const fetchData = async () => {
@@ -102,6 +104,7 @@ function App() {
});
console.log(`✓ Discharged patient ${patientId}`);
setPatients(prev => prev.filter(p => p.patient_id !== patientId));
+ setSelectedPatient(null); // Close modal if open
} catch (error) {
console.error('Failed to discharge patient:', error);
setPatients(prev => prev.filter(p => p.patient_id !== patientId));
@@ -256,7 +259,8 @@ function App() {
{filteredPatients.map((patient, index) => (
setSelectedPatient(patient)} /* ADD CLICK HANDLER */
+ className="bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow cursor-pointer" /* ADD cursor-pointer */
>
@@ -271,6 +275,7 @@ function App() {
•
{patient.band_id}
+
Click for detailed history
{/* ADD THIS */}
{patient.symptoms && patient.symptoms.length > 0 && (
{patient.symptoms.map(symptom => (
@@ -289,7 +294,10 @@ function App() {
{patient.tier}
+
+ {/* Patient Detail Modal - ADD THIS */}
+ {selectedPatient && (
+
setSelectedPatient(null)}
+ />
+ )}
);
}
diff --git a/vitallink/frontend/dashboard/src/PatientDetailModal.jsx b/vitallink/frontend/dashboard/src/PatientDetailModal.jsx
new file mode 100644
index 0000000..87b39d6
--- /dev/null
+++ b/vitallink/frontend/dashboard/src/PatientDetailModal.jsx
@@ -0,0 +1,295 @@
+import React, { useState, useEffect } from 'react';
+import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, ReferenceLine } from 'recharts';
+import { X, TrendingUp, TrendingDown, Activity, Heart, Wind, Thermometer } from 'lucide-react';
+
+const API_BASE = 'http://localhost:8000';
+
+const PatientDetailModal = ({ patient, onClose }) => {
+ const [vitalsHistory, setVitalsHistory] = useState([]);
+ const [tierChanges, setTierChanges] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [selectedMetric, setSelectedMetric] = useState('all');
+
+ useEffect(() => {
+ fetchPatientHistory();
+ }, [patient.patient_id]);
+
+ const fetchPatientHistory = async () => {
+ try {
+ const response = await fetch(`${API_BASE}/api/patients/${patient.patient_id}/vitals-history?limit=200`);
+ const data = await response.json();
+
+ setVitalsHistory(data.vitals_history || []);
+ setTierChanges(data.tier_changes || []);
+ setLoading(false);
+ } catch (error) {
+ console.error('Failed to fetch patient history:', error);
+ setLoading(false);
+ }
+ };
+
+ const prepareChartData = () => {
+ return vitalsHistory.slice().reverse().map((v, index) => ({
+ time: index,
+ timeLabel: new Date(v.timestamp * 1000).toLocaleTimeString(),
+ hr: v.hr_bpm,
+ spo2: v.spo2,
+ temp: v.temp_c,
+ tier: v.tier
+ }));
+ };
+
+ const calculateTrend = (data, key) => {
+ if (data.length < 2) return null;
+
+ const recent = data.slice(-5);
+ const first = recent[0][key];
+ const last = recent[recent.length - 1][key];
+ const change = last - first;
+
+ return {
+ direction: change > 0 ? 'up' : change < 0 ? 'down' : 'stable',
+ value: Math.abs(change).toFixed(1)
+ };
+ };
+
+ const chartData = prepareChartData();
+ const hrTrend = calculateTrend(chartData, 'hr');
+ const spo2Trend = calculateTrend(chartData, 'spo2');
+ const tempTrend = calculateTrend(chartData, 'temp');
+
+ if (loading) {
+ return (
+
+
+
+
Loading patient data...
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
{patient.name}
+
+ {patient.patient_id}
+ •
+ {patient.band_id}
+ •
+ Wait: {patient.wait_time_minutes} min
+
+
+
+
+
+
+
+
+
+
+
+
+ Heart Rate
+
+
+
{patient.last_hr}
+
+
bpm
+ {hrTrend && (
+
+ {hrTrend.direction === 'up' ? :
+ hrTrend.direction === 'down' ? : null}
+ {hrTrend.value}
+
+ )}
+
+
+
+
+
+
+
+ SpO₂
+
+
+
{patient.last_spo2}
+
+
%
+ {spo2Trend && (
+
+ {spo2Trend.direction === 'up' ? :
+ spo2Trend.direction === 'down' ? : null}
+ {spo2Trend.value}
+
+ )}
+
+
+
+
+
+
+
+ Temperature
+
+
+
{patient.last_temp.toFixed(1)}
+
+
°C
+ {tempTrend && (
+
+ {tempTrend.direction === 'up' ? :
+ tempTrend.direction === 'down' ? : null}
+ {tempTrend.value}
+
+ )}
+
+
+
+
+
+
+ {['all', 'hr', 'spo2', 'temp'].map(metric => (
+ setSelectedMetric(metric)}
+ className={`px-4 py-2 rounded-lg font-semibold ${
+ selectedMetric === metric ? 'bg-blue-600 text-white' : 'bg-gray-100 text-gray-700'
+ }`}
+ >
+ {metric === 'all' ? 'All Vitals' :
+ metric === 'hr' ? 'Heart Rate' :
+ metric === 'spo2' ? 'SpO₂' : 'Temperature'}
+
+ ))}
+
+
+ {chartData.length > 0 ? (
+
+ {(selectedMetric === 'all' || selectedMetric === 'hr') && (
+
+
+
+ Heart Rate Over Time
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ {(selectedMetric === 'all' || selectedMetric === 'spo2') && (
+
+
+
+ Oxygen Saturation Over Time
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ {(selectedMetric === 'all' || selectedMetric === 'temp') && (
+
+
+
+ Temperature Over Time
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ ) : (
+
+
+
No vital signs history available yet
+
+ )}
+
+ {tierChanges.length > 0 && (
+
+
Tier Change History
+
+ {tierChanges.map((change, index) => (
+
+
+ {new Date(change.change_time).toLocaleTimeString()}
+
+ {change.old_tier}
+ →
+ {change.new_tier}
+ ({change.reason})
+
+ ))}
+
+
+ )}
+
+
+
+
Total Readings
+
{vitalsHistory.length}
+
+
+
Priority Score
+
{patient.priority_score.toFixed(1)}
+
+
+
Current Tier
+
+ {patient.tier}
+
+
+
+
+
+
+ );
+};
+
+export default PatientDetailModal;
diff --git a/vitallink/logs/all_pids.txt b/vitallink/logs/all_pids.txt
new file mode 100644
index 0000000..54e7499
--- /dev/null
+++ b/vitallink/logs/all_pids.txt
@@ -0,0 +1,4 @@
+62558
+62574
+62581
+62616
diff --git a/vitallink/logs/backend.log b/vitallink/logs/backend.log
index 4eac242..8bb8738 100644
--- a/vitallink/logs/backend.log
+++ b/vitallink/logs/backend.log
@@ -1,1843 +1,204 @@
-INFO: Started server process [52899]
+INFO: Started server process [62558]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
================================================================================
VitalLink Backend API Started
================================================================================
+✓ Database initialized: vitallink.db
API Documentation: http://localhost:8000/docs
WebSocket Endpoint: ws://localhost:8000/ws
+Database: vitallink.db
================================================================================
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39990 - "GET / HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39998 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40004 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40018 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40024 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36622 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36636 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36648 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36650 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36654 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36666 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57038 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57054 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57056 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57064 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57076 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57086 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52266 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52268 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52272 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52278 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52284 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52286 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47432 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47444 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47450 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47466 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47472 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48038 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48052 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48060 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48068 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48072 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48076 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51256 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51260 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51268 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51276 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51284 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51288 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46080 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46088 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46098 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46106 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46110 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46116 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41624 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41640 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41650 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41666 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41676 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41688 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52798 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52814 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52826 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52830 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52838 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52844 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47320 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47334 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47336 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47346 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47352 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:47356 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49874 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49890 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49902 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49904 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49912 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49926 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36782 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36790 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36794 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36810 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36822 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36832 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52864 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52880 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52896 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52906 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52910 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52914 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54206 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54222 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54226 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54240 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54250 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54252 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54608 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54614 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54630 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54642 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54646 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54652 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59746 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59750 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59756 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59760 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59774 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59790 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35008 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35012 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35022 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35030 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35040 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35044 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33360 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33374 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33376 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33388 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33396 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33406 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33612 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33620 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33626 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33630 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33638 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33648 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39274 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39286 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39302 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39312 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39314 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39320 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52218 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52224 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52240 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52252 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52266 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52278 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35844 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35860 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35862 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35868 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35870 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35874 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56638 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56642 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56658 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56664 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56680 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56688 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60800 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60806 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60818 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60822 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60826 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60830 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33584 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33598 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33610 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33616 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33626 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33632 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46160 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46170 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46178 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46184 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46200 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:46202 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:42650 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:42658 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:42674 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:42680 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:42690 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:42698 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33874 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33882 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33898 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33914 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33928 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33932 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54332 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54342 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54346 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54352 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54366 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54380 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33334 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33344 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33352 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33358 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33360 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33362 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45620 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45630 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45632 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45636 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45638 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45654 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60882 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60892 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60894 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60900 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60912 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60926 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48986 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:48990 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49002 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49004 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49020 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49028 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55136 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55140 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55142 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55150 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55166 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55170 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49646 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49660 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49664 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49666 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49670 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49686 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49862 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49872 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49884 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49894 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49908 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49920 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49406 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49412 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49426 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49436 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49440 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49450 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40944 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40952 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40962 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40970 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40984 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40992 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56694 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56708 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56724 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56728 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56730 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56734 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33122 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33134 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33144 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33150 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33162 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33168 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52646 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52656 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52662 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52672 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52674 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52678 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43058 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43060 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43062 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43068 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43070 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43084 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40460 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40466 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40472 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40488 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40502 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40518 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43554 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43558 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43572 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43576 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43586 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43594 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53312 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53318 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53322 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53334 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53350 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53360 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39988 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34942 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34956 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34976 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34996 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35004 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39048 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39054 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39070 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39076 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39082 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39092 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41282 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41296 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41302 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41312 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41314 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41326 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35484 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35500 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35512 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35528 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35542 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35546 - "OPTIONS /api/checkin HTTP/1.1" 200 OK
-/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:198: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/
- await broadcast_update({"type": "patient_added", "patient": patient.dict()})
-INFO: 127.0.0.1:35546 - "POST /api/checkin HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35548 - "GET /api/queue HTTP/1.1" 200 OK
-/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:305: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/
- patient.last_vitals = data.dict()
-/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:335: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/
- "vitals": data.dict(),
-INFO: 127.0.0.1:35558 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39272 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39282 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39288 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39300 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39308 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39318 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34298 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34310 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34316 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34324 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34330 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34332 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55416 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55420 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55436 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55444 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55450 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55464 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39184 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39186 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39198 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39212 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39220 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39236 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33606 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33610 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33624 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33636 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33640 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33644 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40574 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40590 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40598 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40604 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40614 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40616 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40622 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40006 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40022 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40034 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40048 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40056 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40060 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53334 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53348 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53364 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53366 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53378 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53380 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45240 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45250 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45260 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45262 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45276 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45278 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39306 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39310 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39326 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39332 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39336 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39348 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50262 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50268 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50272 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50288 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50300 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50302 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36386 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36390 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36406 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36410 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36412 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36426 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36436 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44352 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44364 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44374 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44386 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44388 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44392 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51098 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51102 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51108 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51124 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51128 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34968 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53764 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53778 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53784 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53798 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53800 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53808 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60464 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60472 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60484 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60486 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60498 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60512 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60810 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60814 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60824 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60830 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60834 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:60838 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50048 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50062 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50072 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50086 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50098 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50110 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50124 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37708 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37720 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37730 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37738 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37744 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37754 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44922 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44932 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44936 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44948 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44964 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40236 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40238 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40252 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40254 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40264 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40274 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37340 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37352 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37358 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37370 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37372 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:37374 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43950 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43966 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43974 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43988 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44000 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44012 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52324 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52340 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52356 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52368 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52372 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52378 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52392 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41858 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41874 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41876 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41892 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41904 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41920 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34048 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34052 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34068 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34082 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34090 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34104 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53744 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53752 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53756 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53766 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53778 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53780 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56942 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56958 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56968 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56976 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56980 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56996 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56878 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56882 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56884 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56888 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56904 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:56908 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35710 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35716 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35726 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35740 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35756 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35768 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35778 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43018 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43026 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43030 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43032 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43040 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43056 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34280 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34284 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34290 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34294 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34306 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34318 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33490 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33494 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33500 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33506 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33514 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33528 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43596 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43606 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43616 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43628 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43632 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:43648 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33736 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33750 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33766 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33772 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33780 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33788 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58086 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58092 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58108 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58114 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58128 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58138 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58148 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49846 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49856 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49868 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49880 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49896 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:49910 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45462 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45464 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45474 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45482 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45494 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45510 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57094 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57108 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57122 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57128 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57132 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57136 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38990 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38996 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39012 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39028 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39042 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:39048 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40638 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40642 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40650 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40658 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40664 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:40666 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59806 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59820 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59826 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59832 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59838 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59846 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59860 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45552 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45564 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45576 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45578 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45582 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45598 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41624 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41632 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41648 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41662 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41674 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:41688 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59774 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59788 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59802 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59810 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59822 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:59832 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38316 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38324 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38326 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38342 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38346 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:38358 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53408 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53414 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53430 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53438 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53444 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53456 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54916 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54924 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54936 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54940 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54952 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54958 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:54966 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33250 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33262 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33264 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33278 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33286 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:33298 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:53128 - "GET / HTTP/1.1" 200 OK
+INFO: 127.0.0.1:53136 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:53142 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:53156 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:53160 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:53172 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43394 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43396 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43410 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43424 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43438 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43452 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:55612 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:55626 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:55632 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
INFO: 127.0.0.1:55634 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55650 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55652 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55664 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55676 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55686 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35600 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35614 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35628 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35632 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35640 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:35648 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45950 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45956 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45970 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45982 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45988 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:45996 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34472 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34474 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34486 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34492 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34500 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34514 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58320 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58336 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58350 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58360 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58366 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58380 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58388 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36624 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36640 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36644 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36660 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36662 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:36678 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52408 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52414 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52422 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52430 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52434 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:52450 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51648 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51662 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51666 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51682 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51688 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51700 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44294 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44296 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44302 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44314 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44320 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:44330 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50222 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50228 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50238 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50246 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50258 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50264 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53760 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53772 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53786 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53790 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53804 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53812 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53828 - "POST /api/vitals HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34578 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34588 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34602 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34606 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34622 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:34630 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50996 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:50998 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51000 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51004 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51014 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:51030 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55944 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55958 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55968 - "POST /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55982 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55994 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:55998 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: 127.0.0.1:58960 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/queue HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/stats HTTP/1.1" 200 OK
-INFO: 127.0.0.1:53770 - "GET /api/wristband-details HTTP/1.1" 200 OK
-INFO: Shutting down
-INFO: Waiting for application shutdown.
-INFO: Application shutdown complete.
-INFO: Finished server process [52899]
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:55644 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:55646 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:59532 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:59542 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:59552 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:59566 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:59576 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:59580 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:45636 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:45640 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:45642 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:45644 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:45652 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:45662 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48820 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48834 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48850 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48852 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48862 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48868 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:44082 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:44088 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:44090 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:44104 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:44108 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:44112 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:40312 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:40322 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:40334 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:40348 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:40358 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:40364 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:57108 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:57120 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:57128 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:57136 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:57144 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:57154 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48928 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48944 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48960 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48964 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48978 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:48992 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:60772 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:60788 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:60790 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:60802 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:60804 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:60808 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:58250 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:58262 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:58272 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:58288 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:58294 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:58298 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:35286 - "POST /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:35294 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/queue HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/stats HTTP/1.1" 200 OK
+INFO: 127.0.0.1:43408 - "GET /api/wristband-details HTTP/1.1" 200 OK
+INFO: 127.0.0.1:35306 - "GET /api/queue HTTP/1.1" 200 OK
diff --git a/vitallink/logs/backend.pid b/vitallink/logs/backend.pid
new file mode 100644
index 0000000..7409b50
--- /dev/null
+++ b/vitallink/logs/backend.pid
@@ -0,0 +1 @@
+62558
diff --git a/vitallink/logs/dashboard.log b/vitallink/logs/dashboard.log
index adcf770..73c3cfb 100644
--- a/vitallink/logs/dashboard.log
+++ b/vitallink/logs/dashboard.log
@@ -3,7 +3,7 @@
> vite
- VITE v7.1.10 ready in 231 ms
+ VITE v7.1.10 ready in 225 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
diff --git a/vitallink/logs/dashboard.pid b/vitallink/logs/dashboard.pid
new file mode 100644
index 0000000..1911377
--- /dev/null
+++ b/vitallink/logs/dashboard.pid
@@ -0,0 +1 @@
+62581
diff --git a/vitallink/logs/kiosk.log b/vitallink/logs/kiosk.log
index 93329aa..5b7836f 100644
--- a/vitallink/logs/kiosk.log
+++ b/vitallink/logs/kiosk.log
@@ -4,137 +4,7 @@
Port 5173 is in use, trying another one...
- VITE v7.1.10 ready in 233 ms
+ VITE v7.1.10 ready in 215 ms
➜ Local: http://localhost:5174/
➜ Network: use --host to expose
-10:36:25 AM [vite] (client) Pre-transform error: /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx: Support for the experimental syntax 'decorators' isn't currently enabled (1:1):
-
-> 1 | @import "tailwindcss";
- | ^
- 2 |
- 3 | /* Extra large touchscreen keyboard */
- 4 | .kiosk-keyboard .hg-button {
-
-Add @babel/plugin-proposal-decorators (https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators) to the 'plugins' section of your Babel config to enable transformation.
-If you want to leave it as-is, add @babel/plugin-syntax-decorators (https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators) to the 'plugins' section to enable parsing.
-
-If you already added the plugin for this syntax to your config, it's possible that your config isn't being loaded.
-You can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded configuration:
- npx cross-env BABEL_SHOW_CONFIG_FOR=/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx
-See https://babeljs.io/docs/configuration#print-effective-configs for more info.
-
- Plugin: vite:react-babel
- File: /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx:1:0
- 1 | @import "tailwindcss";
- | ^
- 2 |
- 3 | /* Extra large touchscreen keyboard */
-10:36:25 AM [vite] Internal server error: /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx: Support for the experimental syntax 'decorators' isn't currently enabled (1:1):
-
-> 1 | @import "tailwindcss";
- | ^
- 2 |
- 3 | /* Extra large touchscreen keyboard */
- 4 | .kiosk-keyboard .hg-button {
-
-Add @babel/plugin-proposal-decorators (https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators) to the 'plugins' section of your Babel config to enable transformation.
-If you want to leave it as-is, add @babel/plugin-syntax-decorators (https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators) to the 'plugins' section to enable parsing.
-
-If you already added the plugin for this syntax to your config, it's possible that your config isn't being loaded.
-You can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded configuration:
- npx cross-env BABEL_SHOW_CONFIG_FOR=/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx
-See https://babeljs.io/docs/configuration#print-effective-configs for more info.
-
- Plugin: vite:react-babel
- File: /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx:1:0
- 1 | @import "tailwindcss";
- | ^
- 2 |
- 3 | /* Extra large touchscreen keyboard */
- at constructor (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:367:19)
- at JSXParserMixin.raise (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:6630:19)
- at JSXParserMixin.expectOnePlugin (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:6664:18)
- at JSXParserMixin.parseDecorator (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12957:10)
- at JSXParserMixin.parseDecorators (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12942:28)
- at JSXParserMixin.parseStatementLike (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12774:25)
- at JSXParserMixin.parseModuleItem (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12753:17)
- at JSXParserMixin.parseBlockOrModuleBlockBody (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:13325:36)
- at JSXParserMixin.parseBlockBody (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:13318:10)
- at JSXParserMixin.parseProgram (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12634:10)
- at JSXParserMixin.parseTopLevel (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12624:25)
- at JSXParserMixin.parse (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:14501:10)
- at parse (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:14535:38)
- at parser (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/parser/index.js:41:34)
- at parser.next ()
- at normalizeFile (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/transformation/normalize-file.js:64:37)
- at normalizeFile.next ()
- at run (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/transformation/index.js:22:50)
- at run.next ()
- at transform (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/transform.js:22:33)
- at transform.next ()
- at step (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:261:32)
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:273:13
- at async.call.result.err.err (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:223:11)
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:189:28
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/gensync-utils/async.js:67:7
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:113:33
- at step (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:287:14)
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:273:13
- at async.call.result.err.err (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:223:11)
-10:36:28 AM [vite] Internal server error: /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx: Support for the experimental syntax 'decorators' isn't currently enabled (1:1):
-
-> 1 | @import "tailwindcss";
- | ^
- 2 |
- 3 | /* Extra large touchscreen keyboard */
- 4 | .kiosk-keyboard .hg-button {
-
-Add @babel/plugin-proposal-decorators (https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators) to the 'plugins' section of your Babel config to enable transformation.
-If you want to leave it as-is, add @babel/plugin-syntax-decorators (https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators) to the 'plugins' section to enable parsing.
-
-If you already added the plugin for this syntax to your config, it's possible that your config isn't being loaded.
-You can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded configuration:
- npx cross-env BABEL_SHOW_CONFIG_FOR=/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx
-See https://babeljs.io/docs/configuration#print-effective-configs for more info.
-
- Plugin: vite:react-babel
- File: /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/src/App.jsx:1:0
- 1 | @import "tailwindcss";
- | ^
- 2 |
- 3 | /* Extra large touchscreen keyboard */
- at constructor (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:367:19)
- at JSXParserMixin.raise (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:6630:19)
- at JSXParserMixin.expectOnePlugin (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:6664:18)
- at JSXParserMixin.parseDecorator (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12957:10)
- at JSXParserMixin.parseDecorators (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12942:28)
- at JSXParserMixin.parseStatementLike (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12774:25)
- at JSXParserMixin.parseModuleItem (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12753:17)
- at JSXParserMixin.parseBlockOrModuleBlockBody (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:13325:36)
- at JSXParserMixin.parseBlockBody (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:13318:10)
- at JSXParserMixin.parseProgram (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12634:10)
- at JSXParserMixin.parseTopLevel (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:12624:25)
- at JSXParserMixin.parse (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:14501:10)
- at parse (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/parser/lib/index.js:14535:38)
- at parser (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/parser/index.js:41:34)
- at parser.next ()
- at normalizeFile (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/transformation/normalize-file.js:64:37)
- at normalizeFile.next ()
- at run (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/transformation/index.js:22:50)
- at run.next ()
- at transform (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/transform.js:22:33)
- at transform.next ()
- at step (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:261:32)
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:273:13
- at async.call.result.err.err (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:223:11)
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:189:28
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/@babel/core/lib/gensync-utils/async.js:67:7
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:113:33
- at step (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:287:14)
- at /home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:273:13
- at async.call.result.err.err (/home/mai/documents/school/capstone/vitallink-BS/vitallink/frontend/kiosk/node_modules/gensync/index.js:223:11)
-10:38:52 AM [vite] (client) hmr update /src/index.css
-10:43:47 AM [vite] (client) hmr update /src/App.jsx, /src/index.css
-10:46:50 AM [vite] (client) hmr update /src/index.css
-10:47:14 AM [vite] (client) hmr update /src/index.css
diff --git a/vitallink/logs/kiosk.pid b/vitallink/logs/kiosk.pid
new file mode 100644
index 0000000..397d8cf
--- /dev/null
+++ b/vitallink/logs/kiosk.pid
@@ -0,0 +1 @@
+62616
diff --git a/vitallink/logs/wristbands.log b/vitallink/logs/wristbands.log
index b1f57b7..e69de29 100644
--- a/vitallink/logs/wristbands.log
+++ b/vitallink/logs/wristbands.log
@@ -1,133 +0,0 @@
-⚠️ Bleak not installed. Real wristbands disabled. Install with: pip install bleak
-✓ Loaded configuration from wristband_config.yaml
-
-================================================================================
-VitalLink System Initialization
-================================================================================
-
-✓ Backend is running at http://localhost:8000
-➕ Added simulated band MOCK-SIM1 (stable)
-➕ Added simulated band MOCK-SIM2 (mild_anxiety)
-➕ Added simulated band MOCK-SIM3 (deteriorating)
-➕ Added simulated band MOCK-SIM4 (sepsis)
-
-================================================================================
-WRISTBAND INVENTORY
-================================================================================
-🟢 MOCK-SIM1 | AVAILABLE
-🟢 MOCK-SIM2 | AVAILABLE
-🟢 MOCK-SIM3 | AVAILABLE
-🟢 MOCK-SIM4 | AVAILABLE
-================================================================================
-Total: 4 | Real: 0 | Simulated: 4 | Active: 0
-================================================================================
-
-
-================================================================================
-VitalLink System Running
-================================================================================
-
-✓ Monitoring for new patients from kiosk check-ins
-✓ Auto-assigning wristbands (prefer real: False)
-
-Press Ctrl+C to stop
-
-================================================================================
-
-
-🔍 Monitoring for new patient check-ins...
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-[Status] Active: 0 monitoring | Available: 4 bands | Real: 0 | Sim: 4
-
-🆕 New patient detected: P100001 (FIRST LAST)
-✓ MOCK-SIM1 assigned to patient P100001
- ✓ Assigned MOCK-SIM1 (simulated)
-🟢 Starting simulated wristband MOCK-SIM1 (stable)
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
-[Status] Active: 1 monitoring | Available: 3 bands | Real: 0 | Sim: 4
diff --git a/vitallink/logs/wristbands.pid b/vitallink/logs/wristbands.pid
new file mode 100644
index 0000000..19f7f43
--- /dev/null
+++ b/vitallink/logs/wristbands.pid
@@ -0,0 +1 @@
+62574
diff --git a/vitallink/vitallink.db b/vitallink/vitallink.db
new file mode 100644
index 0000000..0c81117
Binary files /dev/null and b/vitallink/vitallink.db differ