diff --git a/.gitignore b/.gitignore index ed8a56d..23b8d5b 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,5 @@ dist-ssr *.sln *.sw? .env -.env.production \ No newline at end of file +.env.production +package-lock.json \ No newline at end of file diff --git a/README.md b/README.md index ed93770..49c5146 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # Software Requirements Specification (SRS) for NeighbourLink (Neighborhood Focus) -**Version:** 1.0 -**Date:** March 14, 2025 +**Version:** 1.1 +**Date:** April 20, 2025 + ## 1. Introduction @@ -9,120 +10,445 @@ NeighbourLink is a hyperlocal platform connecting neighbors to share resources (e.g., tools, medical equipment) and provide urgent assistance within their immediate community. ### 1.2 Scope -- **Target Users:** Residents within a defined neighborhood (1–5 km radius). +- **Target Users:** Residents within a defined neighborhood (1–15 km radius). - **Key Features:** + - Connect with nearby people - Post and search for resources. - Emergency alerts for critical needs. - - Trust-building tools (ratings, verification). + - Ability to add upcoming events in the locality to update the local people. + - Ability to promote business and ideas (for commercial use). + - Ability to update the locality about any issues or construction updates. + - Trust-building tools (user verification through Govt ID). - Secure in-app communication. + - Community skill exchange to make more reliable bondings by utilising the skills of the local people. + - Community of local volunteers for quick and direct communication with the needy. + - Local language support. + - Location (meeting) support. + - In-app notification support. + - Update and commenting system for continuous local updates. ### 1.3 Out of Scope (Future) - School/college or workplace-specific hubs. - Event-based temporary communities. +- Connecting local police stations and NGO's. + +### 1.4 Business Scope + +#### 1.4.1 Core Business Opportunity +NeighbourLink builds a distinct community-driven digital marketplace that bridges residents and local businesses in ways that classic platforms do not. By prioritizing proximity-based relationships within a 1-15 km range, the site allows businesses to reach exactly the right customers that count most - those directly within physical proximity. + +#### 1.4.2 Business Promotion Features + +##### 1. Hyperlocal Marketing System +- **Targeted Visibility:** Businesses are able to craft promotion posts viewed by users in their specified area (1-15 km) +- **Media-Rich Presentations:** Multi-image and video support to represent products or services effectively +- **Duration Control:** Businesses can specify specific time frames for promotions (for example, 7 days, 30 days) to coincide with business cycles + +##### 2. Creation of Business Profiles +- **Verified Business Credentials:** "Verified Business" badges build consumer trust +- **Complete Contact Management:** Organized presentation of business name, contact details, and email +- **Location Integration:** Map-based business discovery with accurate location services + +##### 3. Direct Consumer Engagement +- **Secure Business Chat:** End-to-end encrypted messaging between businesses and prospective customers +- **Privacy-Preserving Communication:** No phone number exposure while still having direct contact +- **Media Sharing:** Ability to share more product/service information in conversations + +##### 4. Analytics & Performance Metrics +- **Promotion Tracking:** Businesses are able to track saved/shared counts +- **Visibility Analytics:** Data on promotion reach among neighborhood demographics + +#### 1.4.3 Monetization Strategy +The platform follows a multi-level business model: + +##### Freemium Structure: +- Free basic business listings within 5km radius +- Promotional reach in extended radius (5-15km) attracts charges +- Premium placement features for increased visibility + +##### Duration-Based Pricing: +- Short-term promotions (less than 7 days) at discounted rates +- Extended promotional periods with higher pricing +- Featured promotion features for maximum visibility + +##### Value-Added Services: +- Advanced media display features (multiple images, videos) +- Business verification services +- Analytics and reporting tools + +#### 1.4.4 Additional Commercial Opportunities + +##### Local Event Monetization +- **Event Sponsorship:** Companies sponsor community events for greater exposure +- **Ticketed Events:** Support for paid community events with built-in payment processing +- **Event-Promotion Packages:** Integrated promotional and event hosting features + +##### Skill Exchange Marketplace +- **Service Provider Listings:** Local experts promote specialized skills +- **Commission Structure:** Platform share on successful service transactions +- **Featured Skill Promotion:** Greater exposure for premium skill providers + +##### Community-Commercial Integration +- **Reputation-Based Promotion:** Greater exposure for businesses with high community participation +- **Cross-Promotion Opportunities:** Between commercial offerings and resource sharing +- **Collaborative Marketing:** Complementary local businesses coming together for joint promotions + +#### 1.4.5 Competitive Business Advantage +NeighbourLink generates one-of-a-kind business value by: +- **Trust-First Approach:** Verification systems generate a more qualified audience for businesses +- **Genuine Local Focus:** Authentic hyperlocal reach in contrast to broad-based platforms +- **Community Context:** Businesses interact with consumers within a community-focused context +- **Emergency Response Integration:** Business visibility at times of urgent neighborhood needs +- **Multi-Language Support:** Engage with diverse neighborhood demographics through translation support + +The business scope effectively balances commercial interests with community needs, creating sustainable revenue opportunities while maintaining the platform's core neighborhood assistance mission. ## 2. Overall Description ### 2.1 User Needs - Quickly locate nearby resources during emergencies (e.g., oxygen cylinders). -- Share underutilized items (e.g., tools, books) with trusted neighbors. -- Maintain privacy while requesting/receiving help. +- Share underutilized items (e.g., tools, books) with trusted neighbours. +- Maintain privacy while requesting/receiving help by keeping their contact details hidden. +- Get upcoming event updates happening in the locality. +- Get local issue and construction updates of the locality. +- Find and offer specialized skills within the neighborhood. +- Communicate in preferred local language. +- Coordinate meeting locations for resource exchanges. +- Stay updated through notifications. ### 2.2 System Features #### Core Features: 1. **User Authentication & Verification** - - Sign-up via phone/email. + - Sign-up via email. - Optional ID verification for "Trusted Neighbor" badges. + - User profile management. -2. **Resource Posting & Search** +2. **Resource Sharing** - Post requests/offers with categories (Medical, Tools, Books). - - Filter by distance (1–5 km), urgency, or keyword. + - Post requests and offers with photos and categories. + - Search within customizable neighbourhood radius. 3. **Emergency Alerts** - - Priority notifications for critical needs (e.g., "Blood donor needed"). - - Broadcast alerts via SMS/push to all users within 2 km. + - Broadcast urgent needs to neighbours within 5km area. + - Send notifications via push alerts. + - Priority system for critical needs. 4. **In-App Communication** - Encrypted chat (no phone number sharing). - Photo uploads for item verification. + - In-chat access to MAP for scheduling location for meetup/resource exchange. 5. **Trust & Safety** - - User ratings after exchanges. - - Report/block suspicious users. - Anonymous posting for sensitive requests. + - User verification by Govt. ID. + +6. **Local Events** + - Post upcoming events in the locality. + - Calendar view of neighborhood events. + - Event reminders and RSVPs. + +7. **Business Promotion** + - Create business promotion posts within the locality. + - Option for paid and unpaid promotion. + +8. **Community Updates** + - Post construction updates and infrastructure changes. + - Report and track local issues. + - Status updates on reported issues. + +9. **Skill Exchange** + - Profile section for listing skills. + - Search for specific skills in the neighborhood. + - Request and offer skill-based services. + +10. **Volunteer Management** + - Coordinate volunteer activities. + - Direct communication channel with volunteers. + +11. **Language Support** + - Interface in multiple local languages. + - Translation capabilities for posts. + - Language preference settings. + +12. **Location Services** + - Set up meeting points for exchanges. + - Map integration for precise meeting point fixing. + +13. **Notification System** + - Customizable notification preferences. + - Push notifications for relevant updates. + ## 3. Functional Requirements ### 3.1 User Management | **ID** | **Requirement** | **Description** | |--------|-----------------|-----------------| -| FR1 | Registration | Sign up via phone/email. | +| FR1 | Registration | Sign up via email with basic profile information. | | FR2 | Verification | Optional ID scan for "Trusted Neighbor" badge. | +| FR3 | Profile Management | Edit profile details, interests, and skills. | +| FR4 | Language Settings | Set preferred language for interface and communications. | ### 3.2 Resource Sharing | **ID** | **Requirement** | **Description** | |--------|-----------------|-----------------| -| FR3 | Post Creation | Users can post requests/offers with photos, categories, and urgency levels. | -| FR4 | Search & Filter | Search by keyword, category, or distance (1–5 km). | -| FR5 | Emergency Broadcast | Critical posts trigger SMS + push alerts to users within 2 km. | +| FR5 | Post Creation | Users can post requests/offers with photos, categories, and urgency levels. | +| FR6 | Search | Search by keyword, category, or distance (1–5 km). | +| FR7 | Emergency Broadcast | Critical posts trigger push alerts to users within 2 km. | +| FR8 | Resource Categories | Organize posts by categories (Medical, Tools, Books, etc.). | +| FR9 | Resource Timeline | Set availability duration for offered resources. | ### 3.3 Communication | **ID** | **Requirement** | **Description** | |--------|-----------------|-----------------| -| FR6 | In-App Chat | Encrypted messaging between users. | -| FR7 | Notifications | Push/SMS alerts for matches or messages. | +| FR10 | In-App Chat | Encrypted messaging between users. | +| FR11 | Notifications | Push/SMS alerts for matches or messages. | +| FR12 | Message Translation | Translate messages between users' preferred languages. | +| FR13 | Group Messaging | Create group chats for community discussions. | + +### 3.4 Events Management +| **ID** | **Requirement** | **Description** | +|--------|-----------------|-----------------| +| FR14 | Event Creation | Post community events with details, time, and location. | +| FR15 | Event Calendar | View events in calendar format with filters. | +| FR16 | Event Reminders | Get notifications for upcoming events. | +| FR17 | Event RSVP | Indicate attendance and see guest list. | + +### 3.5 Business Promotion +| **ID** | **Requirement** | **Description** | +|--------|-----------------|-----------------| +| FR18 | Promotion Posts | Create special promotional offers for neighbors. | +| FR19 | Business Categories | Filter businesses by type of service. | + +### 3.6 Community Updates +| **ID** | **Requirement** | **Description** | +|--------|-----------------|-----------------| +| FR20 | Issue Reporting | Report local issues with photos and descriptions. | +| FR21 | Infrastructure Updates | Post updates about construction or maintenance work. | +| FR22 | Status Tracking | Track status of reported issues (New, In Progress, Resolved). | -### 3.4 Administration +### 3.7 Skill Exchange | **ID** | **Requirement** | **Description** | |--------|-----------------|-----------------| -| FR8 | Moderation | Admins can remove posts, suspend users, or resolve reports. | -| FR9 | Dashboard | View neighborhood activity (e.g., most-requested items). | +| FR23 | Skill Listing | Add skills to profile | +| FR24 | Skill Search | Find neighbors with specific skills. | +| FR25 | Skill Request | Request skill-based assistance from neighbors. | + +### 3.8 Volunteer Management +| **ID** | **Requirement** | **Description** | +|--------|-----------------|-----------------| +| FR26 | Priority Communication | Direct channel between volunteers and those in need. | + +### 3.9 Location Services +| **ID** | **Requirement** | **Description** | +|--------|-----------------|-----------------| +| FR27 | Meeting Setup | Coordinate meeting locations for exchanges. | + +### 3.10 Notification System +| **ID** | **Requirement** | **Description** | +|--------|-----------------|-----------------| +| FR28 | Notification Preferences | Customize notification types and frequency. | +| FR29 | Push Notifications | Receive immediate alerts for important updates. | +| FR30 | In-app Notifications | View notification history within app. | ## 4. Non-Functional Requirements | **Category** | **Requirement** | |--------------|-----------------| | **Performance** | Load search results within 2 seconds for 95% of queries. | +| | Process emergency alerts within 30 seconds of posting. | +| | Support concurrent usage of up to 1000 users per neighborhood. | | **Security** | End-to-end encryption for chats; anonymize location data. | +| | Government ID verification with secure data storage compliant with local regulations. | +| | Regular security audits and vulnerability assessments. | | **Usability** | 90% of test users can post a request within 3 minutes. | -| **Compatibility** | Support Android (8.0+) and iOS (14+). | +| | Interface accessibility compliant with WCAG 2.1 AA standards. | +| | Support for local languages with complete translations. | +| **Compatibility** | Optimized for various screen sizes and resolutions. | +| **Reliability** | 99.9% uptime for core services. | +| | Automatic data backup every 24 hours. | +| | Disaster recovery plan with 2-hour recovery time objective. | +| **Scalability** | Ability to scale to 100+ users across multiple neighborhoods. | +| | Dynamic resource allocation based on user activity patterns. | +| **Maintainability** | Modular architecture for feature updates without system-wide impacts. | +| | Comprehensive logging for troubleshooting. | ## 5. System Architecture ### 5.1 High-Level Design -- **Frontend:** Mobile apps (iOS/Android) and Progressive Web App (PWA). -- **Backend:** REST API (Node.js). -- **Database:** Firebase (for real-time updates) + MongoDB (user profiles). +- **Frontend:** Fully responsive website. +- **Backend & Database:** Firebase (for real-time updates). - **Cloud:** AWS S3 for image storage. +- **Push Notification Service:** Firebase Cloud Messaging. +- **Translation API:** Google Cloud Translation API. +- **Geolocation Service:** Integrated with OLA map APIs. ### 5.2 External Interfaces -- **Maps:** OLA Maps API for location filtering. -- **SMS:** Twilio for emergency alerts. +- **Maps:** OLA Maps API for location filtering and navigation. ## 6. Use Case Diagrams ### 6.1 Primary Use Cases 1. **Post a Resource Request** - **Actor:** Resident - - **Flow:** Post request → System notifies nearby users → Match found → Chat to coordinate pickup. + - **Flow:** Post request → System notifies nearby users → Match found → Chat to coordinate pickup → Set meeting location → Complete exchange. 2. **Respond to Emergency Alert** - **Actor:** Resident - - **Flow:** Receive SMS alert → View details → Accept/decline assistance. + - **Flow:** Receive SMS alert → View details → Accept/decline assistance → Coordinate through secure chat → Provide help. + +3. **Organize Local Event** + - **Actor:** Resident or Business Owner + - **Flow:** Create event → Set details and location → Publish to neighborhood → Manage RSVPs → Send reminders → Host event. + +4. **Report Local Issue** + - **Actor:** Resident + - **Flow:** Document issue with photo → Submit report → Neighbors can confirm/comment → Relevant authorities notified → Track resolution status. + +5. **Offer Professional Skill** + - **Actor:** Resident + - **Flow:** Update profile with skill → Set availability → Neighbors search and find → Receive request → Negotiate terms → Provide service. + +## 7. User Instructions + +### 7.1 Getting Started +1. **Download and Install** + - Access via web browser at https://main.d3raf20hzd0dfa.amplifyapp.com/ + +2. **Create Your Account** + - Sign up using email address. + - Complete your profile with basic information. + +3. **Verify Your Identity (Optional but Recommended)** + - Go to Profile > Verification. + - Upload government-issued ID. + - Receive "Trusted Neighbor" badge upon verification. + +4. **Set Your Neighborhood** + - Allow location access or manually enter your address. + - Set your preferred radius (1-20 km). + +### 7.2 Using Core Features + +#### Sharing Resources +1. **Post a Resource** + - Tap "+" button on home screen. + - Select "Offer Resource" or "Request Resource." + - Fill in details: title, description, category, duration available. + - Add photos (optional but recommended). + - Set urgency level if relevant. + - Publish your post. + +2. **Find Resources** + - Use search bar with keywords. + - Apply filters: category, distance, availability. + - Browse the resource feed. + - Save searches for regular needs. + +3. **Emergency Requests** + - Select "Emergency" when creating a request. + - Provide critical details concisely. + - Your request will be prioritized and sent as alerts. + +#### Communication +1. **Messaging** + - Tap on a post to express interest. + - Use the in-app messaging to discuss details. + - Share additional photos if needed. + - Arrange meeting through the secure chat. + +2. **Set Meeting Location** + - Use "Suggest Meeting Point" feature in chat. + - Select from safe public locations or suggest custom spot. + - Confirm meeting time and location. + - Get directions when needed. + +#### Community Engagement +1. **Local Events** + - Browse Events tab for neighborhood activities. + - Create new events with details, time, location. + - RSVP to events you're interested in. + - Set reminders for upcoming events. + +2. **Reporting Issues** + - Go to Updates tab > Report Issue. + - Categorize the issue (infrastructure, safety, etc.). + - Add description and photos. + - Track status of your reports. + +3. **Business Promotion** + - Create business profile through Settings. + - Verify business credentials. + - Post special offers for neighbors. + - Respond to inquiries through business chat. + +#### Skill Exchange +1. **Offering Skills** + - Update profile with skills and expertise. + - Set availability and terms. + - Respond to skill requests. + - Build reputation through reviews. + +2. **Finding Skills** + - Search by skill type in Skills tab. + - View profiles and reviews of skilled neighbors. + - Request assistance with specific projects. + - Arrange details through messaging. + +#### Volunteering +1. **Become a Volunteer** + - Register through Volunteer tab. + - Select areas of interest. + - Set availability and radius. + - Receive alerts for relevant needs. + +2. **Request Volunteer Help** + - Create request specifying need for volunteer. + - Describe assistance needed. + - System matches with available volunteers. + - Coordinate through dedicated channel. + +### 7.3 Settings and Preferences +1. **Notification Settings** + - Customize by type: Resources, Events, Updates, Messages. + - Set quiet hours. + - Choose between push, email, or both. + +2. **Privacy Controls** + - Manage profile visibility. + - Control location precision. + - Set anonymous mode for sensitive requests. + +3. **Language Preferences** + - Select interface language. + - Set translation preferences for communications. + - Add secondary languages if multilingual. -## 7. Risks & Mitigation +## 8. Risks & Mitigation | **Risk** | **Mitigation** | |----------|----------------| -| Low adoption in neighborhoods. | Partner with local NGOs for grassroots promotion. | -| Safety during exchanges. | Integrate **safe pickup zones** (e.g., local police stations). | -| Spam/fake requests. | Require phone verification for posting. | +| Low adoption in neighborhoods. | Partner with local NGOs and community leaders for grassroots promotion. | +| Safety during exchanges. | Integrate **safe pickup zones** (e.g., local police stations) and in-app safety features. | +| Spam/fake requests. | Require phone verification for posting and implement community reporting system. | +| Privacy concerns. | Clear privacy policies, granular controls for users, and regular data handling audits. | +| Language barriers. | Robust translation features and culturally sensitive localization. | +| Digital divide. | Simple UI/UX with accessibility features and offline capabilities where possible. | +| Resource coordination failures. | Clear communication protocols and backup contact methods for critical exchanges. | -## 8. Glossary +## 9. Glossary - **Trusted Neighbor:** Verified user with ID proof. - **Emergency Alert:** Priority broadcast for critical needs. +- **Safe Exchange Zone:** Designated public locations for resource exchanges. +- **Skill Exchange:** Service bartering system between neighbors. +- **Community Update:** Information about infrastructure changes or local issues. +- **Volunteer Network:** Connected group of residents offering assistance. -## 9. Next Steps +## 10. Next Steps 1. **Prioritize MVP Features:** - Core: Resource posting, search, in-app chat, emergency alerts. - - Defer: Advanced analytics, anonymous posting. -2. **Wireframing:** Map user flows for posting requests and responding to alerts. + - Secondary: Events, business promotion, community updates. + - Tertiary: Skill exchange, volunteer network, advanced location services. +2. **Wireframing:** Map user flows for all core and secondary features. 3. **Pilot Testing:** Launch in 1–2 neighborhoods to gather feedback. +4. **Phased Rollout:** Implement features in stages based on user adoption and feedback. +5. **Community Building:** Establish neighborhood ambassadors to promote usage. diff --git a/docs/GoogleMapsGuide.md b/docs/GoogleMapsGuide.md new file mode 100644 index 0000000..06a8cf7 --- /dev/null +++ b/docs/GoogleMapsGuide.md @@ -0,0 +1,295 @@ +# Google Maps Integration Guide + +This guide explains how to implement Google Maps JavaScript API features in your React application, based on best practices and the components we've created. + +## 🚀 Features Implemented + +- ✅ **Basic Map Display** - Show Google Maps with custom center and zoom +- ✅ **Markers** - Add custom markers with colors, icons, and info windows +- ✅ **Current Location** - Get and display user's current location +- ✅ **Address Search** - Geocoding and reverse geocoding +- ✅ **Distance Calculation** - Calculate distance and duration between points +- ✅ **Interactive Features** - Map clicks, marker dragging, info windows +- ✅ **Directions** - Generate direction URLs for Google Maps and Apple Maps +- ✅ **Error Handling** - Proper error handling for API failures +- ✅ **TypeScript Support** - Full TypeScript definitions + +## 📁 File Structure + +``` +src/ +├── components/ +│ ├── events/ +│ │ ├── EventDetailsPanel.tsx # Event details with map +│ │ └── LocationInfo.tsx # Distance and directions component +│ └── examples/ +│ └── GoogleMapsDemo.tsx # Complete demo component +├── utils/google_map/ +│ ├── GoogleMapsViewer.tsx # Main map component +│ ├── GoogleMapsUtils.ts # Utility functions +│ └── MapInit.ts # Map initialization utilities +``` + +## 🔧 Setup + +### 1. Environment Variables + +Add your Google Maps API key to your `.env` file: + +```env +VITE_GOOGLE_MAP_API_KEY=your_google_maps_api_key_here +``` + +### 2. API Key Configuration + +Make sure your Google Maps API key has the following APIs enabled: +- Maps JavaScript API +- Geocoding API +- Distance Matrix API +- Places API (optional) + +## 🛠️ Usage Examples + +### Basic Map Display + +```tsx +import GoogleMapsViewer from '@/utils/google_map/GoogleMapsViewer'; + +function MyMapComponent() { + return ( + + ); +} +``` + +### Map with Markers + +```tsx +const markers = [ + { + position: { lat: 22.5726, lng: 88.3639 }, + color: '#4CAF50', + title: 'Kolkata', + description: 'City of Joy' + }, + { + position: { lat: 22.5825, lng: 88.3700 }, + color: '#F44336', + title: 'Victoria Memorial', + description: 'Historic monument' + } +]; + + +``` + +### Using Utility Functions + +```tsx +import { + getCurrentLocation, + geocodeAddress, + calculateDistanceAndDuration, + getDirectionUrls +} from '@/utils/google_map/GoogleMapsUtils'; + +// Get current location +const currentLoc = await getCurrentLocation(); + +// Search for address +const coordinates = await geocodeAddress('Times Square, New York'); + +// Calculate distance +const result = await calculateDistanceAndDuration( + { lat: 40.7128, lng: -74.0060 }, // New York + { lat: 34.0522, lng: -118.2437 } // Los Angeles +); + +// Get direction URLs +const urls = getDirectionUrls(fromLocation, toLocation); +window.open(urls.googleMaps, '_blank'); +``` + +### Event Location with Distance Info + +```tsx +import LocationInfo from '@/components/events/LocationInfo'; + +function EventDetails({ event }) { + return ( +
+

{event.title}

+ + {/* Show distance and directions */} + + + {/* Show map */} + +
+ ); +} +``` + +## 🎛️ Component Props + +### GoogleMapsViewer Props + +| Prop | Type | Default | Description | +|------|------|---------|-------------| +| `center` | `Coordinates` | Kolkata coords | Map center point | +| `zoom` | `number` | `15` | Initial zoom level | +| `markers` | `MarkerData[]` | `[]` | Array of markers to display | +| `height` | `string` | `'300px'` | Map container height | +| `showCurrentLocation` | `boolean` | `false` | Show user's current location | +| `enableGeolocation` | `boolean` | `true` | Enable geolocation features | +| `mapType` | `string` | `'roadmap'` | Map type (roadmap, satellite, etc.) | +| `showDirectionsButton` | `boolean` | `false` | Show directions in info windows | +| `onMapClick` | `function` | - | Callback for map clicks | +| `onMarkerDrag` | `function` | - | Callback for marker drag | + +### MarkerData Interface + +```tsx +interface MarkerData { + position: { lat: number; lng: number }; + color?: string; // Hex color for marker + draggable?: boolean; // Whether marker can be dragged + title?: string; // Marker title + description?: string; // Additional description + icon?: string; // Custom icon URL +} +``` + +## 🔍 Available Utility Functions + +| Function | Description | Returns | +|----------|-------------|---------| +| `getCurrentLocation()` | Get user's current location | `Promise` | +| `geocodeAddress(address)` | Convert address to coordinates | `Promise` | +| `reverseGeocode(coords)` | Convert coordinates to address | `Promise` | +| `calculateDistanceAndDuration(from, to)` | Calculate distance and travel time | `Promise<{distance, duration} \| null>` | +| `getDirectionUrls(from, to)` | Generate direction URLs | `{googleMaps: string, appleMaps: string}` | +| `calculateStraightLineDistance(p1, p2)` | Calculate straight-line distance in km | `number` | +| `isValidCoordinates(coords)` | Validate coordinate object | `boolean` | + +## 🎨 Styling and Customization + +### Custom Map Styles + +```tsx +const darkMapStyles = [ + { + "elementType": "geometry", + "stylers": [{"color": "#242f3e"}] + }, + // ... more styles +]; + + +``` + +### Custom Marker Icons + +```tsx +const markers = [ + { + position: { lat: 22.5726, lng: 88.3639 }, + icon: '/path/to/custom-icon.png', + title: 'Custom Icon Marker' + } +]; +``` + +## 🚨 Error Handling + +The components include comprehensive error handling: + +- **API Loading Errors**: Displays error message if Google Maps fails to load +- **Geolocation Errors**: Handles permission denied and other location errors +- **Geocoding Errors**: Graceful fallback when address lookup fails +- **Network Errors**: Proper error states for network issues + +## 📱 Mobile Considerations + +- **Touch Gestures**: Maps use `gestureHandling: 'cooperative'` for better mobile experience +- **Responsive Design**: Components are fully responsive +- **Performance**: Lazy loading and cleanup to prevent memory leaks + +## 🔐 Security Best Practices + +1. **API Key Security**: Store API keys in environment variables +2. **Domain Restrictions**: Restrict API key usage to your domains +3. **API Quotas**: Monitor and set appropriate quotas +4. **HTTPS Only**: Geolocation requires HTTPS in production + +## 📊 Performance Tips + +1. **Lazy Loading**: Maps are loaded only when needed +2. **Marker Cleanup**: Proper cleanup prevents memory leaks +3. **Debounced Search**: Implement debouncing for address search +4. **Efficient Re-renders**: Components use proper dependency arrays + +## 🧪 Testing + +For testing components that use Google Maps: + +```tsx +// Mock Google Maps API for tests +global.google = { + maps: { + Map: jest.fn(), + Marker: jest.fn(), + InfoWindow: jest.fn(), + // ... other mocks + } +}; +``` + +## 📚 Additional Resources + +- [Google Maps JavaScript API Documentation](https://developers.google.com/maps/documentation/javascript) +- [React Google Maps Integration Guide](https://developers.google.com/maps/documentation/javascript/react-map) +- [Google Maps API Key Setup](https://developers.google.com/maps/gmp-get-started) + +## 🤝 Contributing + +When contributing to the Google Maps integration: + +1. Follow TypeScript best practices +2. Add proper error handling +3. Include cleanup in useEffect hooks +4. Test with different locations and edge cases +5. Update documentation for new features + +--- + +This integration provides a solid foundation for Google Maps functionality in your React application. The components are designed to be reusable, well-documented, and production-ready. diff --git a/external/decrypt.js b/external/decrypt.js new file mode 100644 index 0000000..04c04ce --- /dev/null +++ b/external/decrypt.js @@ -0,0 +1,43 @@ +import fs from 'node:fs/promises'; + +function unpack(splash) { + var n = 65; + var a = splash.substring(0, 2*n); + var b = splash.substring(2*n); + var m = []; + for(var i = 0; i < n; i++) + m[a[2*i+1]] = a[2*i]; + var s = ''; + for (var i = 0; i < b.length; i++) + s += m[b[i]]; + return JSON.parse(atob(s)); +} + +async function decryptPandalData() { + try { + // Read the encrypted data + const data = await fs.readFile('./pandalData.json', 'utf8'); + const jsonData = JSON.parse(data); + + if (!jsonData.raw) { + console.error('No raw data found in the file'); + return; + } + + // Decrypt the data + const decryptedData = unpack(jsonData.raw); + + // Save the decrypted data + await fs.writeFile('./pandalData_decrypted.json', JSON.stringify(decryptedData, null, 2), 'utf8'); + + console.log('Successfully decrypted data and saved to pandalData_decrypted.json'); + console.log('Preview of decrypted data:'); + console.log(JSON.stringify(decryptedData, null, 2).substring(0, 500) + '...'); + + } catch (error) { + console.error('Error decrypting data:', error); + } +} + +// Run the decryption +decryptPandalData(); \ No newline at end of file diff --git a/external/helpter.js b/external/helpter.js new file mode 100644 index 0000000..71f7a9d --- /dev/null +++ b/external/helpter.js @@ -0,0 +1,42 @@ +// Replaced with a minimal Node script that fetches the endpoint and saves JSON to disk. +// Usage: node helpter.js [tok] [eventName] [outFile] +// Example: node helpter.js mytoken "My Event" ./pandalData.json + +import fs from 'node:fs/promises' +import { URL, URLSearchParams } from 'node:url'; +async function fetchAndSaveJSON({ tok = null, event = null, outFile = 'pandalData.json' } = {}) { + const base = 'https://geobums.com/api/getData'; + const url = new URL(base); + const params = new URLSearchParams(); + if (tok) params.set('tok', tok); + // else params.set('logout', ''); // mimic previous behavior when no token + if (event) params.set('event', event); + url.search = params.toString(); + + console.log('Fetching:', url.toString()); + + const res = await fetch(url.toString(), { method: 'GET' }); + if (!res.ok) throw new Error(`HTTP ${res.status} ${res.statusText}`); + + const text = await res.text(); + + // Try to parse JSON; if it fails, save raw text under "raw" key + let out; + try { + out = JSON.parse(text); + } catch { + out = { raw: text }; + } + + await fs.writeFile(outFile, JSON.stringify(out, null, 2), 'utf8'); + console.log('Saved data to', outFile); + return out; +} + + const [, , tokArg, eventArg, outFileArg] = process.argv; + fetchAndSaveJSON({ tok: tokArg || null, event: eventArg || null, outFile: outFileArg || 'pandalData.json' }) + .then(() => process.exit(0)) + .catch(err => { + console.error('Error:', err); + process.exit(1); + }); diff --git a/external/index.html b/external/index.html new file mode 100644 index 0000000..7d4ff49 --- /dev/null +++ b/external/index.html @@ -0,0 +1,6885 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pandal Hopper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Map data ©2025
+
+
+
+
+ Map data ©2025
+
+
+
+
+
+
+
+
+ Terms +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Alipore Sarbojanin
+
+
+
+
+
Behala Friends
+
+
+
+
+
Bosepukur Sitala Mandir
+
+
+
+
+
Telengabagan
+
+
+
+
+
Behala Nutan Dal
+
+
+
+
+
Rajdanga Naba Uday Sangha
+
+
+
+
+
Aikyatan Club
+
+
+
+
+
Samaj Sebi Sangha
+
+
+
+
+
Tala Park Prattay
+
+
+
+
+
Hindustan Park Sarbojanin
+
+
+
+
+
Mitali Kankurgachi
+
+
+
+
+
Tridhara Akalbodhan (was Sammilani)
+
+
+
+
+
Sodepur Sahid Colony Sarbojanin
+
+
+
+
+
Upanagari Sporting Club
+
+
+
+
+
Tala Barowari
+
+
+
+
+
Ahiritola Sarbojanin Durgotsab Samiti
+
+
+
+
+
Kendua Shanti Sangha
+
+
+
+
+
Bagbazar Palli
+
+
+
+
+
Chetla Agrani Club
+
+
+
+
+
State Bank Park Sarbojanin
+
+
+
+
+
Manicktala Chaltabagan Loha Patty
+
+
+
+
+
Behala Buroshibtala Janakalyan Sangha
+
+
+
+
+
Bosepukur Talbagan
+
+
+
+
+
Behala Nutan Sangha
+
+
+
+
+
Jatra Suru Sangha
+
+
+
+
+
Naktala Udayan Sangha
+
+
+
+
+
Behala Club
+
+
+
+
+
Gouriberia Sarbajanin Durgotsab O Pradarshani
+
+
+
+
+
Kankurgachi Jubak Brinda
+
+
+
+
+
Purbachal Shakti Sangha
+
+
+
+
+
Lake Garden People's Association
+
+
+
+
+
Belgachiya Sadharan Durgatsab
+
+
+
+
+
25 Pally
+
+
+
+
+
Green Avenue Sarbojanin
+
+
+
+
+
The Bengal Boys Training Association
+
+
+
+
+
Pally Unnayan Samity
+
+
+
+
+
Beliaghata Nabamilan
+
+
+
+
+
Selimpur Pally
+
+
+
+
+
Abasar Sarbojonin
+
+
+
+
+
Bakul Bagan
+
+
+
+
+
Beliaghata 33 Pallibashi Brinda
+
+
+
+
+
Kashi Bose Lane
+
+
+
+
+
Barisha Club
+
+
+
+
+
Santosh Mitra Square
+
+
+
+
+
Halshibagan Sarbojanin
+
+
+
+
+
77 Palli
+
+
+
+
+
Kalighat Milan Sangha
+
+
+
+
+
Chorebagan Sarbojanin Durgotsab Samity
+
+
+
+
+
Dakshinpara Durgotshab
+
+
+
+
+
Sangrami
+
+
+
+
+
Ariadaha Mousumi
+
+
+
+
+
Sealdah Milan Sangha
+
+
+
+
+
Dum Dum Tarun Dal
+
+
+
+
+
Hatibagan Sarbojonin
+
+
+
+
+
Nabarun Sangha
+
+
+
+
+
Salkia Tarun Dal
+
+
+
+
+
Sikdarbagan
+
+
+
+
+
Haridevpur Ajeya Sanghati
+
+
+
+
+
Barisha Tapoban Club
+
+
+
+
+
Kumartuli Park
+
+
+
+
+
Sreebhumi Sporting Club
+
+
+
+
+
Ghas Bagan
+
+
+
+
+
Haridevpur 41 Pally
+
+
+
+
+
Tangra Golpara Sarbojanin Durgatsab
+
+
+
+
+
Badamtala Ashar Sangha
+
+
+
+
+
Kabiraj Bagan
+
+
+
+
+
Mudiali Club
+
+
+
+
+
Maddox Square
+
+
+
+
+
Patuli Central Club
+
+
+
+
+
AK Block
+
+
+
+
+
Dum Dum Park Tarun Sangha
+
+
+
+
+
Arjunpur Amra Sabai Club
+
+
+
+
+
Behala Sree Sangha
+
+
+
+
+
21 Pally Sarbojanin Durgotsab
+
+
+
+
+
Keyatala Mananya Sangha
+
+
+
+
+
Sovabazar Beniatola
+
+
+
+
+
Haridevpur New Sporting Club
+
+
+
+
+
Janmangal Samiti
+
+
+
+
+
Vivekananda Sporting Club
+
+
+
+
+
Ekdalia Evergreen Club
+
+
+
+
+
Lalabagan Nabankur
+
+
+
+
+
Suruchi Sangha
+
+
+
+
+
Nalin Sarkar Street Sarbojanin Durgotsab
+
+
+
+
+
Dum Dum Park Sarbojanin
+
+
+
+
+
Entally Matribhumi
+
+
+
+
+
Baghbazar Sarbojonin Durgotsab & Exhibition +
+
+
+
+
+
Ahiritola Yubak Brinda
+
+
+
+
+
Garia Nabadurga
+
+
+
+
+
Behala Roy Barir Durga Puja
+
+
+
+
+
Belgharia Bani Mandir
+
+
+
+
+
Hospital Para Apanjan Sangha
+
+
+
+
+
Dum Dum Park Bharat Chakra
+
+
+
+
+
Tangra Horisobha Math Sarbojanin Durgotsab
+
+
+
+
+
Haridevpur Vivekananda Park Athletic Club
+
+
+
+
+
NewTown Sarbojanin
+
+
+
+
+
Hindustan Club
+
+
+
+
+
Mohammed Ali Park
+
+
+
+
+
Dakshin Kolkata Sarbojanin Durgotsab
+
+
+
+
+
Rammohan Sammilani
+
+
+
+
+
Jagat Mukherjee Park
+
+
+
+
+
Mukundapur Sarbojonin
+
+
+
+
+
Shibmandir Sarbojanin Durgotsab
+
+
+
+
+
Santoshpur Lake Pally
+
+
+
+
+
Karbagan Sarbojanin
+
+
+
+
+
Nepal Bhattacharjee Street
+
+
+
+
+
Khidirpur Pally Saradiya
+
+
+
+
+
Laketown Adhibasi Brinda
+
+
+
+
+
Golden Arrow Club
+
+
+
+
+
Tarun Matri Sevak Samity
+
+
+
+
+
66 Pally Club
+
+
+
+
+
Shibpur Sastitala Baroary
+
+
+
+
+
Haridevpur Adarsha Samiti
+
+
+
+
+
Hajra Park
+
+
+
+
+
Ballygunge Cultural Association
+
+
+
+
+
Kumartuli Sarbojanin
+
+
+
+
+
Shyam Square
+
+
+
+
+
Entally Udayan Sangha
+
+
+
+
+
Sura Sarbojanin Durgotsab
+
+
+
+
+
Ultadanga Pallyshree
+
+
+
+
+
Haridevpur Vivekananda Sporting Club
+
+
+
+
+
Bata Maidan
+
+
+
+
+
Babubagan (Dhakuria Sarbojanin)
+
+
+
+
+
Wellington Nagarik Kalyan Committee
+
+
+
+
+
Mandirtala Sarbojanin Durgotsav Committee
+
+
+
+
+
Anandin (Harinavi)
+
+
+
+
+
Singhi Park
+
+
+
+
+
Sevak Sangha
+
+
+
+
+
Santoshpur Trikon Park
+
+
+
+
+
Hatkhola Gossain Para
+
+
+
+
+
Salkia Chatra Bayam Samity
+
+
+
+
+
Falguni Sangha
+
+
+
+
+
Santoshpur Avenue South Pallymangal Samity
+
+
+
+
+
Sobhabazar Rajbari
+
+
+
+
+
Rabindra Nagar Sporting Club
+
+
+
+
+
Swapnar Bagan
+
+
+
+
+
Salt Lake AE Block - Part 1
+
+
+
+
+
Sealdah Athletic Club
+
+
+
+
+
Dumdum Malpally Sarbojanin Durgotsab
+
+
+
+
+
Friends Union
+
+
+
+
+
College Square
+
+
+
+
+
Palli Mangal Samiti
+
+
+
+
+
Hatibagan Nabin Pally
+
+
+
+
+
Bowbazar Friend's Society
+
+
+
+
+
Kidderpore 75 Pally
+
+
+
+
+
Jodhpur Park
+
+
+
+
+
Suhud Sangha
+
+
+
+
+
Japur Byayam Samiti
+
+
+
+
+
68 Pally
+
+
+
+
+
Venus Club
+
+
+
+
+
Mohanbagan Sarbajanin
+
+
+
+
+
Lake Youth Corner
+
+
+
+
+
Netaji Jatiya Sebadal
+
+
+
+
+
Shyama Pally Shyama Sangha
+
+
+
+
+
Pratapaditya Road Tricone Park
+
+
+
+
+
Chakraberia Sarbojanin
+
+
+
+
+
Park Circus - Uddipani
+
+
+
+
+
26 Palli
+
+
+
+
+
95 Pally
+
+
+
+
+
Hari Ghosh Street 17 Palli
+
+
+
+
+
Ariadaha Jubak Sangha
+
+
+
+
+
Deshapriya Park
+
+
+
+
+
Netaji Nagar
+
+
+
+
+
Hindustan Park Purbachal Club
+
+
+
+
+
Panditia Puja Samiti
+
+
+
+
+
Salt Lake FD Block
+
+
+
+
+
Bandhab Sammilani
+
+
+
+
+
Milani Paikpara
+
+
+
+
+
Mitra Sangha Durgotsab
+
+
+
+
+
Ballygunge Palli
+
+
+
+
+
Laketown Nutan Palli Pradeep Sangha
+
+
+
+
+
Golmath Durgapuja Samiti
+
+
+
+
+
Adi Lake Palli
+
+
+
+
+
Ahiritola Sarbojanin Durgotsab B K Pal Park
+
+
+
+
+
Santoshpur Agragami
+
+
+
+
+
Bhawanipur Kishor Sangha
+
+
+
+
+
Naisha Prohori
+
+
+
+
+
Barisha Udayan Palli
+
+
+
+
+
Barisha Yubak Brinda
+
+
+
+
+
Nabarag
+
+
+
+
+
Salt Lake BE East
+
+
+
+
+
Howrah 6 Palli
+
+
+
+
+
Sovabazar Sarbojanin
+
+
+
+
+
Rupchand Mukherjee Lane Sarbojanin
+
+
+
+
+
Manoharpukur Sarbojanin Durgotsab
+
+
+
+
+
74 Pally
+
+
+
+
+
Sitalatala Kishore Sangha
+
+
+
+
+
Olabibitala Sarbojanin
+
+
+
+
+
Behala Adarsha Pally
+
+
+
+
+
Beadon Street Sarbojanin
+
+
+
+
+
Krishna Bagan Naba Jiban Sangha
+
+
+
+
+
Salt Lake AD Block
+
+
+
+
+
Udayan Khidirpur
+
+
+
+
+
Chittaranjan Sangha
+
+
+
+
+
Prafulla Kanan Adhibashi Brindo (Paschim)
+
+
+
+
+
Kidderpore Bayam Samiti
+
+
+
+
+
19 Palli
+
+
+
+
+
Tala Dakshin Pally Durgotsab
+
+
+
+
+
Prafulla Kanan Balak Brinda Club
+
+
+
+
+
Sammilita Lalabagan Sarbojanin
+
+
+
+
+
Amherst Row Sarbojanin Durgotsab
+
+
+
+
+
Mukul Sangha
+
+
+
+
+
Salt Lake BJ Block
+
+
+
+
+
Hindustan Tarun Sangha
+
+
+
+
+
Naskarpur Sarbojanin
+
+
+
+
+
Bengal United Club
+
+
+
+
+
Sahitya Parishad Sarbojanin Durgotsab
+
+
+
+
+
Agradut Uday Sangha
+
+
+
+
+
Monotosh Smrity Sangha
+
+
+
+
+
Barisha Tarun Tirtha
+
+
+
+
+
Bidyasagar Udyan
+
+
+
+
+
Kabitirtha
+
+
+
+
+
Goabagan Sarbojanin Durgotsab Samiti
+
+
+
+
+
Abasarika Club
+
+
+
+
+
Shunra Palli
+
+
+
+
+
Behala Agradut Club
+
+
+
+
+
20 Palli
+
+
+
+
+
Bagmari 14 er Pally
+
+
+
+
+
Barisha Youth Club
+
+
+
+
+
Kata Pukur Durga Puja
+
+
+
+
+
Padmapukur Youth Association
+
+
+
+
+
Pathuriaghata Pancher Pally
+
+
+
+
+
Tarun Sangha
+
+
+
+
+
Nagarbazar Sarbojonin
+
+
+
+
+
Agradut Club
+
+
+
+
+
Khidirpur Jubogoshthi
+
+
+
+
+
Kidderpore Sarbojonin Durgotsav
+
+
+
+
+
Ramdulal Sarkar Street
+
+
+
+
+
Brindaban Matri Mandir
+
+
+
+
+
Bidhan Sarani Atlas Club
+
+
+
+
+
Sunday Club Sarbojonin
+
+
+
+
+
Triangular Park Sarbojanin
+
+
+
+
+
Hari Ghosh Street Sarbojonin
+
+
+
+
+
Tarun Sporting Club
+
+
+
+
+
Dilip Smriti Sangha
+
+
+
+
+
Salt Lake AE Block - Part 2
+
+
+
+
+
Pallibashi Durgotsab Committee
+
+
+
+
+
Tarun Dal
+
+
+
+
+
Panditiya Sandha Sangha
+
+
+
+
+
Friends Union
+
+
+
+
+
Rajdanga Amra Kajan Kalyan Samiti
+
+
+
+
+
Udyami Yubak Brinda
+
+
+
+
+
Milan Sangha
+
+
+
+
+
Simla Byayam Samity
+
+
+
+
+
Battala Uday Sangha
+
+
+
+
+
Lake Terrace Dakshinee Sangha
+
+
+
+
+
Debdaru Fatak
+
+
+
+
+
Salt Lake BE Block - Part 2
+
+
+
+
+
Simla Sporting Club
+
+
+
+
+
Kailash Bose Street Sarbojanin
+
+
+
+
+
Ballygunge Purba Pally
+
+
+
+
+ + + + + +
+ + + + + + + + + + + +
+
+
+
+

+
+ +
+
+ + +
+
+
+ Close +
+
+ +
    +
+
+
+
+
+
+
+
+ +
+
+
+ Okay +
+
+
+
+
+
+ +
+
+
+ Cancel + Okay +
+
+
+
+
+
+ +
+
+
+
+
+ Close + +

Pandal Hopper can show you your location as a blue dot on the map. If you turn it on, your browser + may ask you for your permission.

+
+
+
+ +
+
+

After turning it on above, if you can't find the blue dot, try one of these buttons:

+ +
+
+
+
+
+ +
+

Welcome to the new and improved Durga Puja Pandal Hopper web site!

+

Please watch the tutorial + video.

+

Please try out the new features for 2015:

+
    +
  • You can add pandals yourself.
  • +
  • You can upload your own photos.
  • +
  • Each user has a photo page.
  • +
  • Each pandal has a photo page.
  • +
+

If you have any feature requests, bug reports or comments of any kind, please send an email to banglatanglatools@gmail.com. We would love to hear from you!

+ Okay +
+
+
+
+
+
+ Close + +
+
+ +
+
Add Pandal
+
+
+
+
+
+
+
+ Close + +
+
+ Add Photo +
+ +
+
+
+
+
+
+ +
+ +
+
+
Your rating:
+
+
+
+ +
+ +
+ +
+ +
+ +
+
+
+
+

Log in to make a wishlist,
rate pandals and
upload photos +

+ Open login dialog +
+ +
+
+
+
+ + + + + + + +
+

loading

+
+ + + \ No newline at end of file diff --git a/external/pandalData.json b/external/pandalData.json new file mode 100644 index 0000000..dd343c9 --- /dev/null +++ b/external/pandalData.json @@ -0,0 +1,3 @@ +{ + "raw": "3LomadL6OK8GwPc7tOWtqZpH9TrXVM/2YufzAUlkRYHl2vKaFSsBQJ5WzFGyE+un69PEbg+hNfD=nqejdAi5ywmxvo7sgIXbhrM8TC=QSRjc4i1/03UVkpx4JeBNC0IDZ1jwePutWput4FDcmItLB5dtJ5K5U4f=IP60U5gxSO1RD9D0eNgykPgLekDSfr7xeodxSndti560U5ub1k7xSq1MTwubYHgx75K5U36c7/60U5gyS3dbY/1yV5K5Uw85i/8Cpw8cpw8F8vK=DFfC8BD0eBgvWqdbY/1yV5K5UiK0iF8F8FKCUF8C7ifC7wfwPIDqM/dtJ5K5U5KlNRuLMcYtHB7x+3VqrmRyBwVtSe1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U51ckzjS+Ff+rtf3uPM+Mi8xkcd3YnAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8F7W60U5gxSO1RD9D0e01trrgy+IYqeH1tWp7wDBD0erAxMwutAkbLerAykn1wD9D=JnfFUW8CU3KC8i8c74fcU360U5gyS3dbY/1yV5K5Uw85i/8=+3K=VP8cDi8c7i60U5gyTn1vk3AtYkDcmIK=In8F+WfCJ/fFuPfFVPK0PIDqM/dtJ5K5U5dbSyJvr01bku7tApMSNtflY4dxYnJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5MkYwtMMyA=DPtck4VvMdRxfWMMk3AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmI8C+W60U5gxSO1RD9D0e0gLfk7lMXAbDIVvk3ut4rD+/rgxYH75DBD0erAxMwutAkbLerAykn1wD9D=JnfcDW8=I48FI38=+/fCp/60U5gyS3dbY/1yV5K5Uw85i/8Cpw8F+38=+vfcJBD0eBgvWqdbY/1yV5K5UiK0iFK=Ji8c7L8CUvK=I460U5AbMH10D9D0eHMF1kJx/Md3W61vARMt3wYCNb8xSYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eCd3rmuMfau/ke1/kYjpO6JVMr7VOqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5U480PIDxWrgtV5K5U5MyMB1tWquter1vSnD5PIDxSv1ber1vMz7xS3dtWqDcmIf0i/KCuFfF+iK=DPK=u4fcIBD0eBubYHAlMp1RD9D=Dw6cVWf=JF8FVBD0eBgvWqdbY/1yV5K5UiK0iFK=V3fcIi60U5AbMH10D9D0eR8=MMYV467xkeR34VMCuOjVTrgyrND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eKRtrlfMpwC3k57tfVK+rS8CfygvYLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U48CuBD0enut/kDcmIDpekdySBuRNKAbYrg5N+utP560U5ub1k7xSq1MTwubYHgx75K5U36cVL8CIwK=+/8cV/fF8w60U5gyS3dbY/1yV5K5Uw85i/8=U38=+BD0eBgvWqdbY/1yV5K5UiK0iF8cUwKC7BD0e/AtkpDcmIDcNxYMSzCq+FK=J/8MfkKV408SM97++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqr5MxkSC+/DAp4kKMSz7/8LjSkRdk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=+wK0PIDxWrgtV5K5U5VxSZ1ySn1v+ICxS5uRNM1ySWDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=JnfCJ48CD48FD4K=DF8=7L60U5gyS3dbY/1yV5K5Uw85i/8Cuv60U5gyTn1vk3AtYkDcmIK=In8FpPKCpW60U5AbMH10D9D0DwdqHOMxeYMSHoCMrV8=fwKtfDCkHND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ew7xHHVyMlgvS4gR/YbvAmjqf=MvYqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5UL8cDBD0enut/kDcmIDpSHdLkrAySnD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5U36cV48FIiK=IiK=IiK=IiKRPIDx4rAyk3AtYkDcmI8cDnfCDFfCuW8CV/85PIDx4ogxAHAlMp1RD9D=Ii6c8LKCDL8cVw8=VBD0e/AtkpDcmIDqm4jcS=b3V3KbU31kYLdt7/Vpfnut7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpYM1ke5RMkHdtTzjkerj+OCtt1oub7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=+LfwPIDxWrgtV5K5U5VvSOutmIVvM5dRNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5U36cVP8cUwKCIw8cUwKCIw85PIDx4rAyk3AtYkDcmI8cDnfC+/f5PIDx4ogxAHAlMp1RD9D=Ii6c8/fcJBD0e/AtkpDcmIDpOLYLrLdk1=Cqenukf6jV7FVyWcCM+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxrpCbMO1yYv7pHE8S+WCqYLg+HJYv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DFzRPIjweH10D9D=pv8wPIDxWrgtV5K5U5MySBuRNJubeXDSNwubY3ubp560U5ub1k7xSq1MTwubYHgx75K5U36cJvfcJP8FVPK=7L8CpF60U5gyS3dbY/1yV5K5Uw85iv8=IWfC+PKCJ3fCJBD0eBgvWqdbY/1yV5K5UiK0iFK=D4fFuvK=DFfC8BD0e/AtkpDcmIDcemY3OPdyYlVtTvRSfYRVSog/mwfk+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDq1x7t/dCvPFtqe9jSfkRyMW8VYHJV+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=+Ff5PIDxWrgtV5K5U5Rykn1lMFAySnDSNr7xBIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=Jnf=VLfcDvf=D/fFDwfFU3fRPIDx4rAyk3AtYkDcmI8cDnfC+Lfc74f=IF8RPIDx4ogxAHAlMp1RD9D=Ii6c8v8CI4fFpiK=8BD0e/AtkpDcmIDkIwCbS01yko8lSYuMenA+koMv41gM+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqSoAVI4Rx/OtcYrVSf4CVWXM=YECS+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DFzRPIjweH10D9D=+L60U5gxSO1RD9D0efdbYrgypIRvSndLMw1vScdyp560U5ub1k7xSq1MTwubYHgx75K5U36cJ3KCpw8CILf=pWKCpWKRPIDx4rAyk3AtYkDcmI8cDnfCIBD0eBgvWqdbY/1yV5K5UiK0iFKCJw8=8BD0e/AtkpDcmIDkDWfxYJMFM3jp4eASSvMbAJVtBOgV+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDp1ug+HY1yf4V/kBCMS180/rMMk9Yt7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+izRPIjweH10D9D=+F80PIDxWrgtV5K5U5MleH1yrr7x+IJtOrgyeo1yrrg5UmAvSFDSfrgt/HgySndRp560U5ub1k7xSq1MTwubYHgx75K5U36c8LfF7FfC8FfcIwfcDv85PIDx4rAyk3AtYkDcmI8cDnfC+Wf5PIDx4ogxAHAlMp1RD9D=Ii6c8/fC8P8RPIDqM/dtJ5K5U5VbNkAVTkMbkDRbHlVCYPt=S0jpOCVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5gSAJRkTtjkT4C0/EMyr0jt4wgMf6JRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8CJWKRPIDxWrgtV5K5U5VvTp1bN/75NCutrH10N=gv4ogqpIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=Jn8F7/60U5gyS3dbY/1yV5K5Uw85ivKCJWfFVL8FJF8CUPK0PIDx4ogxAHAlMp1RD9D=Ii6c8Lfc8i8=JwK=uL8CI360U5AbMH10D9D0e5d/M=MxSYClSrVbYVKViLuMT=1/eLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0emAMfK6tAEdxk5AVeRYtM06CMXKy1LD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5U4fCVBD0enut/kDcmIDkMPutWr1vSwdRNC7yTwAykn1wN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmIf0iFfcJ3f=J3f=J3f=J3f=VBD0eBubYHAlMp1RD9D=Dw6cJL8cu3K=V4KCJBD0eBgvWqdbY/1yV5K5UiK0iFK=u48CIifFDi60U5AbMH10D9D0evgbS/fS1YASHdttWVubMD1p3OuxSND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e=7FMiYVA81lHeMlkCMySMfkJF8/YLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kl3BDlB5dtJ5K5UwKRPIDxWrgtV5K5U5MySBuRN0ubeoAvSwdRDBD0erAxMwutAkbLerAykn1wD9D=Jn8FJv8=DPfC8P8Fp/fC8BD0eBubYHAlMp1RD9D=Dw6cuPfcI3fFpPf=u/fC+BD0eBgvWqdbY/1yV5K5UiK0iFfFu4K=7WfcJF8FIBD0e/AtkpDcmIDxI3Mp4mCLk36Vk3Y/DFgkfqt=10Y++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpJ37yH1RFpvYkkD7MYFdk13CSDiRk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DFzRPIjweH10D9D=+BD0enut/kDcmIDpSmdbeHAyTBuRNCube5gvHrgxknD+Y/7xAoAlfru5NCut/HAyp560U5ub1k7xSq1MTwubYHgx75K5U36c848=7vfcU/K=+w8FpF60U5gyS3dbY/1yV5K5Uw85i/KCJifFD3KC8F60U5gyTn1vk3AtYkDcmIK=In8FVL8C8WfCp4fwPIDqM/dtJ5K5U5dkSFRkMoRSAmfkS5VM8LVp1VjtYJAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5C3+4dbeKRM1ygLYSVcARCkYcg3f1VRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8CVv60U5gxSO1RD9D0e61tWpAt+IVvrrgqYHDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=Jn8cu/8Fu4KCVwK=u4KCVw60U5gyS3dbY/1yV5K5Uw85i3fF+WfC8PK=UW60U5gyTn1vk3AtYkDcmIK=In8FI4f=+F8FUw60U5AbMH10D9D0e5dFraVCScdSY51=NRM=1yCV/vu/HYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eHR+T1Vk1FM3TaVMMVY/M48LH/d+/qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5Ui8CDBD0enut/kDcmIDper1verjxSwDSNrgy4HD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iwfRPIDx4rAyk3AtYkDcmI8cDnfcU48cu/KRPIDx4ogxAHAlMp1RD9D=Ii6c8vfc7L8F+BD0e/AtkpDcmIDkNvCtMVJvWt7tTkASfdCpO=7SYMdL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxScR/A5dlASj=u48SfrjxYKuqYrdt7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=+/K0PIDxWrgtV5K5U5JvrkAy4rD+Sq7xSndRN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmIf0iw8FULKC+PKCu3K=UWfcDBD0eBubYHAlMp1RD9D=Dw6cV4fcJv8CVLfCJLfcJBD0eBgvWqdbY/1yV5K5UiK0iF8F7F8c+FfF8FK=IL60U5AbMH10D9D0ep1breMyMWMxT8CpSYCM1Jj=k8gk1qD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e=1SG3CbH6fpY5RqHV1pkiY53/6V/LD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5UFfFDBD0enut/kDcmIDkf3ubYkD+ergxBIVySwdwNCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iw8CJvfcVW8Cp4fFJFK=8BD0eBubYHAlMp1RD9D=Dw6cJvfF7Pfcp38FVBD0eBgvWqdbY/1yV5K5UiK0iF8=IWf=J4f=u/60U5AbMH10D9D0eWf3/Hjxrw75/1JqARCbriYt/VALfLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e4MxuvYy/KjCNd8qkYACSrgykxC/NqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5UF80PIDxWrgtV5K5U5CtSndtfXAySBuRN=dySBAyS5utArg5N8gvrrDSNrAlYWD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iw8=U/8=VPfCU/8=VPfCU/60U5gyS3dbY/1yV5K5Uw85i/K=V460U5gyTn1vk3AtYkDcmIK=In8F7w85PIDqM/dtJ5K5U5V0/fMMI4733/gvkCVpPPMSSmV=1C1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57vDOYx16bvOV7y1qVF7iCc1X8cS1AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmI8CIF60U5gxSO1RD9D0e01trrgy+IJqMwgLfmdte3ut4rD+HrgxSXut4WutiIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmIf0i4KC7/fCpW8=VFfFD38=V/60U5gyS3dbY/1yV5K5Uw85i/8=8L60U5gyTn1vk3AtYkDcmIK=In8F8PK=UF60U5AbMH10D9D0ezCvf/7bkxjlULdw/R8y19M+YOtl1LD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ebfpexuLfCK+H5M3SYCLNpjVr1RlkLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8L3BDlB5dtJ5K5U48C7BD0enut/kDcmIDpeo7vMPAtO/75NVut45utArg5DBD0erAxMwutAkbLerAykn1wD9D=Jn8C7i8FI/f=+vfcuvfcuv60U5gyS3dbY/1yV5K5Uw85i/8CpwKCJwfF848CI360U5gyTn1vk3AtYkDcmIK=In8FIwK=8w8CJL8CI460U5AbMH10D9D0e8AyObRL7L7v16ttkYKMGLdLULglrND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eK1/1xdxSbC+YwuqfYR/fPYyHmgq1LD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kl3BDlB5dtJ5K5UFKCVBD0enut/kDcmIDpekdySBuRNKAbYrg5NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5U36c+LfcVi8FD4KCUw8CJW8RPIDx4rAyk3AtYkDcmI8cDnfCU4KCVifCI/60U5gyTn1vk3AtYkDcmIK=In8F+iKCu38F83KRPIDqM/dtJ5K5U51MeJYFUOAFAdRkriVMJPCqYz1FSe1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5gxeLCqH1gb19gLSzVkeq7LYWb/M/VRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmI8cU360U5gxSO1RD9D0eaubYwuRNCAbe/DSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=Jn8C7FK=IiK=IiK=IiK=IifRPIDx4rAyk3AtYkDcmI8cDnf=7PfFUWfcUv85PIDx4ogxAHAlMp1RD9D=Ii6c8LfFIPf=838c8BD0e/AtkpDcmIDk15JMTVCVkzgpHOJMSS7cJiY3MqAv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcrKuxTYutV/YSkptMfk7ce0VCei8l7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+wfwPIDxWrgtV5K5U5CxSXAySBuRNM1ySWutiIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmIf0i4fCVwfC+iKC8W8FpFKC8BD0eBubYHAlMp1RD9D=Dw6cJLf=+WKRPIDx4ogxAHAlMp1RD9D=Ii6c8vfcVP8RPIDqM/dtJ5K5U5j=fyCVrS8vBPfx84VvHHMv/BKCuLAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5RyrOfkuwgqecfbNbVMApAlDFflf4JRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8C+P60U5gxSO1RD9D0e01trrgy+IJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=Jn8CDLfF7LfF7LfF7LfF7L60U5gyS3dbY/1yV5K5Uw85i/8=V4f=DLfc8WK=u360U5gyTn1vk3AtYkDcmIK=In8F+3fC8W8C7/fCU/KRPIDqM/dtJ5K5U5C+1duFr9fxSB7p1RVCNaMt/VVxWCAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5b3SF7CAy7CetCl1MMSH0d34C6VkdJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8C+/f0PIDxWrgtV5K5U5YvT/7xk51beHuRNCube5utHrgxknD+Y/7xAoAlfru5NEDSNwutYr7qfmutWHD5PIDxSv1ber1vMz7xS3dtWqDcmIf0i48cVBD0eBubYHAlMp1RD9D=Dw6cVWf=JifC8Lf=JBD0eBgvWqdbY/1yV5K5UiK0iFfFp4K=+WKCuBD0e/AtkpDcmIDqMvMcNwjSH+uMk9AkJP1kM/ASfffp+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxMMMq1RC+Hwdcu/8kfbAbAnd=Anjb7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+izRPIjweH10D9D=DLf0PIDxWrgtV5K5U5RvSndLMw1vScdypIRqM5utBIJqeHgxYrD5PIDxSv1ber1vMz7xS3dtWqDcmIf0i48=74f=DifC74f=DifC7BD0eBubYHAlMp1RD9D=Dw6cVLKCVWKRPIDx4ogxAHAlMp1RD9D=Ii6c8ifFIP85PIDqM/dtJ5K5U5JtrDdVANf+r3tcDLMyrDjlfrMLftVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5bvOWMpk1J/NfutHcVbAMuxmvM+/1JRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8CIW60U5gxSO1RD9D0eJAbe5utfmutPIVvrrdLYHDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=Jn8RPIDx4rAyk3AtYkDcmI8cDnfCU/8RPIDx4ogxAHAlMp1RD9D=Ii6c8iKC+WK0PIDqM/dtJ5K5U5Y5/v7/TxKyrRfCrWVM8/CxHKRlYw1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57FAeVpGvYVfXRpkXM+T8CpTkdqA5AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8FDv60U5gxSO1RD9D0e8utOkD+Ar7xYkg5NJ1tTPgyVq7wNN7LfouvkrAykog5DBD0erAxMwutAkbLerAykn1wD9D=Jn8RPIDx4rAyk3AtYkDcmI8cDnfCUvfc+FKCJ3K0PIDx4ogxAHAlMp1RD9D=Ii6c8/fcV/K=VPf=7BD0e/AtkpDcmIDcSwRvH3bLY6RLee8Me+d/emCpH8Jv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDx3PCLNu8MYRYMkmfMYWtV4mjpAxtq7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=pvKRPIDxWrgtV5K5U5JxMB1vScdykWuRNCutYmuberg5N+AbequbYFutD560U5ub1k7xSq1MTwubYHgx75K5U36cUWfFDw8cDw8cDw8cDw85PIDx4rAyk3AtYkDcmI8cDnfcULfCD/K0PIDx4ogxAHAlMp1RD9D=Ii6c8i8FVFKC7BD0e/AtkpDcmIDqfpYvADA+mWb/kr8/Swd34efcA87/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpeOdF+/73/BMtedgMYO6tHNt=1/fS+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=+F8wPIDxWrgtV5K5U58cVIVySBglp560U5ub1k7xSq1MTwubYHgx75K5U36cUW8=838Fp4fC838Fp4fRPIDx4rAyk3AtYkDcmI8cDnfC8W8FUF8=+L8CUF60U5gyTn1vk3AtYkDcmIK=In8FDvfC8PfC+F8c83fRPIDqM/dtJ5K5U5fR/w1+W4dtr9tcr8VMMeApHRft43AwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5dv+4fpMzd+IvRqSaVCAcg+4dYV16JRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CkT60NsDxkpDcmI8cUv60U5gxSO1RD9D0el7xMkg5NNAxMnAtVIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=Jn8=uL8cDw8cDw8cDw8cDw60U5gyS3dbY/1yV5K5Uw85i3KCJ/f=JL8CDW60U5gyTn1vk3AtYkDcmIK=In8FI48CUPf=uFKRPIDqM/dtJ5K5U5gqSS7tYtft1l7yM+V/A5ukebAC8iJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5CyrZ1pPLfqfrfpSSV3Y+ttSwfxOOVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8Cp360U5gxSO1RD9D0eVdyVIJxMn1vSBD+eojb8IMlerdtWHgx7IJbfFgvfHubYHgvi560U5ub1k7xSq1MTwubYHgx75K5U36cUv8cVBD0eBubYHAlMp1RD9D=Dw6cV4fFu4fCVwKCIBD0eBgvWqdbY/1yV5K5UiK0iFf=+F8C8/fcUw60U5AbMH10D9D0eaClAMVyeSu3J/Rx4RCMez6MknJ3/ND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e8RbrVM/18Vy1wutfCAxrRMVkWgv4qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5UL8=7BD0enut/kDcmIDkNrgy4WDSMngxSWutiIVvSOdbYWD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iPfCV/fCV/fCV/fCV/fCVBD0eBubYHAlMp1RD9D=Dw6cJLK=+Lfc738wPIDx4ogxAHAlMp1RD9D=Ii6c838cUwfcUwfC+BD0e/AtkpDcmIDcrrt+ADJv4u7lNdM/feMyOwdb+WVS+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkrFJb7PfqIWA=A8V/8PJMe+8qMPVk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=VP60U5gxSO1RD9D0e01t4HutAmubYrD+WruxSOdt4rg5DBD0erAxMwutAkbLerAykn1wD9D=Jn8=VBD0eBubYHAlMp1RD9D=Dw6cVvfC+48cUL8CVBD0eBgvWqdbY/1yV5K5UiK0iFKCVW8FJvfcJL60U5AbMH10D9D0e+1pStdF1+dLDv1bNYRx+iACpiCtMND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0epuR/0Ryf+u3WoVkTV1yHxRtO5Aw/qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5U48c8BD0enut/kDcmIDkfkgykO7lMwDSNrgy4WD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iP8FuLKCu/8FuLKCu/8F7BD0eBubYHAlMp1RD9D=Dw6cVPfC+BD0eBgvWqdbY/1yV5K5UiK0iFfcI48=8BD0e/AtkpDcmIDqV4JteC8bMPV3Hpd/Y+RyuPdcMSYL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpT=Rx7wKM8/8=Yof/f67vkWMkYVJt7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+i80PIDxWrgtV5K5U5Jter7vSwDSfr7xeodxTndti560U5ub1k7xSq1MTwubYHgx75K5U36cUF8CIw8C8w8cDLK=p485PIDx4rAyk3AtYkDcmI8cDnfCDLfcJLf=DWfF+Pf5PIDx4ogxAHAlMp1RD9D=Ii6c83KCUL8FDPKC+3KCVBD0e/AtkpDcmIDkefCCARtbYqjxTf8kfpjx/rMSMdRt7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDprqVvH61cM3dcAXgMfBuvTatR3P8k+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=DL8wPIDxWrgtV5K5U5JxSXAtPIJxSquti560U5ub1k7xSq1MTwubYHgx75K5U36cUwKCuifFVBD0eBubYHAlMp1RD9D=Dw6cVwfcuWKRPIDx4ogxAHAlMp1RD9D=Ii6c83K=UWKRPIDqM/dtJ5K5U5C3T/YpOrVkYitpMqV/rKM+Of8qrMVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5AvWLRcuw7yrYfqeeV/rijceyucf5JRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8ceT60NsDxkpDcmIfc+BD0enut/kDcmIDpekgykr1vrrAy+I8F8IVySBgyk5ubfmdRN07xkn1y+560U5ub1k7xSq1MTwubYHgx75K5U36cU4K=uP8C+W8=JLfc+W8RPIDx4rAyk3AtYkDcmI8cDnfCuifFVi8FIPf0PIDx4ogxAHAlMp1RD9D=Ii6c8W8CJ4fc8/f=IBD0e/AtkpDcmIDck6u/1X7SfJ7LekYkf0Yyp3VvHLgv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpeM8FDOgy/dKlNiAMeqbFA1gkfxKM+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DPzRPIjweH10D9D=8W60U5gxSO1RD9D0e6ubfmdRN0gLfkD+4rgxV560U5ub1k7xSq1MTwubYHgx75K5U36cU48=U38CIwf=JWf=p/60U5gyS3dbY/1yV5K5Uw85i/KC+PK=7v8cIi8CIw60U5gyTn1vk3AtYkDcmIK=In8FuiK=Dv8Cpw8c8i8RPIDqM/dtJ5K5U5fvHz7V1WfVrO7pk+V/raRtAWVx7wVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5f/+OfkMY6bNfuprWVkkL8vH4MtfwAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8CUL60U5gxSO1RD9D0e0ubeH7vrrD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5U36cUP8cpiKC+PKCJLfCpiKCVBD0eBubYHAlMp1RD9D=Dw6cJi8C+WKRPIDx4ogxAHAlMp1RD9D=Ii6c848FDP85PIDqM/dtJ5K5U57+S0jMYyY/1nfp/+MS1B1LYRJc+vJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5VcY=RtHxAV/9tbrFVCeC8lNiJtHuAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8cVBD0enut/kDcmIDkfrgqYo7vIICtk37x+IVLS/ubekD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iP8=+LfC8L8=8L8=8L8=8BD0eBubYHAlMp1RD9D=Dw6cVvfCpP8RPIDx4ogxAHAlMp1RD9D=Ii6c8vfC+Wf5PIDqM/dtJ5K5U5YlSNj=8wCFeOfVWrM=r68Ve37+MHAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5MpO+txYLdt7i7xTKVtJP1VODR=Uw1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CrT60NsDxkpDcmI8F7L60U5gxSO1RD9D0eDut4Fdyk5utArg5NCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iP8=UW8cVW8cVW8cVW8cuBD0eBubYHAlMp1RD9D=Dw6cViKCIifCVwfFDBD0eBgvWqdbY/1yV5K5UiK0iFfF7/8FJifcJv60U5AbMH10D9D0ei7vAfYSNejk1wtkSVdxTi1+AKRpALD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eJdvrnu/YPdMeeKMYRupe0JpJW8+SLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5Uw8CJBD0enut/kDcmIDc7LDSNrgy4HD5PIDxSv1ber1vMz7xS3dtWqDcmIf0iP60U5gyS3dbY/1yV5K5Uw85i/8=uwfcD/60U5gyTn1vk3AtYkDcmIK=In8FuL8F+L60U5AbMH10D9D0elfMk6Vx4fjyVLMpOC6brPfbfE8pfYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ec7bA4tl1FV+AoRyfCf=8FAS1q7SkqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U48=8L60U5gxSO1RD9D0e6ut4H1vrrA0Nfdt4rg5NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5U36cUBD0eBubYHAlMp1RD9D=Dw6cVwf=+/fCJ4KC7BD0eBgvWqdbY/1yV5K5UiK0iFf=ULK=+i8CVF60U5AbMH10D9D0ewA+YR1cJLRCMejVfC8LVOj=UvVykYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0D46tBOJtTJMFer1vYR8teLdlfeCCAND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U48FI/60U5gxSO1RD9D0e=dyTw1ter1vSnDSfr7xeodxSndtiIYlMw1vT37vS5DSfrgtk3jRDBD0erAxMwutAkbLerAykn1wD9D=Jn80PIDx4rAyk3AtYkDcmI8cDnfCIFf=JLK=7/KRPIDx4ogxAHAlMp1RD9D=Ii6c8v8F+i8FuwfRPIDqM/dtJ5K5U5KyAvfcfNd3TZRqDLM+r9YvrWJFrXVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5j+f+dCkcub7P7tG3VVrLCpeVCSTDJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8ceT60NsDxkpDcmI8CVvK0PIDxWrgtV5K5U5YySX7vrHgqNr7x+IYlMw1vT37vrru5DBD0erAxMwutAkbLerAykn1wD9D=Jn80PIDx4rAyk3AtYkDcmI8cDnfc+F8F+L8wPIDx4ogxAHAlMp1RD9D=Ii6cJw8C+LfC+BD0e/AtkpDcmIDcYCu3HwVlfifCY5CkYqMlIOjye3KV+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpSFfxfNu/N6tMH=f/Sv7lrYfCMlJV+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=p460U5gxSO1RD9D0eCutWq7xSOdRDBD0erAxMwutAkbLerAykn1wD9D=8nKCIP8=83fFDw8cDw8cDw8wPIDx4rAyk3AtYkDcmI8cDnfCpPK=+v60U5gyTn1vk3AtYkDcmIK=In8Fp/8=7P8RPIDqM/dtJ5K5U5txflYMNv8/el7y49MluWYMNofk1nAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5jV/rutIiMqrH7++4MSNFY3r5d/NmAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8CU3K0PIDxWrgtV5K5U5JbeHutYrdy+ICtT/7LMOdRDBD0erAxMwutAkbLerAykn1wD9D=8nKCuvfcuvfcuvfcuvfcuL60U5gyS3dbY/1yV5K5Uw85ivfcuF8c8i8C8360U5gyTn1vk3AtYkDcmIK=In8Fu/8FUwK=Jif0PIDqM/dtJ5K5U57tHHRcIOdtAOtbrBMl+iCvY4A+AH1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5dFkNRLe0A+fD7yMOVMN=MvHlCkkEVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIf=+F60U5gxSO1RD9D0eC1tSB1ySmD+/HgySnDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=8nKCVi8F8F8F8F8F8F8F8FfRPIDx4rAyk3AtYkDcmI8cDnfC7w8=I38wPIDx4ogxAHAlMp1RD9D=Ii6c8L8CJ/K=VBD0e/AtkpDcmIDpMbgpWvCvflty+Lg/fD8pTn8V4oRS+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcIvgbkPMvkv1yD/6MedCqARKMuOut7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=uBD0enut/kDcmIDpY/gRN+At3IMySwAtiIYySBD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiWfCDFfcDi8cVLK=ILfCDBD0eBubYHAlMp1RD9D=Dw6cu48CDBD0eBgvWqdbY/1yV5K5UiK0i38CIwKC7BD0e/AtkpDcmID5/6VyJWCpAXfb+P7M+LdbS07/Yrut7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxAYtkYCRbNWAVO5A/f8j+/lVy4dRL7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=8v60U5gxSO1RD9D0eDubYHuxSqutiIVvSwuxTZgvWHg5DBD0erAxMwutAkbLerAykn1wD9D=8nKCJLf=JF8=D/8cJwfCU38wPIDx4rAyk3AtYkDcmI8cDnfCp38cDFKC8PfCD4fwPIDx4ogxAHAlMp1RD9D=Ii6c8L8CpwfcUwfc+ifC8BD0e/AtkpDcmIDxWfft1VJkAFjlNbd/S81CrqgSNwVl7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqkB1xH/f/Ncd+4tjkf61ke6gv7Lub7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=DL80PIDxWrgtV5K5U5CxS5ube/g5NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6cpFKCI4f=I4f=I4f=I4fRPIDx4rAyk3AtYkDcmI8cDnfCuifCU460U5gyTn1vk3AtYkDcmIK=In8F+4fFpi60U5AbMH10D9D0eWRkAwVt1pCprafxWCV3H8CSTwjCYLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e+7+J/7VHuCtO5AVYCtxHYgbIFRtWYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fl3BDlB5dtJ5K5UwfFDBD0enut/kDcmIDkfrgyOHuRNVube/g5N+utP560U5ub1k7xSq1MTwubYHgx75K5UF6cpFfFVBD0eBubYHAlMp1RD9D=Dw6cVWfFuP8RPIDx4ogxAHAlMp1RD9D=Ii6c83fc+WKRPIDqM/dtJ5K5U5YpME7lDwf+/LfyWYVFV/tkrS8prpVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U51MfMd3H/MSftCST0VCkC8+rXd+AcVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CYT60NsDxkpDcmI8c8460U5gxSO1RD9D0eCdtOpube5utArg5DBD0erAxMwutAkbLerAykn1wD9D=8nKC8vf=U/8=V/K=JWfCUP8wPIDx4rAyk3AtYkDcmI8cDnfCpvfcu38C7wfc+F60U5gyTn1vk3AtYkDcmIK=In8F7w8CUPf=DFfFIwfwPIDqM/dtJ5K5U5VlI4dv1St+1tfbfuVM1Sd3kq7pTWAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U58beHJpMFMxrug/HkVc+/fVSN83TRAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmI8CUw60U5gxSO1RD9D0eDubeH1yMv7lMwD+SZ1bkrDSfrgxAmubYHD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiW8FVL8CJwK=VL8CJwK=uBD0eBubYHAlMp1RD9D=Dw6cJi8=pBD0eBgvWqdbY/1yV5K5UiK0iF8F7L60U5AbMH10D9D0evMyfV8MSdf+u/7CYYVtYmC3ONC=YqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eYgpM0Jpi36MJ/upTCVbSxMLAKKy1ND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5UL8=uBD0enut/kDcmIDper7xkFdy+IMySPgverg5N=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI8wiW8c7PK=8F8F8F8F8F8F8/60U5gyS3dbY/1yV5K5Uw85i3fFuvf=D/K=7460U5gyTn1vk3AtYkDcmIK=In8F+PfC8wfC8wf5PIDqM/dtJ5K5U5dCSZ1lmvgvWLtkN0VMHtAxWZ6bHZAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5Rl1E8FAyV+kHRFM1VMAfuVA5Ac1P1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8C8BD0enut/kDcmIDpO/gtSwAlMBdRNJubeXD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiW8c8WK=VF8=7v8c+vfF+BD0eBubYHAlMp1RD9D=Dw6cVWKC+BD0eBgvWqdbY/1yV5K5UiK0iFfc+i8=+BD0e/AtkpDcmIDkAkM+eEVtOOglSZd/Ye7lHFC/Iwu/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcuOV+foMVT6fVH1tkSZglMOMyf=At7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=Di60U5gxSO1RD9D0eC7xMkuxr/gtpIVLNo7qYHgx7IJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8nK=pL8FJ38CDwK=838F+W60U5gyS3dbY/1yV5K5Uw85i/KCIW8Fpi60U5gyTn1vk3AtYkDcmIK=Inf=UF8=8LK0PIDqM/dtJ5K5U5gMAE8L7ifcAN7lAvM+ANtM8Fjy8iVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5tcJw8brRMLf5Cy/fV/N9AbrnMFMz1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CrT60NsDxkpDcmI8F8BD0enut/kDcmIDpAmub8IJxSquti560U5ub1k7xSq1MTwubYHgx75K5UF6cILfRPIDx4rAyk3AtYkDcmI8cDnfCp4KCpW60U5gyTn1vk3AtYkDcmIK=In8FJFfcpL60U5AbMH10D9D0eoRkYrtCM5Avrr8STC7xM4dySCRbSLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DOMqMxuvJLfpBLAMSVMFr/6bIPgyHYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fl3BDlB5dtJ5K5U48=+BD0enut/kDcmIDprr7xkp1b1PAbDIf=+IVySBglp560U5ub1k7xSq1MTwubYHgx75K5UF6cIL8F7W8c+F8=JiK=V/KCJBD0eBubYHAlMp1RD9D=Dw6cJi8cIBD0eBgvWqdbY/1yV5K5UiK0iF8FIF8=8BD0e/AtkpDcmIDp45jtTuJ/TfYxSXMMfFb/N01lMuYy7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpekJbftupmLdSHo7S+P7xJwMMmF8p+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=Dv8wPIDxWrgtV5K5U5MySn1LerD+AoglNr7x+IVvSwuxTZutWHg5N+AbequbYFutD560U5ub1k7xSq1MTwubYHgx75K5UF6cI/fC8wf=ULf=ULf=ULf0PIDx4rAyk3AtYkDcmI8cDnfCVFf=pW60U5gyTn1vk3AtYkDcmIK=In8FpPfFU460U5AbMH10D9D0e6M3ku8bk6Vc1PRFYCYC1Mt=1RCxWND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e37xWNuLf1AtHeV/1Rjl1ydSf5VyWLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5U48CVBD0enut/kDcmIDper1ySOAySBuRNN7vrr75NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6cIwfCp38=DLKC+/8=+WfF8BD0eBubYHAlMp1RD9D=Dw6cV4fFpBD0eBgvWqdbY/1yV5K5UiK0iFf=8i8=8BD0e/AtkpDcmIDkewCLM0Yt4oKVHoV/f0YxDFCFrFfx7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpi3J3WHC/IWtlSmY/YyRL1MMR/CYV+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=IL60U5gxSO1RD9D0e6uteH7xSZD+er1vSnD5PIDxSv1ber1vMz7xS3dtWqDcmI8wii8Cp3f=J3f=J3f=J3f=JBD0eBubYHAlMp1RD9D=Dw6cVW8c7i8cp4KCDBD0eBgvWqdbY/1yV5K5UiK0iFK=+LK=pPKCV/60U5AbMH10D9D0ep8kHMCLr=R0/a1+ACdpA4Rx/eg/eqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0euu/f=jqrLMCk6AkrRM+e86CrKuFYYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5U48cVBD0enut/kDcmIDp//1ykrgypIJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8nK=+W8C8wfFUPKC7vfFUW8wPIDx4rAyk3AtYkDcmI8cDnfC+P8=pW60U5gyTn1vk3AtYkDcmIK=In8FJvK=Uw60U5AbMH10D9D0eu8lfcC/U47lkeupTVYtf8MqIwf/AYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eXj+41gxHqAbp3uMAYfyWZjVSP8vSND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5UWKRPIDxWrgtV5K5U5CtSp1yTiDSf4AtSw1RDBD0erAxMwutAkbLerAykn1wD9D=8nK=UL8=pifFu/f=8w8=pifRPIDx4rAyk3AtYkDcmI8cDnfCDvfCJ48CuFf0PIDx4ogxAHAlMp1RD9D=Ii6c8/f=p/8FVvfF7BD0e/AtkpDcmIDxYu8MkVjVTettSpMkYaY3e5KtY/g/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmID5/OCVAM8MN6CF136Me6bLf/R+SrCp+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+izRPIjweH10D9D=8i8RPIDxWrgtV5K5U5VyS3At4HD+fkgqYwutPIJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8nfF7ifC+wfc8WfcDFfFV460U5gyS3dbY/1yV5K5Uw85i3fFJwKCpi8CpF60U5gyTn1vk3AtYkDcmIK=In8FI38Cu4fFIPf0PIDqM/dtJ5K5U58vSYR5/vtyTugvHHVc1F7p/z1MYnVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5f/keAtfMMCN5RxHvV/fV7kDiRyiv1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIfFI/60U5gxSO1RD9D0eNRwN0gyTcdwDBD0erAxMwutAkbLerAykn1wD9D=8nfFVLfCIW8cI/fF+38cI/f0PIDx4rAyk3AtYkDcmI8cDnfCIiK=+FK=+/8Fp48RPIDx4ogxAHAlMp1RD9D=Ii6cJF8=IFf=pL8C8vK=8BD0e/AtkpDcmIDkkrYqkbRST=RVOljS+vfLA1gMHrtV+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxW5ukAvKVAFCxSttMeZtckO8xW0d++560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DPzRPIjweH10D9D=JBD0enut/kDcmIDpY/gRN+At3IVySwdwNVube/g5NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6c73fC+W8c738F7vf=+L8c8BD0eBubYHAlMp1RD9D=Dw6cu48=IBD0eBgvWqdbY/1yV5K5UiK0i38C8i8=8BD0e/AtkpDcmIDp1w73rmMxMc7=AqKSYiCpMFKC7w8t7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpH=Rqk5CCSnK+kFCMSo7kMNVw/ZYl7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=Dw80PIDxWrgtV5K5U5JbeZAtWPAbDIJt/wuRNCuterdRN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI8wiLf=+LK=VL8CJwK=VL8CJF60U5gyS3dbY/1yV5K5Uw85iv8cJF60U5gyTn1vk3AtYkDcmIK=Inf=D3fRPIDqM/dtJ5K5U5ASfdY=fFAxOrgFf/MyYujy8/g/ktVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5MC7O1xrBtCrn7MYHMlpFfxSv7kMB1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8C+w60U5gxSO1RD9D0e01trrgy+IVLek1RNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6c738=738=738=738=738=VBD0eBubYHAlMp1RD9D=Dw6cJWK=uPK=DPfFIwfcIBD0eBgvWqdbY/1yV5K5UiK0iF8cU3fC+L8F+v8FuBD0e/AtkpDcmIDpMK13kYg=kf8lNaRSYzJtkPtxMyVq7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxT48xYS1qHKdqS0MSSH1x/tASeygq7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=+vfwPIDxWrgtV5K5U58c+IVySBglpIVvSwuxTZutWHg5N+AbeqgLYFutD560U5ub1k7xSq1MTwubYHgx75K5UF6c7P8F7P8F7P8F7P8F7P8F7BD0eBubYHAlMp1RD9D=Dw6cVwKCUL8C+Wfc8BD0eBgvWqdbY/1yV5K5UiK0iFfcIif=pifFpi60U5AbMH10D9D0ekRxeuf+A8jp8vjS1YCpVLM=AXdyWND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e9MvJ/g+AWA+B3RpTCtSkc1cV4YMeYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U3f=uBD0enut/kDcmIDpOkjtS3ut4rD+/rgxSnjt+IVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiL60U5gyS3dbY/1yV5K5Uw85i/8CVifF+ifF+360U5gyTn1vk3AtYkDcmIK=In8Fu3fcVWfF84fwPIDqM/dtJ5K5U58LYndLMpJvWmuqHxVv+i1xTmu/NqAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5dxf1MM8Wtqew7S1oVVkxApJWJcIOJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8c7BD0enut/kDcmIDkfoAxS5ubHr75N01tWHubYogy+560U5ub1k7xSq1MTwubYHgx75K5UF6cui8F8F8F8F8F8F8F8F8FuBD0eBubYHAlMp1RD9D=Dw6cVWfCIBD0eBgvWqdbY/1yV5K5UiK0iFfc+4KCIBD0e/AtkpDcmIDxOlgxSv6VGF7+4Mg/DL1L7/8xVW7++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkIidbkkJqe41=MS1/eF7VI3K=IiKb7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=Jw80PIDxWrgtV5K5U5RySwdtYkAqN/75NK1b7IVLNo7qYHgx7IJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8nfc7vfCU3fcDWfcDWfcDWK0PIDx4rAyk3AtYkDcmI8cDnf=7Wf=+vfcpwfFUW60U5gyTn1vk3AtYkDcmIK=In8F8/fc7w8F8LfC+/KRPIDqM/dtJ5K5U5Y3WrMyTfRpfC7MA0M=UvMSDWJFMLJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5fbrx1y/E8=MPf31xVtSDVxOd7w/oAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8ceT60NsDxkpDcmI8FIw60U5gxSO1RD9D0eautWOutWqutPIVvSOdbYHD5PIDxSv1ber1vMz7xS3dtWqDcmI8wivfcuvfcuvfcuvfcuvfc7BD0eBubYHAlMp1RD9D=Dw6cV4K=8ifFVwKC+BD0eBgvWqdbY/1yV5K5UiK0iFf=+/fcVP8F7v60U5AbMH10D9D0efVV13fSfzjyO5u3MCdxSfgyH1CVrND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DO7pf3KMexCMk6jSeVVSe9jt4zYSSLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5UFfFJBD0enut/kDcmIDk1HAxMXutWrgxYrDSfPgLe3dtWqD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6cuvfcuvfcuvfcuvfcuvfcVBD0eBubYHAlMp1RD9D=Dw6cVifcDiK=UwKC+BD0eBgvWqdbY/1yV5K5UiK0iFfcuW8cpWfc+i60U5AbMH10D9D0eOKCSBf/riYvf4dSfRbLH08lk8ALYLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e6dSSZdq15g3kejyMR8=YdApeldLHqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8q3BDlB5dtJ5K5U48c+BD0enut/kDcmIDpMX1ySBdt+IYb1k7xAw1tMnD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6cu3KC+LK=7/8F83fCJw8=8BD0eBubYHAlMp1RD9D=Dw6cVw8C+Pf=8ifFpBD0eBgvWqdbY/1yV5K5UiK0iFfcuwK=7i8=DBD0e/AtkpDcmIDpAkf3JW7xOydC10gMeXfxT6d/MKu/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpY8M=rwAL+Wj+kkdMY/MqHx8SYyCk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=Vv60U5gxSO1RD9D0e8ut4ruxSqutiICxS5utWXAbD560U5ub1k7xSq1MTwubYHgx75K5UF6cu3fCpWKCpWKCpWKCpWKCVBD0eBubYHAlMp1RD9D=Dw6cViK=8P8RPIDx4ogxAHAlMp1RD9D=Ii6c8LfcpBD0e/AtkpDcmIDkk8g=SyV+O/uMkEd/+Pf3AZV/1EYV+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqkVtMSMMverAyeSjS8vuvfKKt1vtq7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+wKRPIDxWrgtV5K5U5VLMwAtfmdRNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6cu3f=+PK=DL8=DP8cUw8=JBD0eBubYHAlMp1RD9D=Dw6cVPKCuBD0eBgvWqdbY/1yV5K5UiK0iF8F8i8=+BD0e/AtkpDcmIDxTMC+O5ukePtkknAkeE7+Ok7CAbCk+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkpPjyWYCxTag3pLCSei7p4t1MfxVv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=8/60U5gxSO1RD9D0eKut4Hg5NCubeXubDIVLYw1tM3DSfr7xeodxSndtiIYlMw1vT37vS5D5PIDxSv1ber1vMz7xS3dtWqDcmI8wivf=Di8CVi8=uifFIF8=7BD0eBubYHAlMp1RD9D=Dw6cVWf=JPfCIw8CIvKCJBD0eBgvWqdbY/1yV5K5UiK0iFfFJFfc8Lf=DLfcIi60U5AbMH10D9D0eeCyeOR/Maf3eeMk1R1qSwYqDLJFYND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DWucekAtYVfSMP7veC8yr31tT5M/rLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8L3BDlB5dtJ5K5U3fCuBD0enut/kDcmIDpY/gRN+At3IVySwdwNCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiv8FuF8FIWfFVvKCJ3f=Jv60U5gyS3dbY/1yV5K5Uw85iv8=pw8F+w60U5gyTn1vk3AtYkDcmIK=Inf=+v8c7wf5PIDqM/dtJ5K5U5YxYqMb1NRSYKuqrbVkMPCvT1jtr+JRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5g3eO1kMbAyO4Rc1ZVkkDAMAH6Vfl1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIf=u360U5gxSO1RD9D0eSgqYrgy4WD+/rAleHuxr/gtp560U5ub1k7xSq1MTwubYHgx75K5UF6cuw8cIWfCuw8cIWfCuw8wPIDx4rAyk3AtYkDcmI8cDnfCVif=IFKC7/85PIDx4ogxAHAlMp1RD9D=Ii6c8vfFJF8C+i8CDBD0e/AtkpDcmIDkHx8V/y7kN=JVO5g/Suu/Sf1lpi8b7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcr/gvTku3HH1yTr7ke5KCSDC/e=MV+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=IBD0enut/kDcmIDper1vr5ubHr75NCube5gvHogxknD+Y/7xAoAlfru5UxD+Midyk5dbYHgvi560U5ub1k7xSq1MTwubYHgx75K5UF6cu48FIiK=IiK=IiK=IiKRPIDx4rAyk3AtYkDcmI8cDnfcU38wPIDx4ogxAHAlMp1RD9D=Ii6c8vfcUWf5PIDqM/dtJ5K5U5VSreMxivRkTafSNiMyAdASmi6bDwJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5bv4KAMetMM+Fgv1VMSTPYSu4KVr/JRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmI8FpP60U5gxSO1RD9D0eNdykwdbYogy+ItbM5utBIJqeHgxYrD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiv8C838cVW8cVW8cVW8cuBD0eBubYHAlMp1RD9D=Dw6cVWf=VvfCJv8F8BD0eBgvWqdbY/1yV5K5UiK0iFfcU38cJFf=8460U5AbMH10D9D0DwKMNRKMMJVyBLJxfY7LpigbNb8b1qD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eHYyu48=V4tbYwgpkC8krp6Ce47CMYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5Uwfc7BD0enut/kDcmIDpAr7xkrD+WruxSpAbequRDBD0erAxMwutAkbLerAykn1wD9D=8nfcUw8FVwf=8PfCV/fCV/f0PIDx4rAyk3AtYkDcmI8cDnf=uwKCpW60U5gyTn1vk3AtYkDcmIK=In8FIPK=pi60U5AbMH10D9D0ekK=1pMy7PKMTa8kfVAw3wYkeY7y4qD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ebASk97SrD6VfeJLSVJR/p7LYnfVSLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fl3BDlB5dtJ5K5U4f=uw60U5gxSO1RD9D0e01trrgy+IVxTWD+er7xkwD+Y/7xArDSN/dx+560U5ub1k7xSq1MTwubYHgx75K5UF6cuBD0eBubYHAlMp1RD9D=Dw6cVP8CVPf=8BD0eBgvWqdbY/1yV5K5UiK0iF8Cp48F+i60U5AbMH10D9D0D3dFAOgkfrY/f8VqMYCxYYYvAMdcMLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ef7yrcdt/u8bMrYbNCgbNVMcMoMtHYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8L3BDlB5dtJ5K5UFfCDBD0enut/kDcmIDpekgyAmubeHuRN0utWHD+/rgxYH75DBD0erAxMwutAkbLerAykn1wD9D=8nfCpLKC+vfcuvfcuvfcuvf0PIDx4rAyk3AtYkDcmI8cDnfcuv8C8wf=JW8wPIDx4ogxAHAlMp1RD9D=Ii6c8i8=IifF+LfRPIDqM/dtJ5K5U5VCM9AkVwAcD4f+1tVk1qRLfwYF1nJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5Y=Nk6V4kMLSw7MT/M+fRftmPg+4V1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8CUW8RPIDxWrgtV5K5U5RyTF7yk3utPIVySwuRNN7ySndxSnDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=8nfCp/8c8i8=p/8c8i8=p/60U5gyS3dbY/1yV5K5Uwf0i/f=8Wf=+Pf=D360U5gyTn1vk3AtYkDcmIK=7nK=VifFpi8cJF8RPIDqM/dtJ5K5U5VtS07yWwJ/N1gLrrVLpvA=AyM=f51wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5CtOCjVrSRy/D7p/4VkULVF14M53OAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CrT60NsDxkpDcmIfRPIDxWrgtV5K5U5YlMOD+Y/gRNJubeXD+emuberA0N=dySX7x+560U5ub1k7xSq1MTwubYHgx75K5UF6cVW8CuP8=VwKC+P8=VwKRPIDx4rAyk3AtYkDcmI8cDnfc+PfFU460U5gyTn1vk3AtYkDcmIK=Inf=+3f=pL60U5AbMH10D9D0ewtpfdC33v83raJ/YRt=klKVDFjCNND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ex7yS3MSru73/eR3kRgtMCA+S/KyrLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5UwfcJBD0enut/kDcmIDkYrgxAwuRNDgLeH7vT5dy+ICtS3d0NCube5gvHrgxknD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=8nfCIW8cuw8=pFfFDv8F7WfwPIDx4rAyk3AtYkDcmI8cDnfCV3KCp4K=p3f=ILf0PIDx4ogxAHAlMp1RD9D=Ii6c8W8C+/f=uP8CUL8CIBD0e/AtkpDcmIDkMej=MEfqMXY+HbR/YBtkGL7SAbft7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpk=8kTrbF+PVcuvtkSyJVT=ttM6M3+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=+Pf0PIDxWrgtV5K5U5RySwdtYkAqN/75Ntdb1kdvSnutWpuRNJubeXD+S3dy4kAykcD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6cVLf=u38=pvfFJWK=+460U5gyS3dbY/1yV5K5Uw85i3K=+4KCpBD0eBgvWqdbY/1yV5K5UiK0iF8F738=DBD0e/AtkpDcmIDq1tA34qYMStVcA/YSYz1qf1RFD/A/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpTDfvSVCqNyJxeud/f1fV1BRCAodx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=+/f=UBD0enut/kDcmIDpWkA/YoAviIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=8nfCV/fCV/fCV/fCV/fCV/f0PIDx4rAyk3AtYkDcmI8cDnfCIwfc73f0PIDx4ogxAHAlMp1RD9D=Ii6cJ/KCJWfFJBD0e/AtkpDcmIDqe=tlS57L7/13Hb8/f1AyHcMbeSMq7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqHqAtm3VFeDAp4ztSD3VpWZ131FMS+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=J4f5PIDxWrgtV5K5U5Rykn1lMFAySnD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6cV/8cpL8cDw8cDw8cDw85PIDx4rAyk3AtYkDcmI8cDnfCDP8C7WK=8if5PIDx4ogxAHAlMp1RD9D=Ii6c8v8=73fF7WK=DBD0e/AtkpDcmIDpf1Mp1LAb18M3OnfSYtVVrrYLA4j++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkrZ7p1nM/AVRcMqgMftdkfK6CIiK++560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=+v60U5gxSO1RD9D0efgvrrgt/k10NNgypIVySwdwDBD0erAxMwutAkbLerAykn1wD9D=8nfCJWKC+F8Cp3f=J3f=J3f5PIDx4rAyk3AtYkDcmI8cDnfC7L8cpLKC7Lf=8wf0PIDx4ogxAHAlMp1RD9D=Ii6c8v8=7LK=uF8c8wK=VBD0e/AtkpDcmIDxOOVlNXYCMldqNuYSeHC3pF1CfWVL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkri1q+vjCSxd+kE7SSD7v1HVyAeKb7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+izRPIjweH10D9D=738RPIDxWrgtV5K5U5YySX7vrHg5N6gv4XubYrDSfr7xeodxSndtiIYlMw1vT37vS5D5PIDxSv1ber1vMz7xS3dtWqDcmI8wi/f=+vfcuvfcuvfcuvfc7BD0eBubYHAlMp1RD9D=Dw6cVFf=D/f0PIDx4ogxAHAlMp1RD9D=Ii6c8/8=ui8cJBD0e/AtkpDcmIDcraRbSxtxBWu/kiMSYidkfaA+W=KM+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxAxM+Iv1kN5CF7iukf6ubMaux4Mgb7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=J/60U5gxSO1RD9D0eRut/Ogvrrg5NCut/Odt4rgxp560U5ub1k7xSq1MTwubYHgx75K5UF6cV38CuvfcuvfcuvfcuvfcVBD0eBubYHAlMp1RD9D=Dw6cVi8CVFK=838FVBD0eBgvWqdbY/1yV5K5UiK0iFfFVwK=VFKCIW60U5AbMH10D9D0ey6Vr9AVTcRSJvVpORAtTOJVSE1pkND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DORtTY7LHYtS+/KC1VjbHaAppFMFrqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5ULf5PIDxWrgtV5K5U5RxSqubJICbMXdyMwdxMkDSNr7xB560U5ub1k7xSq1MTwubYHgx75K5UF6cVFKC7L8c7wfFDL8c7wfwPIDx4rAyk3AtYkDcmI8cDnfCpWfCU460U5gyTn1vk3AtYkDcmIK=In8Fuv8FUw60U5AbMH10D9D0eJf3451CNRV3W6VlrVgyA5fpScM+fND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DLAbka7pTvRcYo7FAVRbfc7VO9J3rYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5UiK=VBD0enut/kDcmIDp//dLMn1ySPAbDIVvSwuxTZgvWHg5DBD0erAxMwutAkbLerAykn1wD9D=8nfCDvfC8Pfc+w8cJ3K=pLf5PIDx4rAyk3AtYkDcmI8cDnf=pPK=+P8RPIDx4ogxAHAlMp1RD9D=Ii6cJPfCu3KCIBD0e/AtkpDcmIDkf61lk+gtfSg3kqKSf8JpHw8CNKYM+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxWi8Cf=8cMOYLeRJMYpbv4rVpV3tx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+wf5PIDxWrgtV5K5U5VvrHux/rgxYH75NCube5gvHrgxknD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=8nfCDFfCpvKC8ifF7/fCUWfwPIDx4rAyk3AtYkDcmI8cDnfC+PfFpW60U5gyTn1vk3AtYkDcmIK=In8FJWf=UF60U5AbMH10D9D0e4KSfdKV4ffkf18vkR1p1NdSNZVpMND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DORyWMgyeKtxO4fpkYRbA0V+kqRy4LD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8L3BDlB5dtJ5K5U48cJBD0enut/kDcmIDkfrgqYo7vrPAbDICySX1RNJut4BjRDBD0erAxMwutAkbLerAykn1wD9D=8nfCDwfcuvfcuvfcuvfcuvf0PIDx4rAyk3AtYkDcmI8cDnf=p4fCU460U5gyTn1vk3AtYkDcmIK=In8FIwfFpL60U5AbMH10D9D0et8tkDg=YtAqDv7SrYtl1Pgx/idFYND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eY1vY5KSHSCbpLMk1Vjp83f+YN8v1qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kl3BDlB5dtJ5K5U48RPIDxWrgtV5K5U5RvSwuxSqutiIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=8nfCD4K=7/60U5gyS3dbY/1yV5K5Uw85i/KCVFfFDFfCpL60U5gyTn1vk3AtYkDcmIK=In8FIFfFD/8=+3f0PIDqM/dtJ5K5U5MLNtRluOglYotMfrM+SS1p/xCp4wJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57t/ERtkLVbkSfxreVc+P731dRxYM1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8Cp/60U5gxSO1RD9D0eK1bNrg0N0dyS3AyScdySwdxMkDSf37xMkA0DBD0erAxMwutAkbLerAykn1wD9D=8nfC+if=pw8=uFf=pw8=uF8wPIDx4rAyk3AtYkDcmI8cDnfC+LK=+w8=ULKCp48RPIDx4ogxAHAlMp1RD9D=Ii6c838CDw8cILfcUWfF+BD0e/AtkpDcmIDkSZYv731tWHYbDOYSY4VcALg/fdRv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkfdRxed13WBCb+4dS+L7=S88pHXY3+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+/8wPIDxWrgtV5K5U5RvrH1ykw7lMwDSNrgy4WDSfr7xSpdbkrD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi/8Cu4f=Vi8F8F8F8F8F8F60U5gyS3dbY/1yV5K5Uw85i/f=8PKCp3KC+W60U5gyTn1vk3AtYkDcmIK=In8FD48FD3K=8vfRPIDqM/dtJ5K5U5fvfiV3Yujc1qCS+LVvA+g+eCKST0JRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5JpAD7y3PjleVfvP/VVYbRVr4CMHf1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CkT60NsDxkpDcmI8CJBD0enut/kDcmIDp4rdvM3gLAnD+Spdyk5ubfHD+ewdtWpuRDBD0erAxMwutAkbLerAykn1wD9D=8nfCUFfFDP8c8i8=p/8c8if5PIDx4rAyk3AtYkDcmI8cDnfcU3K=V4fC7Pf5PIDx4ogxAHAlMp1RD9D=Ii6cJP8FIWf=+W8FVBD0e/AtkpDcmIDp4DRvWMf=AY1FYX7MeYKt/3dp3WdL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpmwgkSpYkHw7y+WM/edg+4zRcAF1l7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+izRPIjweH10D9D=+iK0PIDxWrgtV5K5U5YvTB1yMnD+Sw7xTLD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6cVBD0eBubYHAlMp1RD9D=Dw6cV4fcUvf=I4fcuBD0eBgvWqdbY/1yV5K5UiK0iFf=7v8CU4fcDv60U5AbMH10D9D0eJdpSDdSG/fymvASMVjMStgMMZAy1YD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ez7bMwMCuwYLmvJpYRuL168cMHgtYYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5UWfcUBD0enut/kDcmIDkYr7qMnD+/rAleHDSfkAxSXDSfrgtk3jRDBD0erAxMwutAkbLerAykn1wD9D=8nfRPIDx4rAyk3AtYkDcmI8cDnfCUw8C748CDPfRPIDx4ogxAHAlMp1RD9D=Ii6c8w8CVif=p48=DBD0e/AtkpDcmIDcM3MtO5b3Pw8pOoYMSVg=SBYCUwCv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDprC1VrV7vpPVV4M6MSyg=SeYqAet++560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=+FfRPIDxWrgtV5K5U5fcuIVySBglpIJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8nf=I38cJL8c838cJL8c83f0PIDx4rAyk3AtYkDcmI8cDnfC+i8=8wf=V/fc+Ff0PIDx4ogxAHAlMp1RD9D=Ii6c838cIFfCpWfC+w8F8BD0e/AtkpDcmIDkuitcfSdV/rA3krV/SMdbJvfFVPC++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkfD7M1lfCNmY+mOf/f=b/TK8kS=VL7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+izRPIjweH10D9D=7PKRPIDxWrgtV5K5U5VvrHuqN/75NCubf3dbYrgy+IJxSwgvSwjRDBD0erAxMwutAkbLerAykn1wD9D=8nf=uifFVBD0eBubYHAlMp1RD9D=Dw6cVvKC7w8CDLfcJBD0eBgvWqdbY/1yV5K5UiK0iF8CVw8Fpi8=p/60U5AbMH10D9D0ebtkAKClrNfkNr73YVJMH8MVMP7CSYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DFfVeSRcrKCFNwJ3SY1kNk7tePt+/LD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5Uw8C7BD0enut/kDcmIDprr7xkp1b1PAbDIJtYr7qfmuRNCut/HAyp560U5ub1k7xSq1MTwubYHgx75K5UF6cJFfFVBD0eBubYHAlMp1RD9D=Dw6cJLfcU4f=7BD0eBgvWqdbY/1yV5K5UiK0iF8FJPf=7360U5AbMH10D9D0ecdw/CgCeF6bfafleRCbfSYxk4d=1YD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DFC+DWgLNf1/APgv/R1tka1x/VRtkYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U48=8460U5gxSO1RD9D0eDutHwuRNJubeXD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi38F8F8F8F8F8F8F8F8FDL60U5gyS3dbY/1yV5K5Uw85i/8c8W8=uL8cpW60U5gyTn1vk3AtYkDcmIK=In8FJ/KCV4fF7F85PIDqM/dtJ5K5U58lMyf3HVM/pvgvMkVMeaJ3AO7kYOVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5AcM41CAi8vO07xOEMyOc8LMpupAmAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmI8C7P60U5gxSO1RD9D0e0ut4BjtA/gxAkD+f/glY/7xSBD+SF7vTcdtS3dtTnD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi38FD38FJWfcJL8cuv8F+L60U5gyS3dbY/1yV5K5Uw85i/8CuF60U5gyTn1vk3AtYkDcmIK=In8FV/fcpi60U5AbMH10D9D0eCfMSSVlSPjtiL7y4Yb3H0C3rRdbHLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eRjb1XdxkqA/8LRtSVdySi6VTrC/rND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5Uv8wPIDxWrgtV5K5U5RLMOube3At4HDSfr7xeodxSndti560U5ub1k7xSq1MTwubYHgx75K5UF6cJwKCuF8FJifFu/f=8w8C8BD0eBubYHAlMp1RD9D=Dw6cuP8CDBD0eBgvWqdbY/1yV5K5UiK0iFfcDi8=+BD0e/AtkpDcmIDxTkfy46MpT=KCAfVMYcdLA+Jb83YM+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqeMf=kcfpk17pH=KSDidl1B7/Aa7k+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=JvKRPIDxWrgtV5K5U5VvrWut3IVLS/ubekD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi38CpLfC8PK=u38CpLfC8BD0eBubYHAlMp1RD9D=Dw6cuP8=7FfF8LfcIBD0eBgvWqdbY/1yV5K5UiK0iFfcIvK=u/8CD460U5AbMH10D9D0ezC3AB7SH0u3WwMyOC8kNtJkNfRx1YD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0Dv13kp1lezYqfeuV1CftMtd/Ao7VYLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U3fCpBD0enut/kDcmIDpMnAySBglpIMtYrjtSnDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=8nf=+vfcuvfcuvfcuvfcuvfRPIDx4rAyk3AtYkDcmI8cDnfCVLfCJFfCp4KRPIDx4ogxAHAlMp1RD9D=Ii6c8vfFJPf=Dvfc7BD0e/AtkpDcmIDp14fkeOYqMBgSHMVkYyJxSVVtSM8x7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxHSC/S5b/S1gpHdJMf8dqfDtSk+8S+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=7/8wPIDxWrgtV5K5U5VLMwuRNCube5gvHrgxknD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=8nf=+vfcuvfcuvfcuvfcuvfRPIDx4rAyk3AtYkDcmI8cDnfCuvfc8L8=DwfwPIDx4ogxAHAlMp1RD9D=Ii6c8W8cp/8=J3fCJBD0e/AtkpDcmIDp1+YyPwJpSyfV437SenK0/zMvW6fl7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpHeA+fodLMNYxS+d/fFVxuP1S15Mv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=8w8wPIDxWrgtV5K5U5Mt43utYrgxArDSNrgy4W7vrw1tV560U5ub1k7xSq1MTwubYHgx75K5UF6cJP8FI3fc+/8FI3fc+/8F7BD0eBubYHAlMp1RD9D=Dw6cVWfCpwK=ULf=8BD0eBgvWqdbY/1yV5K5UiK0iFK=8WK=+Wf=8360U5AbMH10D9D0emAV/E1yfPglD/tCrYR+SyJ3Tu1b1YD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0D48/rotyW=AMMagy4VtpWCAqH6ukNLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U48=8BD0enut/kDcmIDprr7xkp1b1PAbDIMxkv1tOrgxSn1y+IVLNo7qYHgx7IJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8nf=UwfF7LfF7LfF7LfF7L85PIDx4rAyk3AtYkDcmI8cDnf=7vfC+wf=Iw8=u3fRPIDx4ogxAHAlMp1RD9D=Ii6c8FK=7LKC+/8FpiK=8BD0e/AtkpDcmIDqYEJxB4YS1NRve56MYWM+AC8CY17/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxYCJCYbC/rog+OfY/e3MxOD7MDw8q7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=I4KRPIDxWrgtV5K5U5JxS3uRNfutkputi560U5ub1k7xSq1MTwubYHgx75K5UF6c8WfF74f=DifC74f=DifC7BD0eBubYHAlMp1RD9D=Dw6cVPf=7LfFUw8CIBD0eBgvWqdbY/1yV5K5UiK0iw8cpPfC738CuF60U5AbMH10D9D0eadxDFRMYij=ArjbHVJxAp8quLC/SqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0Dvjlk9tbYfCviLKSACjV3igt/itCSLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U4f=pBD0enut/kDcmIDperuqM5utArg5UmYyrrdLMwdt+IVvSwuxTZutWHg5p560U5ub1k7xSq1MTwubYHgx75K5UF6c8iKC7iK=8/KC7iK=8v60U5gyS3dbY/1yV5K5Uw85i/8=7iK=uPfF+i60U5gyTn1vk3AtYkDcmIK=In8FuifFpF8=VPf0PIDqM/dtJ5K5U5JMSW1xevYtMnfxO4VtDOAk1buC1MJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57q1=Ay//8+WSfcJ4MyM=V3/kY=U3VRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmI8FD360U5gxSO1RD9D0eb1t4BdtWqAyTnD+Wr1vSwdtBIRvSBjtSnD+fogt/HAlYk1RDBD0erAxMwutAkbLerAykn1wD9D=8n8FIP8cUi8F8F8F8F8F8F60U5gyS3dbY/1yV5K5Uw85i/fcVw8c+i8=p/60U5gyTn1vk3AtYkDcmIK=In8FVLf=uP8CDv8wPIDqM/dtJ5K5U5fbHpRFYSu3TVf=Y+MSIwd=pwMlA4JRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5VSHodFY6jVOt7bM5VLeRYx7igkMi1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIfF+460U5gxSO1RD9D0efutWpdbe3ut4rDSfr7xeodxSndtiIYlMw1vT37vSvD+fogt/HAlYk1RDBD0erAxMwutAkbLerAykn1wD9D=8n8F7LfF7LfF7LfF7LfF7i60U5gyS3dbY/1yV5K5Uw85i/fcpvfc+w8CJwK=u360U5gyTn1vk3AtYkDcmIK=In8F+L8Cpvf=IPKCDWKRPIDqM/dtJ5K5U5CLeaYyWLdc1DCS11V3f+dVAcMq1tVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5JVDiRFVP7LeEfvSSVpT/7VklRvOrAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8F7460U5gxSO1RD9D0eNgxSn1yknD0rDubeHgxSvdRp560U5ub1k7xSq1MTwubYHgx75K5UF6c8LfcIFK=DFfCDWf=+4fFIBD0eBubYHAlMp1RD9D=Dw6cJw8=Jw8F7BD0eBgvWqdbY/1yV5K5UiK0i38cUwfc8460U5AbMH10D9D0e5flkOAVeuMV1ejSfRuV4+8p46jyeLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0etCvADJ3A8YvBL1qSRApTfKy/+YqYqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5U48cUBD0enut/kDcmIDkfHgxAmdRNJubeXD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiFfcuwKCD/8C7P8=ui8=Di60U5gyS3dbY/1yV5K5Uw85i/8c+P8FUW8=7/fFIi60U5gyTn1vk3AtYkDcmIK=In8FuF8=pW8c+/fcI4K0PIDqM/dtJ5K5U5Mlk96V4ig3eytqrpVxAER3TE8MHRVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U58yTSYqHXJ/YWR3MuMyMOMLH5CFklJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CkT60NsDxkpDcmIfF7F60U5gxSO1RD9D0eC1b1rdwNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6c8v8cVBD0eBubYHAlMp1RD9D=Dw6cV48CVifF+WfcuBD0eBgvWqdbY/1yV5K5UiK0iFf=pifC+P8FJv60U5AbMH10D9D0ekVlf=7=AH6Vk6JcNC1CeMbvM4uVYYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0etttO1j=8WtCf1YCeRjtrYubHtRlfYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5U4f=+BD0enut/kDcmIDkfrgqYo7vrPAbDIMleHdvTnDSNr7xB560U5ub1k7xSq1MTwubYHgx75K5UF6c8v8cDL8c7wfFDL8c7wfF8BD0eBubYHAlMp1RD9D=Dw6cJW8F+wfF74KC8BD0eBgvWqdbY/1yV5K5UiK0iFfFI/8=UifcU460U5AbMH10D9D0e68STDKMryRvS18yHCMt4BKCf58FrND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ezRy1xYLMpYkSPKbAVdq8vgFJ4Jp1qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5UFf=DBD0enut/kDcmIDprrAyOmgv4rD+Ao7LfrdtiIVySwuRDBD0erAxMwutAkbLerAykn1wD9D=8n8FVi8F8F8F8F8F8F8F8F60U5gyS3dbY/1yV5K5Uw85i/KCp4fc+WfFJv60U5gyTn1vk3AtYkDcmIK=In8FVW8=p4fCDwKRPIDqM/dtJ5K5U58q8vMxA08yHZ7VkWV/1m1VOyJck/VRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5gLeJMSpFR+H8fpi4M+/tbFDF1cSO1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8cuW60U5gxSO1RD9D0eCut4Xdt+IJvrrAlerD+erjtSODSfrgtk3jRDBD0erAxMwutAkbLerAykn1wD9D=8n8F8F8F8F8F8F8F8F8F8FfRPIDx4rAyk3AtYkDcmI8cDnfCp385PIDx4ogxAHAlMp1RD9D=Ii6c83fC8WK0PIDqM/dtJ5K5U5gFMvKy/9AbeRupVWVVOJ7kkobLYJJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57+TJRFDLM3erttf5VVW5dVD3J/NWJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CYT60NsDxkpDcmI8CVL60U5gxSO1RD9D0eyut4qAtWHDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=8n8FDwKCVW8CIFfc7Ff=uW8wPIDx4rAyk3AtYkDcmI8cDnfCD4KC7PfC+4K0PIDx4ogxAHAlMp1RD9D=Ii6c8vfCIv8cu4fCDBD0e/AtkpDcmIDpmw7+HyAVH4d=1EA/SCgL+O8lrCVp+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqfxMlN3Ycf98+kuYMSX7vfoCvHMgk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=8vK0PIDxWrgtV5K5U5VvSnAyTFdlN/75NNAxMnAtVIVvT/AyIIVySBglkOutWqutPIVvSOdbYWD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiF8C+48C+48C+48C+48C+F60U5gyS3dbY/1yV5K5Uw85i3KC+/fCJ3fc7460U5gyTn1vk3AtYkDcmIK=In8F7WfcpPfC+4fwPIDqM/dtJ5K5U573kDRtYEjt/oR3WvVx/XYLkKR++O1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5tp1WVqkiupPLfp4rV3HY8trmAqM+VRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIfFIW60U5gxSO1RD9D0eCgvemuterjxSwDSerdxer7xp560U5ub1k7xSq1MTwubYHgx75K5UF6cDWfFDw8cDw8cDw8cDw8cVBD0eBubYHAlMp1RD9D=Dw6cVWfcVF8F8BD0eBgvWqdbY/1yV5K5UiK0iFfcuLK=p460U5AbMH10D9D0ep1MkS8pO5VtfaAkfY7puLKtSKAFfYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e=gSrZjb1NCpuLMR/YgcUv7CDWR+OYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5Ui8C8BD0enut/kDcmIDkeruxkn1lerD+Wr1vSwDSfPgLe3dtWqD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6cDWfcDWfcDWfcDWfcDWfc7BD0eBubYHAlMp1RD9D=Dw6cJWKCuWf=8FK=DBD0eBgvWqdbY/1yV5K5UiK0iwKC7ifFU4fCp460U5AbMH10D9D0DFY=kx8MNF7/f1KykRAF137brLCLSqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e67LNdKSY0tt1dVCrYg5/5gMAi1qAqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U/fRPIDxWrgtV5K5U5VLAr7yWr75N0utArg5DBD0erAxMwutAkbLerAykn1wD9D=8n8cp4fcuvfcuvfcuvfcuvfRPIDx4rAyk3AtYkDcmI8cDnfC7Wf=JwfC7vKCUFKRPIDx4ogxAHAlMp1RD9D=Ii6c8WfCJ3K=ULfFVPfF7BD0e/AtkpDcmIDxWDACNqMxM0AyTYfMSZuV7vMlMSR3+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqp3MLM9fqeJftD3CSfDYVfMVpO68y7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=Vi60U5gxSO1RD9D0eCut43D+4rdvVIJVVIJx4ouvBI6RNJube3D=+560U5ub1k7xSq1MTwubYHgx75K5UF6cDW8CuvfcuvfcuvfcuvfcVBD0eBubYHAlMp1RD9D=Dw6cVWK=V/fcpFK=+BD0eBgvWqdbY/1yV5K5UiK0i38=pF8CV4fcuW60U5AbMH10D9D0eqVpkbtR/zClS8u/NCjbe91pSv1/SLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0euACI3fcS5Mcke8VkCYCki73AE7+YND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5U38CDBD0enut/kDcmIDkfkut4putIIJbYmgyM3dt8IJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=8n8cIiK=IiK=IiK=IiK=IiK0PIDx4rAyk3AtYkDcmI8cDnfC7PK=8WKRPIDx4ogxAHAlMp1RD9D=Ii6c8L8CuL8F8BD0e/AtkpDcmIDkMfdVGOALMf8FVvAkYMCt1EJtA87x7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkNXdyrbMFV/jVOfASYbJx1r1pWYg3+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=DvfRPIDxWrgtV5K5U5YlMO1lMOD+/rglNrgy4WDSfr7xeodxSndtiIYlMw1vT37vS5D5PIDxSv1ber1vMz7xS3dtWqDcmI8wiwfCIwfCpwfCpwfCpwfCpBD0eBubYHAlMp1RD9D=Dw6cuwK=DP8RPIDx4ogxAHAlMp1RD9D=Ii6cJw8C7WKRPIDqM/dtJ5K5U5RtSOYcYkYVTRC=AcMyGwAVmPdVfe1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5KtA+MLrFukMPCyTDMlYOuqMa8w/e1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cYT60NsDxkpDcmI8CJv8RPIDxWrgtV5K5U5YqeH1tWp7wNMgxkog5DBD0erAxMwutAkbLerAykn1wD9D=8n8cVBD0eBubYHAlMp1RD9D=Dw6cuP8FU4fwPIDx4ogxAHAlMp1RD9D=Ii6c8Lf=+i8c8BD0e/AtkpDcmIDpm3VyO5Ac1DgpO8V/fxAc83jlSkj++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDk1LuvYyjxOeA/kVfkSXJVkmRbkaYx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DFzRPIjweH10D9D=DBD0enut/kDcmIDpfogy4k1vVIVLS/ubekD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiw8Fpw8C738FuWfFJLK=pL60U5gyS3dbY/1yV5K5Uw85i/fFJ3fCJF8FV360U5gyTn1vk3AtYkDcmIK=In8Fu3f=Ji8cIvf5PIDqM/dtJ5K5U5f+O0KyWBRtMSuxAWMSAoCFe3R+fy1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5AtAyK=Sqj+H67V4kV3SFKtPWj+MxJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CrT60NsDxkpDcmI8CJv60U5gxSO1RD9D0eJut4BdRNfutWqutPIVvSOdbYHD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiw8CJwK=VL8CJwK=VL8CJBD0eBubYHAlMp1RD9D=Dw6cVP8FUWKRPIDx4ogxAHAlMp1RD9D=Ii6c8vf=7BD0e/AtkpDcmIDcAkRLIwtpSZ1qNejkSRYCezYLMVVq7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDc8LVq1a7lA6R/m3R/YDf3H/R+e87v7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=8360U5gxSO1RD9D0eDubYHuxSqutiICxS5dtiIVySBglp560U5ub1k7xSq1MTwubYHgx75K5UF6c+WfcIW8CVFf=8W8CVFf=VBD0eBubYHAlMp1RD9D=Dw6cVWfCu4fF7LfFuL8C+BD0eBgvWqdbY/1yV5K5UiK0iFfF838c8vK=pFfFVv60U5AbMH10D9D0e9AvHFJxAfgcrP7bYY8crc7bHtjMfND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ey1xY0AyHpbFMaMv1RVCfKRbMPMtWYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8q3BDlB5dtJ5K5UFf=8BD0enut/kDcmIDpeoAverjxSwD+1wdtMn10AFDSfouvkkAlp560U5ub1k7xSq1MTwubYHgx75K5UF6c+ifFVBD0eBubYHAlMp1RD9D=Dw6cVvfFV/8=uWfCJBD0eBgvWqdbY/1yV5K5UiK0iFfCpiKCI4KC7w60U5AbMH10D9D0eiVMTaCv1t7l83d+4CR+i/AVfwMqkqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0Dwfc8PM+/6MLNeYkNVRxTvRbNzAkrND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5U3fcIBD0enut/kDcmIDpOH1yYk7qNo7xVIfFVIVySBglp560U5ub1k7xSq1MTwubYHgx75K5UF6c+ifFVBD0eBubYHAlMp1RD9D=Dw6cVFKCI/8cp38wPIDx4ogxAHAlMp1RD9D=Ii6c8w8=DLfFuvK=VBD0e/AtkpDcmIDx4083k/uCS0RbN8RMeB6Ckid/TKKl7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxHiVb1=1MfWupBWVMf6RvSd1SNqC3+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=+w85PIDxWrgtV5K5U5RxTpdlN/75NJubeXD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi4fcpLK=IFfCpLK=IFf5PIDx4rAyk3AtYkDcmI8cDnfCU3f=pW60U5gyTn1vk3AtYkDcmIK=In8Fu/f=Uw60U5AbMH10D9D0DvdM+Ofx1MA/f6RxORMpuWR3eaRy4YD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ezRtTFMxWVCyY88vOVCxGOR+fq7kYND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U3f=DBD0enut/kDcmIDkf/dlMpDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=8n8CVi8cUF8CD/60U5gyS3dbY/1yV5K5Uw85i/8CuFfcUL8FVF60U5gyTn1vk3AtYkDcmIK=In8FJvKC8Lf=7vK0PIDqM/dtJ5K5U5AkDPVVeHb3BOfCSiVcrB1v/HYxOFVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5RpOZKSp/fcrofpO8VFeDtyHb8qeoVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmIK=VBD0enut/kDcmIDpHr7lMwD+eWubkrgRNCut/HAyp560U5ub1k7xSq1MTwubYHgx75K5UF6c+3KCDPfc83KCDPfc83KCuBD0eBubYHAlMp1RD9D=Dw6cu48F+WKRPIDx4ogxAHAlMp1RD9D=Ii6cJP8CpP8RPIDqM/dtJ5K5U51vMPgVWWCquWg/kfVqMaC=SfYx/51wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5RbrnKS107pHzRviLVtBWty8/Cv74AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CrT60NsDxkpDcmI8c+F60U5gxSO1RD9D0DvK0NJut4BjRDBD0erAxMwutAkbLerAykn1wD9D=8n8CD/60U5gyS3dbY/1yV5K5Uw85i/8cI/60U5gyTn1vk3AtYkDcmIK=In8FJv8FpL60U5AbMH10D9D0eH8vTmuk+4MyWdjbHRg=Mojtp36MNYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ettxT6A+TeYqH8VqARj+Yw1prd1kNLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U3fCIBD0enut/kDcmIDk1kgqMFD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5UF6c+wfRPIDx4rAyk3AtYkDcmI8cDnfC8i8CUPK=J3KRPIDx4ogxAHAlMp1RD9D=Ii6c8wfcIi8FDLK=IBD0e/AtkpDcmIDkA6g3WfJCJOA+mFdSSlfbfBVqe=Vv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDke1tSH5Mbkv8MkxAkSxJpDOMt/yRk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=pL80PIDxWrgtV5K5U5CtTmutW5utArg5NCube5utHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi48cVBD0eBubYHAlMp1RD9D=Dw6cVWfF8P8=uFfcIvf=uBD0eBgvWqdbY/1yV5K5UiK0iFfFDLf=UP8=U3K=u360U5AbMH10D9D0ecCVW6JcYldpYwYt4Rf+u3YSeYA5/LD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eZYyuPfxSJMMf1M3eCM3PP7+HRdS1qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8L3BDlB5dtJ5K5U4fcuBD0enut/kDcmIDp4rdvVIttT/AyIIJvTwgxMwD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi48c8v8C+48C+48C+48C+BD0eBubYHAlMp1RD9D=Dw6cV48=7BD0eBgvWqdbY/1yV5K5UiK0iFf=74KCIBD0e/AtkpDcmIDkerMLYVA5/6K+HbjSfnJV3LtV4YMl7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDk1dj=N9gt+FYySBtke8ALSEAC1Sdk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=+3f0PIDxWrgtV5K5U5CxM3utHHD+HrAykWuRNC1ter1ySBD5PIDxSv1ber1vMz7xS3dtWqDcmI8wi48CIPfCV/fCV/fCV/fCuBD0eBubYHAlMp1RD9D=Dw6cJif=IP8C+/fFpF8wPIDx4ogxAHAlMp1RD9D=Ii6c8/fcILfFV3f=uLK=DBD0e/AtkpDcmIDx4HCpHW1xSDR34zYkJ/1+8O1l1E8b7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqr9YMS06VHvuCYWAkJwKCAad=kNK++560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=7P8RPIDxWrgtV5K5U5VvrWut/rDSNrgy4WDSfmjtSOuRNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5UF6c+BD0eBubYHAlMp1RD9D=Dw6cJW8CVifFuBD0eBgvWqdbY/1yV5K5UiK0iFfF+3fc7F60U5AbMH10D9D0DOCLHvC=108y+vdSNVY/18VLkXCp4LD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eCACNOg+Tf7lMw7xWYVpAWCteEjtYND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U48F+BD0enut/kDcmIDkNwubYr7ySpdbYWuRNRgvSpDSYwdtfogxVIVySwdwDBD0erAxMwutAkbLerAykn1wD9D=8n8=IF8F8F8F8F8F8F8F8FfRPIDx4rAyk3AtYkDcmI8cDnfC+Ff=Jwf=p3f5PIDx4ogxAHAlMp1RD9D=Ii6c83f=7Pf=DPf=JBD0e/AtkpDcmIDkrMACfmK+OpV+OdJkYWAFf11+THgq7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkHHjV/wgqYOdyTutMYxg3f5tVe06V+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=+3K0PIDxWrgtV5K5U5JvrrdLeruxMwdt+IVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=8n8=u38FI3KCDPfc83KCDPfwPIDx4rAyk3AtYkDcmI8cDnfC8Ff=p4fC73K0PIDx4ogxAHAlMp1RD9D=Ii6c8/8CILfcIi60U5AbMH10D9D0eR7pYL7VI3dluL6V1RMbNnKlHRMyeND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eDjMMOMbAc7kNdJFAY8xS1MxAYCvrqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5Uw8cJBD0enut/kDcmIDkNr7xBIJvkwuLMFD03IMtYpdbNrgxp560U5ub1k7xSq1MTwubYHgx75K5UF6cUv8Fu4fcUL8CJwK=VL8RPIDx4rAyk3AtYkDcmI8cDnfCJwKC7F8Cp4fRPIDx4ogxAHAlMp1RD9D=Ii6c8L8=VifC8ifcpBD0e/AtkpDcmIDkNtJpHXMvYL8lSeA/YX8VOuCxSJ7x7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDx4WMCARMt1bAFADgSYV7yJPjcAFC/+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=J4KRPIDxWrgtV5K5U58cuIVySBgyp560U5ub1k7xSq1MTwubYHgx75K5UF6cUv8cVBD0eBubYHAlMp1RD9D=Dw6cV38cVifc74fcJBD0eBgvWqdbY/1yV5K5UiK0iF8c8if=IF8C8BD0e/AtkpDcmIDxOBA3DWM+ANuMk4YMS0Axr8b3mOY++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpHMRLYZR+knCxDiYMe81/YdVLAxVk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=+W85PIDxWrgtV5K5U5KCVIVySBglp560U5ub1k7xSq1MTwubYHgx75K5UF6cU/8CVifF8P8CVifF8P8CJBD0eBubYHAlMp1RD9D=Dw6cVPK=+P8RPIDx4ogxAHAlMp1RD9D=Ii6c8v8cpBD0e/AtkpDcmIDkSiKlkLgq7/dteMjkeYJv4O1LrD8k+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxiwYMHHAyBi7/HZdMYBKlMB6t46dS+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=JFf5PIDxWrgtV5K5U5RySwdRNldyTFd0NCAlek1bJI8C7IVySBgyp560U5ub1k7xSq1MTwubYHgx75K5UF6cU3fcILfRPIDx4rAyk3AtYkDcmI8cDnfCpF8F73KRPIDx4ogxAHAlMp1RD9D=Ii6c8vKCD38F8BD0e/AtkpDcmIDqAlfw/97xOCVSkZRkeYupTefv1iCb7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqV4t=UWApWJJkHDVMD4Vb84jtWRdv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=+Pf=uBD0enut/kDcmIDpSwdtSputrrD+H/uxSXDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=8n8=J4fcuvfcuvfcuvfcuvfRPIDx4rAyk3AtYkDcmI8cDnfc74f=DWfFIW85PIDx4ogxAHAlMp1RD9D=Ii6c8v8FJ4fC8P8=IBD0e/AtkpDcmIDqfXgFYPRpSrg3miM/fYux+/1xrCAp+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxTDRx84ApiF8tSl8MerjMfP13MNAM+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+P80PIDxWrgtV5K5U5YyMFdySP7xkWuRNJubeXD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiPf=U38CV4fFI/fF+38cIBD0eBubYHAlMp1RD9D=Dw6cV4K=7i8FDP8C+L85PIDx4ogxAHAlMp1RD9D=Ii6c8/8FJvK=DL8Cu/K=JBD0e/AtkpDcmIDx1zjSf/YFYdJvS=gkSwCpfcVVDFRV+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqeMJkYJRS7P73HwVMfl1MkmRyk4fp+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=+38wPIDxWrgtV5K5U5CxM3utHHD+Wr1vSwD5PIDxSv1ber1vMz7xS3dtWqDcmI8wiP8F8F8F8F8F8F8F8F8F8L60U5gyS3dbY/1yV5K5Uw85i3K=ULK=pwf=pBD0eBgvWqdbY/1yV5K5UiK0iFfC7i8=uWKCJF60U5AbMH10D9D0e+RSYN8CYkAvSeJMkV8=1/RLAvgFrYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eWAkkRRlHHtV46VMNRMk8wMV4KYceYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U38FpBD0enut/kDcmIDprHgxY/7LYrg5NJubeXDSN/7xeruvrrg0N=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI8wiP8cuFK=IiK=IiK=IiK=Iv60U5gyS3dbY/1yV5K5Uw85i/8C7vf=U/K=Vi60U5gyTn1vk3AtYkDcmIK=In8Fu38=7WfCUWK0PIDqM/dtJ5K5U5YqeOYMNkCvTn7qk4MSTFA3S+tkN9VRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5C=NZj+WyfFf/tqAMVxS1A+/4tbfOAwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmI8FuW60U5gxSO1RD9D0eJutWpdbYHuRNJAtHrDSfrgtk3dRDBD0erAxMwutAkbLerAykn1wD9D=8n8=Dw8cDw8cDw8cDw8cDw60U5gyS3dbY/1yV5K5Uw85i/8c+FfF8L8=pv60U5gyTn1vk3AtYkDcmIK=In8FVifcUifcJPf5PIDqM/dtJ5K5U51yYpYxfxf+SMfy/lVtSifbHBMCfHVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5tkMe1k1XR3MytkfKVtW/1bSY1Cr8AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8cUBD0enut/kDcmIDkfrglJICySX1RNyY0N0gyTcdwDBD0erAxMwutAkbLerAykn1wD9D=8n8=+/fFJPfFJPfFJPfFJ460U5gyS3dbY/1yV5K5Uw85i/K=8LfCpi8FuL60U5gyTn1vk3AtYkDcmIK=Inf=+w8cD4K=VPf0PIDqM/dtJ5K5U5Vpk6utPvdxARRqYqVvfEtpMWMxWaJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5YleLft3WjMekfpeeV333fkGO7/rC1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CrT60NsDxkpDcmI8CpF60U5gxSO1RD9D0e0utWpdyS5DSfrgt/HgySndRDBD0erAxMwutAkbLerAykn1wD9D=8n80PIDx4rAyk3AtYkDcmI8cDnfCULfFpW60U5gyTn1vk3AtYkDcmIK=In8FuLK=pL60U5AbMH10D9D0ep1V/ZYCS6VxW8CLHYfMkd1MkzgqkYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eMdpH6RMr=fVY5ttfRRt4fR3ka7LAND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fl3BDlB5dtJ5K5UiK=IBD0enut/kDcmIDp/HgySndRNJutkX7ySwuRDBD0erAxMwutAkbLerAykn1wD9D=8n80PIDx4rAyk3AtYkDcmI8cDnfc+wfCuifcUw8wPIDx4ogxAHAlMp1RD9D=Ii6c8iKCIvfCpPfRPIDqM/dtJ5K5U5Yc1r6bYm1xrzRR/+V/A/Cl1FMqf5AwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5AL1mR+Am1/T3uV/SVpOF7/roRcVPJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmI8CJv8wPIDxWrgtV5K5U5Ctk37x+IVvSn1vrrD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=8n80PIDx4rAyk3AtYkDcmI8cDnfCUPfC+FfwPIDx4ogxAHAlMp1RD9D=Ii6c8w8cpPfCDBD0e/AtkpDcmIDkTBCSrOgp19u/kuuMSpCVPFR+WkMy7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcYr8SYEMxVOd/p36MfydtMxA+fndV+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DFzRPIjweH10D9D=7vfRPIDxWrgtV5K5U5JxSBglkqAtWq1RNJut4BdRDBD0erAxMwutAkbLerAykn1wD9D=DnKCuifFVBD0eBubYHAlMp1RD9D=Dw6cVwfC7P8F+BD0eBgvWqdbY/1yV5K5UiK0iFfC73KC7L60U5AbMH10D9D0en7MHejkm4JLYP7yfYgq7O1VuW1=fLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DFtM1vjpYlAkuvRtTYRvf0tlHlJCSND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U3f0PIDxWrgtV5K5U5CySX1bYoAviICqM3utiIVySBgypIVler1yMk70NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5Uw6cpv8FV38CuvfcuvfcuvfcVBD0eBubYHAlMp1RD9D=Dw6cuP8FuBD0eBgvWqdbY/1yV5K5UiK0iFKC73KCpBD0e/AtkpDcmIDqfJglkzMv/LfFAqJMY5gkYi7SfOdt7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkSoRqS5YvW3KyTcY/Y4CFk18vf/YS+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=8WK0PIDxWrgtV5K5U5YvTBgtS3d0N+AbequbN/dx+IVvSOdbYHD5PIDxSv1ber1vMz7xS3dtWqDcmI85iWfCJifc+48C+48C+48C+BD0eBubYHAlMp1RD9D=Dw6cVwfcpw8c838F7BD0eBgvWqdbY/1yV5K5UiK0iFf=pv8CJWKCIF60U5AbMH10D9D0eZtyAVV3eSJxMwtSNRfLYmA+OFMFSLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ecuFeyR/eHbFM5VtkRMkMdALHOj+kLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8q3BDlB5dtJ5K5U48F7BD0enut/kDcmIDpSpdRN8utOkDSNrgy4HD5PIDxSv1ber1vMz7xS3dtWqDcmI85iWfRPIDx4rAyk3AtYkDcmI8cDnfC+3f=pFfcpW85PIDx4ogxAHAlMp1RD9D=Ii6c83KC8ifC7F8FDBD0e/AtkpDcmIDcrt7yrLVvHrYMk0gMe5CVkmVtkcC/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDk1mg3AX7/+vtVHYYMe=7lNlYxOef/+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=DvK0PIDxWrgtV5K5U5JtrH7xk3gv4rDSfr7xeodxSndtiIYlMw1vT37vS5D+DIRwNJutPIVySwdwDBD0erAxMwutAkbLerAykn1wD9D=DnKC83K=+3K=+3K=+3K=+/60U5gyS3dbY/1yV5K5Uw85i/KCV460U5gyTn1vk3AtYkDcmIK=In8FVWfCpv60U5AbMH10D9D0ekMvfzfbNKtSr1JVSYYtYvK+1cVqrLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eZ8k1pMMAwKC8vdckYAvVLACkS7SNND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5Uw8=IBD0enut/kDcmIDkfrgqYo7vrPAbDIJtAwutArgtp560U5ub1k7xSq1MTwubYHgx75K5Uw6cp4fcuvfcuvfcuvfcuvfwPIDx4rAyk3AtYkDcmI8cDnf=p38=JLfRPIDx4ogxAHAlMp1RD9D=Ii6c8LK=+FK=uBD0e/AtkpDcmIDcS/CMeJtqr+8veMKMDL1+BvJ/MyAL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDp406bf9Ktf4M34JA/ead+kq1yYx8V+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=7380PIDxWrgtV5K5U5JxrrAvSndbN/75N6dbfmgLDIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI85iW8Cuvfcuvfcuvfcuvfc7BD0eBubYHAlMp1RD9D=Dw6cVF8c74fcVBD0eBgvWqdbY/1yV5K5UiK0iFf=Iv8cDw60U5AbMH10D9D0e4u/SVuk1ef=A51+TRAvTJgMMDR+1ND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DWf+1b7FARYMY6AyeVdbekVl1HdbNYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U48=J360U5gxSO1RD9D0eKutkFdy+IVleodyTwdRDBD0erAxMwutAkbLerAykn1wD9D=DnKRPIDx4rAyk3AtYkDcmI8cDnfc74KCp38=7LKCDi60U5gyTn1vk3AtYkDcmIK=In8Fu3KCJLfC+wfFJ/K0PIDqM/dtJ5K5U5gVHF7V/lA=Yftte8VbY4RVYSfFuvAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57yk46VDwVSreRVWiVv+vgMflVx461wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIf=Ui60U5gxSO1RD9D0e0ubeH7vrrDSMpubkrg5NJut4BdRDBD0erAxMwutAkbLerAykn1wD9D=DnK=DP8F+wfRPIDx4rAyk3AtYkDcmI8cDnf=7/8FJvKCpW8wPIDx4ogxAHAlMp1RD9D=Ii6c8PKCV3fCIvKCIBD0e/AtkpDcmIDx4qjtkyJCrCASHidkSz1vVO8/pWCt7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpH8jp1yK=VP7pHFfMf3uxT9CxfxAl7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=DwK0PIDxWrgtV5K5U5JxSwdbfmuRN1AterdwN07xkn1y+560U5ub1k7xSq1MTwubYHgx75K5Uw6c7W8Fu/8=7W8Fu/8=7W8FVBD0eBubYHAlMp1RD9D=Dw6cJifcVBD0eBgvWqdbY/1yV5K5UiK0iF8C+WKCuBD0e/AtkpDcmIDcrHMtPwukedCV4BKSYmCySf8+eJJq7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcNrK+Awtk19gLNOMSJidFN8VkTiVL7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=7Ff5PIDxWrgtV5K5U5CxS5uber1wDBD0erAxMwutAkbLerAykn1wD9D=DnfFI48cVBD0eBubYHAlMp1RD9D=Dw6cV38c+3fc7BD0eBgvWqdbY/1yV5K5UiK0iF8c+4KCVi60U5AbMH10D9D0e/1qrHRpAEgkTdtkNCM344fM8/6tWND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ePd+k17STYj=ULg+4VMbA4uqmwgvWYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5UWfc+BD0enut/kDcmIDkfrglJICySX1RN0YRNSubf3D5PIDxSv1ber1vMz7xS3dtWqDcmI85iLfRPIDx4rAyk3AtYkDcmI8cDnfCpLfCVL60U5gyTn1vk3AtYkDcmIK=Inf=+FK=p460U5AbMH10D9D0D3MqMwtxfF1+H51tYVApYW7cNeCFALD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DOAx4P8bfafSH6dceYML1NCc1YjMSqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5UwfF+BD0enut/kDcmIDproALerd0UvDSNrgy4HD5PIDxSv1ber1vMz7xS3dtWqDcmI85iLf=+wfRPIDx4rAyk3AtYkDcmI8cDnfCpWfFU460U5gyTn1vk3AtYkDcmIK=In8FJvfFUF60U5AbMH10D9D0erKlfLCvmW1LSoR+fYRxYMCpMiukYYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ec7MHP1qHXM/IvMxeV13rf8V1DgvkqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fl3BDlB5dtJ5K5Ui85PIDxWrgtV5K5U5VvTvuterjxSwDSfr7xeodxSndti560U5ub1k7xSq1MTwubYHgx75K5Uw6c7wK=+Lf=uP8F+Lf=uP8F8BD0eBubYHAlMp1RD9D=Dw6cVWfFDv8F+i8wPIDx4ogxAHAlMp1RD9D=Ii6c8v8=VLfcI/8FDBD0e/AtkpDcmIDpAmRSSxVlrF7CMcb/fldyrBjy1zJx7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkYrALMytV/qAp4mRM+4gkV4ube3u3+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=DPfwPIDxWrgtV5K5U5VqMPuvrrgxJICbMXdyMwdxMkD+4rgxVIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=DnfFUi8F8F8F8F8F8F8F8FfRPIDx4rAyk3AtYkDcmI8cDnfCDL8FpW60U5gyTn1vk3AtYkDcmIK=In8FJ/K=Uw60U5AbMH10D9D0eOCxGOJtOrfLu31+rRCVT9AvYbgkNqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eCAkmWfSY/dVYodV/RMvMFtV4RApkYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5Uw8c+BD0enut/kDcmIDp/rgxTmubePAtO/75NCube5gvHrgxknD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=Dnfc8wK=+wfRPIDx4rAyk3AtYkDcmI8cDnfC+ifFVi8c8WfwPIDx4ogxAHAlMp1RD9D=Ii6c8/fc+3fFVwfC8BD0e/AtkpDcmIDpM67bS0ACY57tS/A/f87Cez8t4Ofv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqAkfyfuKVAcC=MyVkS3jCrRAq1WVv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=+/8RPIDxWrgtV5K5U5fFJIVySBglp560U5ub1k7xSq1MTwubYHgx75K5Uw6cuw8CUF8C73fcUF8C73fcVBD0eBubYHAlMp1RD9D=Dw6cVFKC7i8FVifcDBD0eBgvWqdbY/1yV5K5UiK0iF8cVF8CUFfF+w60U5AbMH10D9D0eC7kfvA34qjtHPMVSRtM137qYHMp1LD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DwtyTS7peyJMkPjVHCdxmvCpBPuV1ND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5Uw8cuBD0enut/kDcmIDkfHAySBubYrgy+IRvkFdyTw1RNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5Uw6cu4fcuvfcuvfcuvfcuvfc7BD0eBubYHAlMp1RD9D=Dw6cJi8=pBD0eBgvWqdbY/1yV5K5UiK0iF8c+/8=8BD0e/AtkpDcmIDqNVR=fydx/ydCYSb/SHg/rRuVO=Y/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpeaMbS9MS1cV=MigMYHAt1mtbNHdk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=8L60U5gxSO1RD9D0eEgyS5dteHAySBuRNCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmI85i/K=738CJWfcVWK=uFKCJi60U5gyS3dbY/1yV5K5Uw85i/fFV4KCpBD0eBgvWqdbY/1yV5K5UiK0iF8CJW8=8BD0e/AtkpDcmIDqSfMC+/uMHEjVkXg/fygMffd3e/8L7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkI/1FNoRV3/6tSWAMJiAlILR+4fVL7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+3zRPIjweH10D9D=+4f0PIDxWrgtV5K5U5JxMmut4rD+SpubeFdy+IVySBglp560U5ub1k7xSq1MTwubYHgx75K5Uw6cVif=8wfC8WfcIwfC8WfwPIDx4rAyk3AtYkDcmI8cDnf=pWK0PIDx4ogxAHAlMp1RD9D=Ii6c8wfFVWKRPIDqM/dtJ5K5U5jSI4RxYvM/krfkeuM=riRyP4g/+PVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U56VHudpDidvPvCSfnVVWSdtkV7SN=1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmIfFIBD0enut/kDcmIDpekutYog5NCAlek1bJIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=DnfCIF8F8F8F8F8F8F8F8FfRPIDx4rAyk3AtYkDcmI8cDnfCIW8cVPf=8/60U5gyTn1vk3AtYkDcmIK=In8FuLfcVvf=7v8RPIDqM/dtJ5K5U5fpewM/My7034tMSoV/AYfCkpJV/PVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U51cruRMYLb3AWuVeMV3fzd3YofpAVVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8ceT60NsDxkpDcmIf=UW60U5gxSO1RD9D0e67xkFdyWrD+er1vSnD+Wrux+IRxk5utiIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI85i/fcD/60U5gyS3dbY/1yV5K5Uw85i/K=V3fFuv60U5gyTn1vk3AtYkDcmIK=In8F7wK=pF8wPIDqM/dtJ5K5U51xTH7LkmfkAbtcMXVMmv1R/uuvJiJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U57vYq1kTVY=eSfc1iM0/o1=M5glrFVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmIK=pBD0enut/kDcmIDkfrglJICySX1RNNY0N0gyTcdwDBD0erAxMwutAkbLerAykn1wD9D=DnfCV/fCV/fCV/fCV/fCVv60U5gyS3dbY/1yV5K5Uw85i/KCu3fC7L8F8BD0eBgvWqdbY/1yV5K5UiK0i38=uW8cuvf=IL60U5AbMH10D9D0eP7lf/73SSV/M5MSrRRCk1YkM3M3WYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eXdxSxuFV/7SfwACMYdSMPgV/6MxeYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U38C7BD0enut/kDcmIDkMpubkrg5N6dykpdbePAbD560U5ub1k7xSq1MTwubYHgx75K5Uw6cVFfC+4KCU3fFu4KCU3fF7BD0eBubYHAlMp1RD9D=Dw6cV3f=DwfC+LK=7BD0eBgvWqdbY/1yV5K5UiK0iF8c+38FIL8C+w60U5AbMH10D9D0DFfk1pMtAzMp14MkMVfcNXt++iK+kND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ecgxrX8bf1Ab1o8VTVu/A+g/NH7xfYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5UvKCpBD0enut/kDcmIDpfmdbY3ubergxHrg5NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5Uw6cVw8=IF8F8F8F8F8F8F8FVBD0eBubYHAlMp1RD9D=Dw6cJifcD4fCU4f=+BD0eBgvWqdbY/1yV5K5UiK0iFfFJF8=IFfcVw60U5AbMH10D9D0elCvYz7/M67xY5dyAVgMkyjMNoKlNqD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eqC3f16tfS8kYrfSTCdtOaV+ex7VYqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5UFfC7BD0enut/kDcmIDkNwut1/gy4rD+OrgxSnD+Spdyk5ubfmdRN07xkn1yGIaSNr7vfmdt3HD5PIDxSv1ber1vMz7xS3dtWqDcmI85i/8=DFfCU38c7FfCU38c7F60U5gyS3dbY/1yV5K5Uw85iv8=7/8CuL60U5gyTn1vk3AtYkDcmIK=Inf=D4fC+/85PIDqM/dtJ5K5U5fFf48vec73kktpefMlAetbex7vT4AwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5MFAF1qNqgv/6RbAMMSeD1kS4tSNLJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmIf=u/60U5gxSO1RD9D0e6dtYp1bePgLekD+erjtSODSfrgtk3dRDBD0erAxMwutAkbLerAykn1wD9D=DnfRPIDx4rAyk3AtYkDcmI8cDnfC8i8c8vf=IBD0eBgvWqdbY/1yV5K5UiK0iF8cVPfc8360U5AbMH10D9D0e3VCJ4gxr8YpHadVTCRtMtfpT1J/kND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DwfcNuRw/36VDLdMHYApAmjtpOAtkqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5Ui8C+BD0enut/kDcmIDc+WDSNrgy4HD5PIDxSv1ber1vMz7xS3dtWqDcmI85i/60U5gyS3dbY/1yV5K5Uw85i/KCuWfFUv60U5gyTn1vk3AtYkDcmIK=In8FVi8CU385PIDqM/dtJ5K5U5MLJLdy7W7Melg3YFVpWvjpHoMck/VRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5bFYKAVGW1lJ4fVHfM+/d7tIPA+M9AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8CUFf0PIDxWrgtV5K5U5MySBuRN+utOFdyknDSNrgy4WD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=DnfRPIDx4rAyk3AtYkDcmI8cDnfcU3KCu4KRPIDx4ogxAHAlMp1RD9D=Ii6c8LfcD48CIBD0e/AtkpDcmIDxYW7+1ofpraRqSKYkeS7/rrJtYKuL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpD48bYV8+YmJqSkd/Y=fqIWjkH3Mx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=+PK=8BD0enut/kDcmIDkNwut1/gy4rD+OrgxSnD+ergySXD+ewdtWpuRN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI85i/60U5gyS3dbY/1yV5K5Uw85iv8=DP8cIwfCpFfcUFf0PIDx4ogxAHAlMp1RD9D=Ii6cJwf=I3f=JwfFI/fcVi60U5AbMH10D9D0eMb/kuJv33Mt1odvOV8pAwgvfB1p/ND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DPdkHYfxHRC3f4b3rYJFeMY3O/gVrLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUwfl3BDlB5dtJ5K5U/fwPIDxWrgtV5K5U5VvSOgtkBdbYrD+4rgyS5utArg5NCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmI85i3K=JFfFVBD0eBubYHAlMp1RD9D=Dw6cVifFJBD0eBgvWqdbY/1yV5K5UiK0iFfFui8=+BD0e/AtkpDcmIDpJ3V=rRj=1aJCM8KMeofvkddMSw1M+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqHegSYofV1+6bNpVkSBC=NPuvkxMp+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+LzRPIjweH10D9D=I460U5gxSO1RD9D0eNgtrk7qf3DSeoAwNCube5gvHrgxknD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=Dnf=uvfcuvfcuvfcuvfcuL60U5gyS3dbY/1yV5K5Uw85i/K=J/8CI3K=u460U5gyTn1vk3AtYkDcmIK=In8F7w8c7wf=7Ff5PIDqM/dtJ5K5U5tp/wM34qYceoRprpVVklAteHMpMH1wDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5VlMy8=1NRVf=utfqV/AXM/AlutT5AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8C8360U5gxSO1RD9D0efAtO/g0NCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5Uw6cJP8c7LfF7LfF7LfF7LfF7BD0eBubYHAlMp1RD9D=Dw6cVP8FVi8=Dw8c+FK=uBD0eBgvWqdbY/1yV5K5UiK0iF8CJw8c+ifFD48CJF60U5AbMH10D9D0eqgcNwdLmO1b7/8VHYt0/=Cy8LA+TYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ec8+WtAS1+dkMa7MfVjtANCMeoCpMLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U4f=7P60U5gxSO1RD9D0eCut43D+4rdvVIJpmIJx4ouvB560U5ub1k7xSq1MTwubYHgx75K5Uw6cJBD0eBubYHAlMp1RD9D=Dw6cVW8=V48C74fcI4fC+Ff5PIDx4ogxAHAlMp1RD9D=Ii6cJwfcI/8CIW8=pi8CDBD0e/AtkpDcmIDp7wRq7Of/UvV+OrASSejySZAM+Pjt7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxIWALmOJc7i7SkWMS+31Mrz8tOx7b7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=D3zRPIjweH10D9D=J38RPIDxWrgtV5K5U5Rykn1lMFAySnDSYr7qMnDSfrgxAmuRDBD0erAxMwutAkbLerAykn1wD9D=Dn8Fp/K=8F8F8F8F8F8F8F60U5gyS3dbY/1yV5K5Uw85i/8CIP8cJFfFUW60U5gyTn1vk3AtYkDcmIK=In8Fu4fCDLKCIPfwPIDqM/dtJ5K5U51pIOuMMBCye47lSnV/e8ucAM1SNoJRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5MpPvb34RtpfK7yYvVtTtYMHYj+7FVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8cfT60NsDxkpDcmI8CpP60U5gxSO1RD9D0eKubfXubePAbDIVvSwuxTZutWHg5DBD0erAxMwutAkbLerAykn1wD9D=Dn8FpPfcD/60U5gyS3dbY/1yV5K5Uw85i/8=uiK=DwfCuifcU460U5gyTn1vk3AtYkDcmIK=In8F+w8CJW8FIv8CJ/85PIDqM/dtJ5K5U5AlY/Mxe5ftkuR/YlVvAxtx4eut4EAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U51+401xrt7x+itkrFVpTcJve=Yve3VRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8Cu460U5gxSO1RD9D0e01tWqutPIMtWHAyMpD+fBAtD560U5ub1k7xSq1MTwubYHgx75K5Uw6c8LfRPIDx4rAyk3AtYkDcmI8cDnfC+w8wPIDx4ogxAHAlMp1RD9D=Ii6c83fFpBD0e/AtkpDcmIDxYVRkGid=k1ucV4C/+L7qkYRx8/d3+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqeiKSklCcA6tSHL7/foJqeaMR/iRx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=8LK0PIDxWrgtV5K5U5VvSmdbYWuRNJubeH7vrr10NCube5gvHrgxknD+Y/7xAoAlfru5DBD0erAxMwutAkbLerAykn1wD9D=Dn8FVBD0eBubYHAlMp1RD9D=Dw6cVW8=Jvf=uwK=pBD0eBgvWqdbY/1yV5K5UiK0iFfF8WfFuwf=pi60U5AbMH10D9D0eV8tYMYpYVdCeab3OC1cf4u/N0CvAND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eJMtTqMqHWtlraJCYY1kA5JvS61/kqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5Ui8cJBD0enut/kDcmIDpSq7xSpAbJIMtYrjRNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5Uw6c8F8F8F8F8F8F8F8F8F8FVBD0eBubYHAlMp1RD9D=Dw6cVF8F7WK=DF8C7BD0eBgvWqdbY/1yV5K5UiK0iFf=+WKC8/8=8F60U5AbMH10D9D0exAMTwf/1Cb/Ye8R/RRy4R8kA5Mp/qD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eOukVwASeEMledAl1C1x/C8/rvCVrqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5UWf=7BD0enut/kDcmIDp/ogxT3gLfmDSfO7xk3jRNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5Uw6c8F8F8F8F8F8F8F8F8F8FVBD0eBubYHAlMp1RD9D=Dw6cV4K=VFf=I/K=JBD0eBgvWqdbY/1yV5K5UiK0iFf=DWfFpiK=Vv60U5AbMH10D9D0DWJCUvfyrtub1PjMHY8MSE8+ApfF1LD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eWVv84ttH3YyW47R/VupAMM/k473WYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U4fCUBD0enut/kDcmIDper7xkFdy+IMySwAtiIMykwAyrrD5PIDxSv1ber1vMz7xS3dtWqDcmI85iF8F8F8F8F8F8F8F8F8F8BD0eBubYHAlMp1RD9D=Dw6cJif=VP8RPIDx4ogxAHAlMp1RD9D=Ii6c84KC+WKRPIDqM/dtJ5K5U5bLfPRCSidqYn7lMPVpeCM=Vv8brWAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5gFkE1CSiuprLRMrJM=Vvb/fYfLed1wDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8F7v60U5gxSO1RD9D0e0dtYWubfr1vSwDSMpjtSnD5PIDxSv1ber1vMz7xS3dtWqDcmI85iF8F8F8F8F8F8F8F8F8F8BD0eBubYHAlMp1RD9D=Dw6cVi8=p/8cJ3K=JBD0eBgvWqdbY/1yV5K5UiK0iFfF8P8FUPKCDBD0e/AtkpDcmIDcVw1t1rCvM+1p4F7/ekVCfwVSMuYM+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDp+WdvSkuC8W8vepVkS1uVAH731Hut7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=JvfwPIDxWrgtV5K5U5RvS5dbYH7qYmuRDBD0erAxMwutAkbLerAykn1wD9D=Dn8F+wfRPIDx4rAyk3AtYkDcmI8cDnfCJPfCU48=748wPIDx4ogxAHAlMp1RD9D=Ii6c8w8cJPK=ui8FuBD0e/AtkpDcmIDkkxMCY3dvu3YvSkjMSfYvp4fbHRut7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqSS13fdfceH7VHFMkfkjqM=R+IPYk+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=7360U5gxSO1RD9D0elgvS5utArg5NCube5gvHrgxknD+Y/7xAoAlfru5NCut/HAyp560U5ub1k7xSq1MTwubYHgx75K5Uw6cD/60U5gyS3dbY/1yV5K5Uw85i/KC+4fCIP8c8w60U5gyTn1vk3AtYkDcmIK=In8F7wK=u38=8PK0PIDqM/dtJ5K5U5Mlrqf3fFMVIWC=piVtW48vHNA3/rVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5MVe0tbSkAVHm7SrKVMH6JpP/CCrFJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8C1T60NsDxkpDcmI8c+/60U5gxSO1RD9D0eNuxSFubeHdv+IJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=Dn8cVBD0eBubYHAlMp1RD9D=Dw6cVPfFUL8F84KC8BD0eBgvWqdbY/1yV5K5UiK0iFfFU48C7L8cIW60U5AbMH10D9D0eouLS6C3kZAvA4CqAVJV34VL7ifcfLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eiKlrKM3AVYVAPg+SVAykYR3eo8+OLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5UFfFUBD0enut/kDcmIDkfmAtWwuRNJut4BdRDBD0erAxMwutAkbLerAykn1wD9D=Dn8cVBD0eBubYHAlMp1RD9D=Dw6cVvfFu/fc+if0PIDx4ogxAHAlMp1RD9D=Ii6c8W8c83KCDvf=uBD0e/AtkpDcmIDx/cJcADdyf/1FuLA/YFubYmfx1B7q7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkSSMtVWuvk/8bNrVMfubFe3jC7wV3+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=7Wf0PIDxWrgtV5K5U5JxMmut4rD+Sq7xSpAbJIJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=Dn8cVBD0eBubYHAlMp1RD9D=Dw6cVP8FUwK=DBD0eBgvWqdbY/1yV5K5UiK0iF8C+wKCDF60U5AbMH10D9D0eHgbeujVMk1cNdCvfRRcfi8Ff4bFAND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DO8kmLt=Nf7xBvAkTCVVfyRx4SJqSqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5U3fc8BD0enut/kDcmIDcDPDSNrgy4HD5PIDxSv1ber1vMz7xS3dtWqDcmI85iw8=848cVBD0eBubYHAlMp1RD9D=Dw6cVW8FV4K=uvf=IBD0eBgvWqdbY/1yV5K5UiK0iFfC7Wf=u/fFUw60U5AbMH10D9D0e=j=JOC/k5u3YeRFSCf=VWtqrvMcSLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eXfSN4CVSCVMr8jlHCJMTO1qYi1=YND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5U38=VBD0enut/kDcmIDper1v/r7xpI8CJI1bDIVySBglp560U5ub1k7xSq1MTwubYHgx75K5Uw6c+Wf=J3f=J3f=J3f=J3f=uBD0eBubYHAlMp1RD9D=Dw6cVi8FUFfF+BD0eBgvWqdbY/1yV5K5UiK0iFK=ULKC+W60U5AbMH10D9D0DW6MNH8lpwJprP1pMRVperRtYpdxYYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eNC+SqYvp/7+m3Ay4Cu33WdcJP13rqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5Uwfc+BD0enut/kDcmIDper7xkFdy+IttT/AyIIJv4/u5DBD0erAxMwutAkbLerAykn1wD9D=Dn8C8/f=+vfcuvfcuvfcuvfRPIDx4rAyk3AtYkDcmI8cDnf=7W8=7W8FJP8c+4fRPIDx4ogxAHAlMp1RD9D=Ii6c8P8cuFfFuw8cJw8=+BD0e/AtkpDcmIDkruR3+OJ/e3gMkdd/futSNYu/mif/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpTXAVHzJ3V/jbSHjkSxYpPW1pkK8p+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=7w8wPIDxWrgtV5K5U5RvS3uRNJAtO/75N+AbequRNJAtHrD5PIDxSv1ber1vMz7xS3dtWqDcmI85i48=JW8FIwfF+v8=JW8FIF60U5gyS3dbY/1yV5K5Uw85i/8c7PfFIWfcDi60U5gyTn1vk3AtYkDcmIK=In8F7W8cu3K=UW85PIDqM/dtJ5K5U5RvACgVfxgp4l7cYBM+TiC+W1ClkNVRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5fV168V3wAySBflk0VpViCqYRAV49VRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CAT60NsDxkpDcmI8cDw60U5gxSO1RD9D0eJutYOubN/dLMwDSkoAbYmD+SF7vTcdtS3dtTnD5PIDxSv1ber1vMz7xS3dtWqDcmI85iPK=8F8F8F8F8F8F8F8F8BD0eBubYHAlMp1RD9D=Dw6cVF8C7FfCVLKCJBD0eBgvWqdbY/1yV5K5UiK0iFfCD48c+PfcIBD0e/AtkpDcmIDcrqfbIOgSfcfyTtKSSbVx1tVbI38V+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDkNog3k1YtMERy+L1SYdt+M6Ypr+Rv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=8460U5gxSO1RD9D0eJubYmAbeHutAmubYrDSNrgxfm1bDIVySBglp560U5ub1k7xSq1MTwubYHgx75K5Uw6cUv8cVBD0eBubYHAlMp1RD9D=Dw6cViK=uBD0eBgvWqdbY/1yV5K5UiK0iFfC7FKCpBD0e/AtkpDcmIDxru7pHxuxWfRpBFCkSCACMuKlN98t7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDqe6fV+vgq13M3mWg/SYVk1B7c+3Jt7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+3zRPIjweH10D9D=pW8RPIDxWrgtV5K5U5MySwAtiIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI85iP60U5gyS3dbY/1yV5K5Uw85i/8CD4KC8wKC8BD0eBgvWqdbY/1yV5K5UiK0iFf=uifFDw8F7/60U5AbMH10D9D0eW1t4SVcro1=A5RqMC13Wm8C1JA=SLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0edYtAOA/YrY=8v1tWYRxTZMVp/g3eND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5U48C8i60U5gxSO1RD9D0eKutAr7xerjxSwDSfr7xeodxTndti560U5ub1k7xSq1MTwubYHgx75K5Uw6cUBD0eBubYHAlMp1RD9D=Dw6cuw8F838CU4KC+BD0eBgvWqdbY/1yV5K5UiK0i38CJvf=V4fC7i60U5AbMH10D9D0DO83T9fCpv1/G3JMMRfFewdbJF1yWYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0erdxOk1V1aYyAPVvAVY3eYRxryutHqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kl3BDlB5dtJ5K5U48c+460U5gxSO1RD9D0eN1Ler1lM3D+fBAtD560U5ub1k7xSq1MTwubYHgx75K5Uw6cUBD0eBubYHAlMp1RD9D=Dw6cVWfCUiK=8v8c8BD0eBgvWqdbY/1yV5K5UiK0iFf=84fF7Ffc8F60U5AbMH10D9D0eqAprpV3eKAST4t5/RdxHaMySFfqfYD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0e5d+pWYbe3tkDvVtrYC/MOCvfOgVAqD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kl3BDlB5dtJ5K5U48Fu/60U5gxSO1RD9D0e6dykpdbePAbDIRqM5gvAo7vr3dyp560U5ub1k7xSq1MTwubYHgx75K5Uw6cUBD0eBubYHAlMp1RD9D=Dw6cV38FDLfCD3fF7BD0eBgvWqdbY/1yV5K5UiK0iF8Cpif=p/f=8L60U5AbMH10D9D0eJCxTcAx73J3+37qeYAceduLSKY+/qD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0ezRSA6uMmO8MN6d=kV6MMiRVHnVv1qD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kb3BDlB5dtJ5K5U48Fuv60U5gxSO1RD9D0e6dtYp1bePgLekDSfr7xeodxTndtiIYlMw1vT37vSvD5PIDxSv1ber1vMz7xS3dtWqDcmI85iP60U5gyS3dbY/1yV5K5Uw85i/8FILfcUFKCpL60U5gyTn1vk3AtYkDcmIK=In8FD3K=8LfCJ3K0PIDqM/dtJ5K5U5CSkVV/18CvrYR3Y1Mlr=uxezYlN=JRDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5g=+OuFNSJqfufSTLM0/ct+/NftY6AwDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CkT60NsDxkpDcmIf=8/60U5gxSO1RD9D0eRut/pAt4rg0NCubeXubDIVLYw1tM3D5PIDxSv1ber1vMz7xS3dtWqDcmI8RiWKC8PfCV/fCV/fCV/fCVv60U5gyS3dbY/1yV5K5Uw85i/K=7W8C8F8CV/60U5gyTn1vk3AtYkDcmIK=In8FuvKCpPfcI/fRPIDqM/dtJ5K5U5AkT/ApTxfMekfLI4MlM4RbrYRSmiAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5jCULRvO5uFSRfxWcMyeqKSeXY=enVRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8ceT60NsDxkpDcmIf=+460U5gxSO1RD9D0e07xkn1yS5utiICtS37xpICtSn1ykwD5PIDxSv1ber1vMz7xS3dtWqDcmI8RiWfRPIDx4rAyk3AtYkDcmI8cDnfCIw8=+vfwPIDx4ogxAHAlMp1RD9D=Ii6c8L8cIPfF7BD0e/AtkpDcmIDxMlKSIWC+ekfLUL7/Y6ubHwMSY1R3+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcpwYLu4f33WdtebMSfF8pWzRyVPgb7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=7/f5PIDxWrgtV5K5U5JxkpdySnDSfr7xSndRNNAy4r7wN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI8RiWfRPIDx4rAyk3AtYkDcmI8cDnfCpW8FV/K0PIDx4ogxAHAlMp1RD9D=Ii6c8L8cpiK=8BD0e/AtkpDcmIDpfZuLH3tSYzASHE1kSJglkn8/YNfq7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcML1+Sp7p/JA+HEtMJPdkN+7SM9Kl7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DFzRPIjweH10D9D=+Pf=7BD0enut/kDcmIDkf/gxYrjRN=glM5DSfr7xeodxTndti560U5ub1k7xSq1MTwubYHgx75K5U46cp3f=J3f=J3f=J3f=J3f=JBD0eBubYHAlMp1RD9D=Dw6cuvKC+P8cuW8cDBD0eBgvWqdbY/1yV5K5UiK0iFfcu/fCIif=pi60U5AbMH10D9D0DLJxYdgyOdM3TdMvAC6tfFRyHpJxALD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0exK+JvJ31Btc+3MyMYtpPwdLfb8FrLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4Kl3BDlB5dtJ5K5Uw8cVBD0enut/kDcmIDkYwdtSn1LMBubDIVySwdwNCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmI8Rii8F8F8F8F8F8F8F8F8F8/60U5gyS3dbY/1yV5K5Uw85i/8C7W8FD4KCDBD0eBgvWqdbY/1yV5K5UiK0iFfCIF8=7Pfc8i60U5AbMH10D9D0eiVVSw1CeNgkHwJCNR1q+4jkrcYVSLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0emfMpiJxSR1lAwubfRYvmWKVOCMMHYD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5ULfRPIDxWrgtV5K5U5RySwdRNldyTFd0NCAlek1bJIVvSwuxTZgvWHg5DBD0erAxMwutAkbLerAykn1wD9D=+nK=8F8F8F8F8F8F8F8F8F8wPIDx4rAyk3AtYkDcmI8cDnfCpP8FU/8=p3fRPIDx4ogxAHAlMp1RD9D=Ii6c8vK=D48FUwfFJBD0e/AtkpDcmIDqNrJLNF8p1yVvSRfSYFfVYndCpOtp+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxf=7/1VRSrlAbSXg/Ytf/Hw1MARCx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=DwzRPIjweH10D9D=pw60U5gxSO1RD9D0eVube/g5NC7yTwAykn1wN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI8Rii8CD/60U5gyS3dbY/1yV5K5Uw85i/K=uwfC+WKCVw8cUv60U5gyTn1vk3AtYkDcmIK=In8Fu/8=VifF8i8FVWfwPIDqM/dtJ5K5U5tx4w7peoRxH3R34=VtSH1leutcUWAwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U5dCuiMMYYjyMCutGFVLfEdMfiu/DLJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8ceT60NsDxkpDcmI8Cu/60U5gxSO1RD9D0e+dt4H70NCgbeHAypIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI8Rii8=V/fCV/fCV/fCV/fCVv60U5gyS3dbY/1yV5K5Uw85i/8C7LKCpBD0eBgvWqdbY/1yV5K5UiK0iFf=JW8=DBD0e/AtkpDcmIDqNzVLSb8bNoKCYS8kedJV138=V41p+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcSlKt1Y1Ve36beOCkf5tSHpMMStuq7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=u/60U5gxSO1RD9D0eCut43D+4rdvVIJVVIJx4ouvBI6RNJube3D=D560U5ub1k7xSq1MTwubYHgx75K5U46c7W8CuvfcuvfcuvfcuvfcVBD0eBubYHAlMp1RD9D=Dw6cuP8=7L8CDvfcpBD0eBgvWqdbY/1yV5K5UiK0i38C8/8=DwfFpw60U5AbMH10D9D0efAFk86Cf1dxB/jVMVKMfrYlpFgp1LD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eb7lMz6MAmKSpLfFYY7kTe1k137qfLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5UFfFVBD0enut/kDcmIDkNrgy4HuxSFdypIYlMw1vT37vS5D+fogt/HAlYk1RDBD0erAxMwutAkbLerAykn1wD9D=+nfFVBD0eBubYHAlMp1RD9D=Dw6cVifCIv8F+Lf=IBD0eBgvWqdbY/1yV5K5UiK0iFfcILfcD/8C+L60U5AbMH10D9D0epYFAxfFD/JcY6j=eVf/HwYMABVyfND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0eBCMUitS1PYl73ftWCAyB4Ax1+8CfLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fb3BDlB5dtJ5K5UL8cUBD0enut/kDcmIDkYr7qMnD+Yrg0DBD0erAxMwutAkbLerAykn1wD9D=+nfFVBD0eBubYHAlMp1RD9D=Dw6cJi8=I3f=pBD0eBgvWqdbY/1yV5K5UiK0iFf=8w8FJF60U5AbMH10D9D0em7LUPCFYDVv83KCkRA3OM7+Sq8pSND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0D3K=eLAq11bLAdYSrR8cA81FSr1FSND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5ULfcuBD0enut/kDcmIDkNrgxYHAykWuRNCutWpdy+IVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI8RiLfRPIDx4rAyk3AtYkDcmI8cDnfCD48CDw85PIDx4ogxAHAlMp1RD9D=Ii6c8/fFVW8=8BD0e/AtkpDcmIDkMNMLkdKVm4g3O5gSe+CSSvdMri1M+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDcSqVpYS8vfiA3468/YLgMftdpro1k+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=7ifwPIDxWrgtV5K5U5YqeH1tWp7wNMgxkog5DBD0erAxMwutAkbLerAykn1wD9D=+nfFVBD0eBubYHAlMp1RD9D=Dw6cV4fc+/KCp/fcpBD0eBgvWqdbY/1yV5K5UiK0iFfC7F8CuWfc8360U5AbMH10D9D0ePtlfRgVHPgvi3uVTC1SrFKtiOVCSND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DO1y/eY/AdCxA11teVJvIPgSAvf/AND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5ULfcJBD0enut/kDcmIDkerdxYrgxArD+SO7x+IRvSZutiIRvSBjtSnDSfrgtk3dRDBD0erAxMwutAkbLerAykn1wD9D=+nfFDLfF7LfF7LfF7LfF7LKRPIDx4rAyk3AtYkDcmI8cDnfC+v8C7FKRPIDx4ogxAHAlMp1RD9D=Ii6c8W8cUFK=JBD0e/AtkpDcmIDxkt1lJ48MkbM3OZ8Se0d+HWKtWyRL7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDpkCRveZjCSeRpO+RSYYfy1qbvP/Rv7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=838RPIDxWrgtV5K5U5MtYWut/HDSk/uxSXD+ewdtWpuRDBD0erAxMwutAkbLerAykn1wD9D=+nfcuvfcuvfcuvfcuvfcuvfwPIDx4rAyk3AtYkDcmI8cDnfCp3fcUvf0PIDx4ogxAHAlMp1RD9D=Ii6c8v8CIifc+BD0e/AtkpDcmIDqNugCeWCLAv1pHPtMDiAbuP8p4vu/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxkYCbrqgSMuCbS9VMYEMcAHYlMxVp+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=+/85PIDxWrgtV5K5U5CtkButiIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI8Ri/KC8LfRPIDx4rAyk3AtYkDcmI8cDnfCJ48=7FfCUP85PIDx4ogxAHAlMp1RD9D=Ii6c8w8F8Lfc+vK=JBD0e/AtkpDcmIDpkPYxG/K0/vuvGPJMSfRbe9j+r4fv7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDxYKKMSBjxW/V3klJ/exV3TYApGOAV+560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+WzRPIjweH10D9D=Vw60U5gxSO1RD9D0eCdt/BuRN0jtSWut3IVvSOdbYWD5PIDxSv1ber1vMz7xS3dtWqDcmI8Ri3fCIF8F8F8F8F8F8F8F8F60U5gyS3dbY/1yV5K5Uw85i/K=V360U5gyTn1vk3AtYkDcmIK=In8Fu3K=pW60U5AbMH10D9D0eaC3AZVy/5Mw/etkeRj+TqCxHE1bYLD5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0enJ3AC1=1SJxM8uk1Y7VSDf=foVyTLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cUw8q3BDlB5dtJ5K5UFfc7BD0enut/kDcmIDperAlYrgy+IMtYrjRNCutWqdy+560U5ub1k7xSq1MTwubYHgx75K5U46c8LfRPIDx4rAyk3AtYkDcmI8cDnf=pFfcIWKCD3K0PIDx4ogxAHAlMp1RD9D=Ii6c8LKCD4KC8L8=JBD0e/AtkpDcmIDkkRVt/ifSMngvTz8kSO1LeNfvWru/+560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDk8idcMbYC1ijySXtMYHRbIFJw3/ML7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=+P8FUBD0enut/kDcmIDp4rdvVIMyMw7xSc1RN+utOFdykn1tVIVvSn1vrrD5PIDxSv1ber1vMz7xS3dtWqDcmI8RiFfFVBD0eBubYHAlMp1RD9D=Dw6cV4fcDPfFVBD0eBgvWqdbY/1yV5K5UiK0iFfCuFK=+i60U5AbMH10D9D0eDupSRCMYOMxTP8/1C7MTZuCrp13MND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0D48SAZ7c1/JFSabLfCVF1+13ka8STLD5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fL3BDlB5dtJ5K5U48C+BD0enut/kDcmIDpYkuxYr7qVIYxS3utB560U5ub1k7xSq1MTwubYHgx75K5U46c8v8C+48C+48C+48C+48CDBD0eBubYHAlMp1RD9D=Dw6cVP8cuw8c8vfCJBD0eBgvWqdbY/1yV5K5UiK0iF8C7/fc+W8Fu/60U5AbMH10D9D0eaMp8igx1zMSr473kYCCrOMt4HRpMND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DWdFAkYlerCpSw6VkCRFJF7+k/fFfND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq3BDlB5dtJ5K5Uvf5PIDxWrgtV5K5U5VvSBA0N8utOkD+eSD+eBgvfXD03IVySwA0UwD5PIDxSv1ber1vMz7xS3dtWqDcmI8RiF8F8F8F8F8F8F8F8F8F8F60U5gyS3dbY/1yV5K5Uw85i/KCuLK=U3f=Vw60U5gyTn1vk3AtYkDcmIK=Inf=+w8cVw8=VW85PIDqM/dtJ5K5U5VlfnucrBJ/SrtkSzVxI/fqrqgyH6AwDBD0eH7/TPAteBdt85K5N37qMk60U5uxSngxMwbLNmgLYobLM/dtJ5K5U58vWtVyp3bw/oC=rCV3WmJpmFVSHeJRDBD0e5utWn1bez7yroAyTzjtMr75D9D=DP8CMT60NsDxkpDcmI8F7F60U5gxSO1RD9D0eCdt/BuRNC7yTwAykn1wN=glM5D5PIDxSv1ber1vMz7xS3dtWqDcmI8RiwfF7LfF7LfF7LfF7LfFIBD0eBubYHAlMp1RD9D=Dw6cVifCUw8=pvKRPIDx4ogxAHAlMp1RD9D=Ii6c8vfc7wfcJ3f=8BD0e/AtkpDcmIDkYW8SNHdvS4VyeBg/8wfyS/JMTqdx7560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDk+FC+WVuLH6AkpP8Me1fkA6uCNWKb7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+vzRPIjweH10D9D=J480PIDxWrgtV5K5U5RvSHgySFd0N0gLfkDSf37xMkA0NCube5gvHrgxknD5PIDxSv1ber1vMz7xS3dtWqDcmI8RiwfRPIDx4rAyk3AtYkDcmI8cDnfCIwKCJWKRPIDx4ogxAHAlMp1RD9D=Ii6c8L8=UP8CuBD0e/AtkpDcmIDce0d/+LClSzKCMK6MfxKMSydLedt++560U5dbfz7lM5gykcDcmIAle/1RPIDxergxWk7kTPdyT3g/T/AtkpDcmIDc1z7cNk7tAqfpkeYMfK8vTr1cNwMx7560U5uxSngxMwbLNmgLYobLkkubD5K5Uw8=+/zRPIjweH10D9D=JL80PIDxWrgtV5K5U5JxSBglkqAtWq1RNJAbe5uRNJut4BjRDBD0erAxMwutAkbLerAykn1wD9D=+n8cVBD0eBubYHAlMp1RD9D=Dw6cVw8c8Pf=JBD0eBgvWqdbY/1yV5K5UiK0iFfF+3K=U360U5AbMH10D9D0e8dtDiJCfEMxJLjkSCMvOqY3rCgyMND5PIDxkFbLN/ux4HuwD9DlYwAtVBD0e5utWn1bez7yroAyTzAbMH10D9D0DidvrVfpAw7LrogyrRftWmdS1oAlSND5PIDxergxWk7kTPdyT3g/TW1tSwDcmI8cU4fq/A60U5ubAr7xYFDcmItLB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=+360U57ySn1ySBbvkpDcmI8CDWzRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e+dbfcgL1k7qpIgvuIAyrkDSkkubD560U5jtMr75D9D=DP8CJBD0ePutWput4zdtJ5K5U4f=YT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpSwAykFutiIgvuIAyrkDSkkubD560U5jtMr75D9D=DP8CJBD0ePutWput4zdtJ5K5U4K=NT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIVlMZuRDBD0eW1tSwDcmI8cU4f0PIDqNrgxYrgSTH10D9D=+i8L3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5Yt/k7xAHgx7IgxMLDySwAykFA0DBD0eW1tSwDcmI8cU4f0PIDqNrgxYrgSTH10D9D=+Wfb3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=+360U57ySn1ySBbvkpDcmI8c73zRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e01bf3DSN/dx+560U5jtMr75D9D=DP8CVBD0ePutWput4zdtJ5K5U48ckT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIVlMZuRDBD0eW1tSwDcmI8cU4fRPIDqNrgxYrgSTH10D9D=+w8L3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=+/60U57ySn1ySBbvkpDcmI8CVizRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e+dbfcgL1k7qpIgvuIAyrkDSkkubD560U5jtMr75D9D=DP8CVBD0ePutWput4zdtJ5K5U48C1T60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpYH7vfoAxMwjRNo15N3dyVIttMr75DBD0eW1tSwDcmI8cU4fRPIDqNrgxYrgSTH10D9D=8LKb3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0Ne1yTBD+SwAykFuti560U5jtMr75D9D=DP8CVBD0ePutWput4zdtJ5K5UwKb3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=+v60U57ySn1ySBbvkpDcmI8CVizRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e01bf3DSN/dx+560U5jtMr75D9D=DP8CuBD0ePutWput4zdtJ5K5U48C1T60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIVlMZuRDBD0eW1tSwDcmI8cU4f5PIDqNrgxYrgSTH10D9D=+wfL3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5YykFuvTv1beWDyTxDlYm1RN11tSwD5PIDqkkubD5K5Uw8=+v60U57ySn1ySBbvkpDcmI8C8/zRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e+dbfcgL1k7qpIgvuIAyrkDSkkubD560U5jtMr75D9D=DP8CuBD0ePutWput4zdtJ5K5UFfFeT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIRtYog0NN7qYH7vSnD5PIDqkkubD5K5Uw8=+v60U57ySn1ySBbvkpDcmI8ckT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDkfP1tfHutPIRqMwjRNNAvSw10DBD0eW1tSwDcmI8cU4f5PIDqNrgxYrgSTH10D9D=+wfq3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5YykFuvTv1beWDyTxDlYm1RN11tSwD5PIDqkkubD5K5Uw8=+L60U57ySn1ySBbvkpDcmIfcfT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpYH7vfoAxMwjRNo15N3dyVIttMr75DBD0eW1tSwDcmI8cU4fwPIDqNrgxYrgSTH10D9D=8/fL3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0Ne1yTBD+SwAykFuti560U5jtMr75D9D=DP8C7BD0ePutWput4zdtJ5K5U48C1T60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDkfP1tfHutPIRqMwjRNNAvSw10DBD0eW1tSwDcmI8cU4fwPIDqNrgxYrgSTH10D9D=8/zRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e01bf3DSN/dx+560U5jtMr75D9D=DP8C7BD0ePutWput4zdtJ5K5U4K=NT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIVlMZuRDBD0eW1tSwDcmI8cU4fwPIDqNrgxYrgSTH10D9D=+wKb3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=+L60U57ySn1ySBbvkpDcmIKCuFzRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e+dbfcgL1k7qpIgvuIAyrkDSkkubD560U5jtMr75D9D=DP8cDBD0ePutWput4zdtJ5K5UvzRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e01bf3DSN/dx+560U5jtMr75D9D=DP8cDBD0ePutWput4zdtJ5K5U4fCrT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIVlMZuRDBD0eW1tSwDcmI8cUw85PIDqNrgxYrgSTH10D9D=Dw8l3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=Dw60U57ySn1ySBbvkpDcmI8C8ifb3BDlB5ubAr7xYk75D9D0eN7vkrg5NJutknAl8IVvrr7xSpDSfmut/Outi560U5ubAr7xJ5K5U5JxMFA0NJAtHrD5PIDqkkubD5K5Uw8=Dw60U57ySn1ySBbvkpDcmI8F7wzRPIjwerAvSw1yMwDcmIDpSFdtSnDSNrdtW37wNCdySwutJIVvrrgt/rg5DBD0erAvSw10D9D0e01bf3DSN/dx+560U5jtMr75D9D=DP8cDBD0ePutWput4zdtJ5K5U48=YT60NsDxSLubep1bD5K5U5JbfHutiIVySHgqYFDSfmuber10NCdySOgtSnD5PIDxSLubepDcmIDpek7LJIRtYog0NN7qYH7vSnD5PIDqkkubD5K5Uw8=Dw60U57ySn1ySBbvkpDcmI8FMTbRPIDx4r7lfkDcmI80iw8F83fCp3fFDvfCuwfb3Q" +} \ No newline at end of file diff --git a/external/pandalData_decrypted.json b/external/pandalData_decrypted.json new file mode 100644 index 0000000..e12dbb9 --- /dev/null +++ b/external/pandalData_decrypted.json @@ -0,0 +1,2955 @@ +{ + "pandals": [ + { + "id": 1480, + "name": "Alipore Sarbojanin", + "average_rating": 4.75, + "latitude": 22.519229233682353, + "longitude": 88.33339031785727, + "uuid": "8pRcucEjlra4RxhHk2QaIg", + "is_public": true, + "banner_photo_uuid": "f9_xQ34HV7F0TEx2ickDnw", + "banner_photo_year": 2024 + }, + { + "id": 379, + "name": "Behala Friends", + "average_rating": 4.709104938271604, + "latitude": 22.5014850228278, + "longitude": 88.3195457607508, + "uuid": "iqFChBeyXqgdTPV4tqjdnA", + "is_public": true, + "banner_photo_uuid": "VTrYUFt20Z9qSeZJcyUYtw", + "banner_photo_year": 2023 + }, + { + "id": 119, + "name": "Bosepukur Sitala Mandir", + "average_rating": 4.629081384015595, + "latitude": 22.519231401664, + "longitude": 88.3848277106881, + "uuid": "iW6eBmUkNKggRUm2E0W2aQ", + "is_public": true, + "banner_photo_uuid": "SkHhaSJcYIgYQzKKAEaqKg", + "banner_photo_year": 2024 + }, + { + "id": 10, + "name": "Telengabagan", + "average_rating": 4.596371882086168, + "latitude": 22.5944335, + "longitude": 88.3854688, + "uuid": "R05UELKriIKLTU6-yOalhA", + "is_public": true, + "banner_photo_uuid": "NIhG5Y2OIbqcT8HE13Fodw", + "banner_photo_year": 2016 + }, + { + "id": 116, + "name": "Behala Nutan Dal", + "average_rating": 4.57182815255732, + "latitude": 22.500401, + "longitude": 88.320297, + "uuid": "0fEQ_Nq38451Se9LB0UzpA", + "is_public": true, + "banner_photo_uuid": "xbViELMHvLe9Q_sS7xYRjQ", + "banner_photo_year": 2024 + }, + { + "id": 128, + "name": "Rajdanga Naba Uday Sangha", + "average_rating": 4.541121321823077, + "latitude": 22.5166, + "longitude": 88.390999, + "uuid": "2jzmVbQTZoMXT03r9cHNZA", + "is_public": true, + "banner_photo_uuid": "rrjiPeGoaqm-Q_ghzsCWdg", + "banner_photo_year": 2024 + }, + { + "id": 722, + "name": "Aikyatan Club", + "average_rating": 4.513888888888889, + "latitude": 22.5235691552, + "longitude": 88.3792725205, + "uuid": "z1z1C_E49p4fTwig5RCnag", + "is_public": true, + "banner_photo_uuid": "DUfRbIYiio_zRaxKSYfoaw", + "banner_photo_year": 2016 + }, + { + "id": 177, + "name": "Samaj Sebi Sangha", + "average_rating": 4.502029822029822, + "latitude": 22.5156, + "longitude": 88.3564, + "uuid": "KwGxwjVCNrnbSKyG3PncMQ", + "is_public": true, + "banner_photo_uuid": "hdMumddvrJO0Q9NtwlJPGg", + "banner_photo_year": 2023 + }, + { + "id": 963, + "name": "Tala Park Prattay", + "average_rating": 4.46640350877193, + "latitude": 22.608951094454, + "longitude": 88.382176682353, + "uuid": "2hGKphdGQovHSQIAooZ26Q", + "is_public": true, + "banner_photo_uuid": "vfqmZOl3ZrzxSeHey1DiAA", + "banner_photo_year": 2024 + }, + { + "id": 136, + "name": "Hindustan Park Sarbojanin", + "average_rating": 4.4576264257227045, + "latitude": 22.5176714831, + "longitude": 88.3618179883, + "uuid": "X2MqBdio0qQaRntIoWlYmQ", + "is_public": true, + "banner_photo_uuid": "qouH1JmmZ4aPSqMNkT4OLQ", + "banner_photo_year": 2023 + }, + { + "id": 17, + "name": "Mitali Kankurgachi", + "average_rating": 4.449921874999999, + "latitude": 22.58, + "longitude": 88.394203, + "uuid": "R96dPW5tzLItQvUwPQk-mA", + "is_public": true, + "banner_photo_uuid": "FXlJQdcqSYlMQY0-aUYzEg", + "banner_photo_year": 2018 + }, + { + "id": 130, + "name": "Tridhara Akalbodhan (was Sammilani)", + "average_rating": 4.377735336826262, + "latitude": 22.5196, + "longitude": 88.355301, + "uuid": "QpeuOeUyHIzGQ4pX1BzKSQ", + "is_public": true, + "banner_photo_uuid": "lWPJ_Vz_qL-OThBylrmSKA", + "banner_photo_year": 2024 + }, + { + "id": 1499, + "name": "Sodepur Sahid Colony Sarbojanin", + "average_rating": 4.375, + "latitude": 22.69497573431008, + "longitude": 88.37638042867184, + "uuid": "bkUCVaQLqaQtT9N7a_CgRw", + "is_public": true, + "banner_photo_uuid": "huSN-gOjibuBREeB-5k8fw", + "banner_photo_year": 2024 + }, + { + "id": 155, + "name": "Upanagari Sporting Club", + "average_rating": 4.364444444444445, + "latitude": 22.4726485194, + "longitude": 88.3861188728, + "uuid": "vmqu4VQtZZYnTauHfM-baA", + "is_public": true, + "banner_photo_uuid": "Cs5xEGLdzITySTaU6T33Tw", + "banner_photo_year": 2018 + }, + { + "id": 29, + "name": "Tala Barowari", + "average_rating": 4.34602053039553, + "latitude": 22.6068479046551, + "longitude": 88.376187964338, + "uuid": "h4VLhOyt-ItGR3nSgX6BDA", + "is_public": true, + "banner_photo_uuid": "D4pjYK96FYHqTsjVtLR8JQ", + "banner_photo_year": 2023 + }, + { + "id": 1, + "name": "Ahiritola Sarbojanin Durgotsab Samiti", + "average_rating": 4.31076605812393, + "latitude": 22.5948724933, + "longitude": 88.3571395917, + "uuid": "jQsJUoHWh6QbQS7RFTydPw", + "is_public": true, + "banner_photo_uuid": "OA1irNIVFotER7RNTcoCYQ", + "banner_photo_year": 2024 + }, + { + "id": 156, + "name": "Kendua Shanti Sangha", + "average_rating": 4.265361952861952, + "latitude": 22.4719530809, + "longitude": 88.381413302, + "uuid": "bk8JQ1chTbd0RT6FMMvcZQ", + "is_public": true, + "banner_photo_uuid": "iHOYRVsWOJQUTGUq3zuhMg", + "banner_photo_year": 2024 + }, + { + "id": 812, + "name": "Bagbazar Palli", + "average_rating": 4.25, + "latitude": 22.6012659, + "longitude": 88.3667731, + "uuid": "PvMeTCnVqoetSZNKCpTUkw", + "is_public": true, + "banner_photo_uuid": "acKWbhwEx610SazdNbtaig", + "banner_photo_year": 2016 + }, + { + "id": 158, + "name": "Chetla Agrani Club", + "average_rating": 4.230791096480962, + "latitude": 22.5164615754764, + "longitude": 88.3373213733887, + "uuid": "dexITeyVoLNAQMVPx9LnVg", + "is_public": true, + "banner_photo_uuid": "Cd_4MzK6DbJzTfIxF-5-Mw", + "banner_photo_year": 2024 + }, + { + "id": 372, + "name": "State Bank Park Sarbojanin", + "average_rating": 4.214665919174383, + "latitude": 22.4677069435, + "longitude": 88.3089441465, + "uuid": "y7Mizhrr-YBwRMxxEmTwsw", + "is_public": true, + "banner_photo_uuid": "qVf6DmNy0Z2yQu1alifOPg", + "banner_photo_year": 2024 + }, + { + "id": 30, + "name": "Manicktala Chaltabagan Loha Patty", + "average_rating": 4.2005050505050505, + "latitude": 22.5851, + "longitude": 88.3722, + "uuid": "P-MUX1sM5oiSRL0TQhP6Sg", + "is_public": true, + "banner_photo_uuid": "sb-FfK_kTpfgS78N6k21Yw", + "banner_photo_year": 2017 + }, + { + "id": 183, + "name": "Behala Buroshibtala Janakalyan Sangha", + "average_rating": 4.1975599053724055, + "latitude": 22.5037, + "longitude": 88.330803, + "uuid": "_Ocuqyfxp7k-R0fzTDmXvw", + "is_public": true, + "banner_photo_uuid": "W6BfcsS8JbWAQOpdyHYHyw", + "banner_photo_year": 2023 + }, + { + "id": 117, + "name": "Bosepukur Talbagan", + "average_rating": 4.178385416666666, + "latitude": 22.5192942731184, + "longitude": 88.382832147181, + "uuid": "LtkWKw7sfKYiQ9_7kp7lxA", + "is_public": true, + "banner_photo_uuid": "NgVfjaWLDrbsQKSpDjhnvw", + "banner_photo_year": 2018 + }, + { + "id": 395, + "name": "Behala Nutan Sangha", + "average_rating": 4.176583219021491, + "latitude": 22.501958585, + "longitude": 88.3189643349, + "uuid": "eRPG0-w7ZJXxQT0Nt_g1Ig", + "is_public": true, + "banner_photo_uuid": "nbwNzYmvzoq_RRgsty_UuQ", + "banner_photo_year": 2023 + }, + { + "id": 204, + "name": "Jatra Suru Sangha", + "average_rating": 4.1738888888888885, + "latitude": 22.4707096062, + "longitude": 88.3778043423, + "uuid": "VbA_TMI_nJmAQEr48GEgwg", + "is_public": true, + "banner_photo_uuid": "8NboQae5DYdYSer2BQ2x0w", + "banner_photo_year": 2017 + }, + { + "id": 127, + "name": "Naktala Udayan Sangha", + "average_rating": 4.155251893939393, + "latitude": 22.474199, + "longitude": 88.366501, + "uuid": "x3FMHE3k06c1SjiWml967w", + "is_public": true, + "banner_photo_uuid": "Hhm6V2nrc5pWQWdtr34sqA", + "banner_photo_year": 2024 + }, + { + "id": 110, + "name": "Behala Club", + "average_rating": 4.127777777777777, + "latitude": 22.5051427639864, + "longitude": 88.3145391755059, + "uuid": "LFZc8z6alrFRQ0JUmTRnSw", + "is_public": true, + "banner_photo_uuid": "_Asq7Fq2VLvUTZBkLS-IZA", + "banner_photo_year": 2024 + }, + { + "id": 1154, + "name": "Gouriberia Sarbajanin Durgotsab O Pradarshani", + "average_rating": 4.125, + "latitude": 22.5944853744, + "longitude": 88.379181996, + "uuid": "uvV0rxZDaYzvT0fUutSM6A", + "is_public": true, + "banner_photo_uuid": "eUVvRLJrj652SWuwnh7nyw", + "banner_photo_year": 2018 + }, + { + "id": 274, + "name": "Kankurgachi Jubak Brinda", + "average_rating": 4.107142857142857, + "latitude": 22.579599, + "longitude": 88.387802, + "uuid": "AhHiGA4HtZ27ThHxsaWsVQ", + "is_public": true, + "banner_photo_uuid": "_kyVIYCPMajcQwUbj6TMYA", + "banner_photo_year": 2016 + }, + { + "id": 189, + "name": "Purbachal Shakti Sangha", + "average_rating": 4.1, + "latitude": 22.5051, + "longitude": 88.389198, + "uuid": "F-vs_f8hR58yQS5NjNHtrg", + "is_public": true, + "banner_photo_uuid": "s7IRO6ECkJIkTOLNOejwbw", + "banner_photo_year": 2024 + }, + { + "id": 326, + "name": "Lake Garden People's Association", + "average_rating": 4.1, + "latitude": 22.5066139448, + "longitude": 88.3565585047, + "uuid": "1rKjt_tKKrI1RDkRhNJLCg", + "is_public": true, + "banner_photo_uuid": "m0OpX1TREYh5TyYLhzGfZw", + "banner_photo_year": 2015 + }, + { + "id": 969, + "name": "Belgachiya Sadharan Durgatsab", + "average_rating": 4.097222222222222, + "latitude": 22.6075258, + "longitude": 88.3835397, + "uuid": "sdGgHtJ9_Ya3QrkLI67LsQ", + "is_public": true, + "banner_photo_uuid": "Bmk15sMlUbZmTm-jAX6u4Q", + "banner_photo_year": 2024 + }, + { + "id": 133, + "name": "25 Pally", + "average_rating": 4.090343915343915, + "latitude": 22.539303017103, + "longitude": 88.3265305132345, + "uuid": "5-rdNqihzZ8LQUIvJR5ltw", + "is_public": true, + "banner_photo_uuid": "ka16E_hH6JqJQ7clLZEFKA", + "banner_photo_year": 2019 + }, + { + "id": 206, + "name": "Green Avenue Sarbojanin", + "average_rating": 4.067222222222222, + "latitude": 22.4945447129, + "longitude": 88.3811004639, + "uuid": "nqEqdV5fGpeDSWbbRWu38A", + "is_public": true, + "banner_photo_uuid": "LhjfL76sa6AESDDYar6kmQ", + "banner_photo_year": 2015 + }, + { + "id": 194, + "name": "The Bengal Boys Training Association", + "average_rating": 4.0625, + "latitude": 22.5176155298, + "longitude": 88.3413135602, + "uuid": "JLwUPbEcD5JlRMR_-YnCMA", + "is_public": true, + "banner_photo_uuid": "LIxTWVLPfracSvhRUIyolg", + "banner_photo_year": 2015 + }, + { + "id": 707, + "name": "Pally Unnayan Samity", + "average_rating": 4.055555555555555, + "latitude": 22.478176743, + "longitude": 88.3420260251, + "uuid": "8aXGHClXppZWSITkriq9PQ", + "is_public": true, + "banner_photo_uuid": "XsAw06x9t7LSS0ARD2upRQ", + "banner_photo_year": 2019 + }, + { + "id": 50, + "name": "Beliaghata Nabamilan", + "average_rating": 4.05, + "latitude": 22.5651120715, + "longitude": 88.3959346647, + "uuid": "DfAVk6Dkr6epQJa8u98MeA", + "is_public": true, + "banner_photo_uuid": "da-BHcDcNoR_TdjfIkbw-g", + "banner_photo_year": 2015 + }, + { + "id": 123, + "name": "Selimpur Pally", + "average_rating": 4.036796536796537, + "latitude": 22.5051, + "longitude": 88.368103, + "uuid": "u1AbS1upSJdkTDHf0j5EGw", + "is_public": true, + "banner_photo_uuid": "OCJg29S504o7SKsiyVTTAg", + "banner_photo_year": 2017 + }, + { + "id": 180, + "name": "Abasar Sarbojonin", + "average_rating": 4.031821322278912, + "latitude": 22.5276474297106, + "longitude": 88.3490732091495, + "uuid": "RMM7RYtgzoM2SdzmaTUZIg", + "is_public": true, + "banner_photo_uuid": "HgSjKf5tj7kmSlcoJY-02Q", + "banner_photo_year": 2022 + }, + { + "id": 273, + "name": "Bakul Bagan", + "average_rating": 4.0296875, + "latitude": 22.526699, + "longitude": 88.348099, + "uuid": "OOuFKaRTxZEgSXNTKM2xUQ", + "is_public": true, + "banner_photo_uuid": "wnwJ62phQ6rISXxz2Fb3bA", + "banner_photo_year": 2022 + }, + { + "id": 61, + "name": "Beliaghata 33 Pallibashi Brinda", + "average_rating": 4.018601190476191, + "latitude": 22.5687583804, + "longitude": 88.3914163548, + "uuid": "9KcVkpSPsreFSBDi4Sjwog", + "is_public": true, + "banner_photo_uuid": "BU32-lmZ8pxuRg_7YnSf9Q", + "banner_photo_year": 2020 + }, + { + "id": 39, + "name": "Kashi Bose Lane", + "average_rating": 4.01004182449495, + "latitude": 22.5910876288182, + "longitude": 88.3688261922381, + "uuid": "7j_qFy5HmrIDSXJIgyRg2Q", + "is_public": true, + "banner_photo_uuid": "7Q-6UQ-pMbHyRYw3jqUcrw", + "banner_photo_year": 2024 + }, + { + "id": 107, + "name": "Barisha Club", + "average_rating": 4.0029891094759895, + "latitude": 22.481199, + "longitude": 88.313202, + "uuid": "pAByTFGVn6MDTVlgtRB16A", + "is_public": true, + "banner_photo_uuid": "R4CIjfuMzYxsQ2S0pxAjXw", + "banner_photo_year": 2024 + }, + { + "id": 25, + "name": "Santosh Mitra Square", + "average_rating": 4.001753703703703, + "latitude": 22.565901, + "longitude": 88.365196, + "uuid": "DqAx32O2m5NaT8K1BtpEiw", + "is_public": true, + "banner_photo_uuid": "VKDZdwig8roNQd0eKHH02g", + "banner_photo_year": 2018 + }, + { + "id": 377, + "name": "Halshibagan Sarbojanin", + "average_rating": 4.000925925925926, + "latitude": 22.5898855272, + "longitude": 88.3775348646, + "uuid": "xsgMDPIzVrZQTjoxdGNJGw", + "is_public": true, + "banner_photo_uuid": "PkhncTpiRI9TRbBBBD90Aw", + "banner_photo_year": 2017 + }, + { + "id": 214, + "name": "77 Palli", + "average_rating": 4, + "latitude": 22.5062625, + "longitude": 88.367317, + "uuid": "G5YKRlMxe7VKS-xp5sO2CQ", + "is_public": true, + "banner_photo_uuid": "cqwqXvsPGoHcS433tVgpYg", + "banner_photo_year": 2016 + }, + { + "id": 1037, + "name": "Kalighat Milan Sangha", + "average_rating": 4, + "latitude": 22.5241554197, + "longitude": 88.3407818153, + "uuid": "rtDRf47I5IyCS3u-x06PiQ", + "is_public": true, + "banner_photo_uuid": "1-k-AoPW2agdR1bwhsIM7A", + "banner_photo_year": 2017 + }, + { + "id": 1385, + "name": "Chorebagan Sarbojanin Durgotsab Samity", + "average_rating": 4, + "latitude": 22.5834478759, + "longitude": 88.363183625, + "uuid": "8gv63AkOjJr7THzGhyC8kQ", + "is_public": true, + "banner_photo_uuid": "xCDi9caw0qo4QHwNBTL_HA", + "banner_photo_year": 2022 + }, + { + "id": 1568, + "name": "Dakshinpara Durgotshab", + "average_rating": 4, + "latitude": 22.6133173, + "longitude": 88.4211751, + "uuid": "4ScJrPsx54bNTgTx-xbt9A", + "is_public": true, + "banner_photo_uuid": "As6cAcPKYZC7QvpxQ55GAA", + "banner_photo_year": 2024 + }, + { + "id": 91, + "name": "Sangrami", + "average_rating": 3.9800347222222223, + "latitude": 22.590816, + "longitude": 88.3950701, + "uuid": "ZcGEPv3RGplzTv9EPo6Vnw", + "is_public": true, + "banner_photo_uuid": "yMaah8VxipA1TPsGHbkPhw", + "banner_photo_year": 2016 + }, + { + "id": 1048, + "name": "Ariadaha Mousumi", + "average_rating": 3.966666666666667, + "latitude": 22.6663238134, + "longitude": 88.3653028484, + "uuid": "qjiJ8-igmYxlTq8OdqtGig", + "is_public": true, + "banner_photo_uuid": "k9AKrBtCHpemQPCWjGNYOQ", + "banner_photo_year": 2017 + }, + { + "id": 413, + "name": "Sealdah Milan Sangha", + "average_rating": 3.9583333333333335, + "latitude": 22.5720843, + "longitude": 88.3714585, + "uuid": "EWnNvOcGXa7oSH2On1LoHQ", + "is_public": true, + "banner_photo_uuid": "86mypWivdb5-RZNwR9V-ag", + "banner_photo_year": 2015 + }, + { + "id": 6, + "name": "Dum Dum Tarun Dal", + "average_rating": 3.952362825788752, + "latitude": 22.6112, + "longitude": 88.418297, + "uuid": "-KPd9NGk5q0qQ7iqBsTaag", + "is_public": true, + "banner_photo_uuid": "gQZTSIpyuKbwSLxMGPlZKw", + "banner_photo_year": 2024 + }, + { + "id": 36, + "name": "Hatibagan Sarbojonin", + "average_rating": 3.9474430252425043, + "latitude": 22.5942239305217, + "longitude": 88.3719260261853, + "uuid": "nM5fTBWsxpWkQLe8glPrPw", + "is_public": true, + "banner_photo_uuid": "ylfju7PchLVzSKfRKog7aw", + "banner_photo_year": 2024 + }, + { + "id": 270, + "name": "Nabarun Sangha", + "average_rating": 3.939814814814815, + "latitude": 22.568501, + "longitude": 88.311798, + "uuid": "yJWrQfdNHJ6nSSJLL_ry4w", + "is_public": true, + "banner_photo_uuid": "DpD5qJXMkbuDSZjQmx3InQ", + "banner_photo_year": 2014 + }, + { + "id": 272, + "name": "Salkia Tarun Dal", + "average_rating": 3.9375, + "latitude": 22.597601, + "longitude": 88.346199, + "uuid": "FEOpr24Mw4nQS55ZXE2HdQ", + "is_public": true, + "banner_photo_uuid": "eSUkJuTSVL_BQ9S0HkhGcQ", + "banner_photo_year": 2014 + }, + { + "id": 231, + "name": "Sikdarbagan", + "average_rating": 3.9364050558495003, + "latitude": 22.596664172613, + "longitude": 88.3721004237827, + "uuid": "Px1kfEXFV5sXQVEkIgrOyw", + "is_public": true, + "banner_photo_uuid": "1riBEsVhXoZeR155AA3ORw", + "banner_photo_year": 2023 + }, + { + "id": 102, + "name": "Haridevpur Ajeya Sanghati", + "average_rating": 3.935714285714286, + "latitude": 22.4809, + "longitude": 88.3377, + "uuid": "vTcT1QZ4F5q4QQdhOKAL4g", + "is_public": true, + "banner_photo_uuid": "QnEBBN4-T5bOSQqfWwN8fA", + "banner_photo_year": 2024 + }, + { + "id": 706, + "name": "Barisha Tapoban Club", + "average_rating": 3.9270833333333335, + "latitude": 22.4766425871, + "longitude": 88.3105325326, + "uuid": "i1jdz6onwZPBQZVvnj-zjw", + "is_public": true, + "banner_photo_uuid": "HvO37FPIiK5YQWMaGbv6pg", + "banner_photo_year": 2016 + }, + { + "id": 13, + "name": "Kumartuli Park", + "average_rating": 3.923985307621671, + "latitude": 22.5991, + "longitude": 88.361801, + "uuid": "WeTBOQkmlqjkTIpzsOX2cQ", + "is_public": true, + "banner_photo_uuid": "6-PCoUOK5JYZQjlumTcCug", + "banner_photo_year": 2016 + }, + { + "id": 28, + "name": "Sreebhumi Sporting Club", + "average_rating": 3.897344122834319, + "latitude": 22.5989398, + "longitude": 88.4030378, + "uuid": "mWO3w867ApwvTGAYS3xc8Q", + "is_public": true, + "banner_photo_uuid": "Z421xRWsbLmMSPzuxnW5_g", + "banner_photo_year": 2018 + }, + { + "id": 33, + "name": "Ghas Bagan", + "average_rating": 3.875, + "latitude": 22.591999, + "longitude": 88.343697, + "uuid": "oJTaY5bwha0_SreqhaSIqw", + "is_public": true, + "banner_photo_uuid": "-Vufcd76K7uQTW8u-x0ljQ", + "banner_photo_year": 2014 + }, + { + "id": 101, + "name": "Haridevpur 41 Pally", + "average_rating": 3.8737921304885594, + "latitude": 22.4828, + "longitude": 88.338303, + "uuid": "LbyoXC_MFakUSs_PBduXDg", + "is_public": true, + "banner_photo_uuid": "BeAsVbJ7hZopQ0rd2UZ32A", + "banner_photo_year": 2024 + }, + { + "id": 263, + "name": "Tangra Golpara Sarbojanin Durgatsab", + "average_rating": 3.855324074074074, + "latitude": 22.553499, + "longitude": 88.390701, + "uuid": "KWIX1yKR6pK4SE6UX6RNnA", + "is_public": true, + "banner_photo_uuid": "trnAcsYujISVRxvFhSbPnw", + "banner_photo_year": 2019 + }, + { + "id": 115, + "name": "Badamtala Ashar Sangha", + "average_rating": 3.8259402791501973, + "latitude": 22.5179, + "longitude": 88.343803, + "uuid": "RrOuBElo9JoSSBFb3O8s6g", + "is_public": true, + "banner_photo_uuid": "N4CNiOX9XqhGTFKvUU-SEA", + "banner_photo_year": 2017 + }, + { + "id": 87, + "name": "Kabiraj Bagan", + "average_rating": 3.819444444444444, + "latitude": 22.5927829192, + "longitude": 88.3817890955, + "uuid": "d2ZUOxCH-JdGSjGqJmIoRg", + "is_public": true, + "banner_photo_uuid": "XcSCzxwU9KvXRTBL-8Nc4Q", + "banner_photo_year": 2015 + }, + { + "id": 125, + "name": "Mudiali Club", + "average_rating": 3.8191327009767093, + "latitude": 22.510099, + "longitude": 88.346802, + "uuid": "X0scOP1pyIbOTEcLVx27WQ", + "is_public": true, + "banner_photo_uuid": "kxLYnjguy4aWQ4njyAp3aA", + "banner_photo_year": 2019 + }, + { + "id": 99, + "name": "Maddox Square", + "average_rating": 3.8070987654320985, + "latitude": 22.5265411634, + "longitude": 88.3549535677, + "uuid": "dX1YTyOIYadVTJGBb9duoQ", + "is_public": true, + "banner_photo_uuid": "-mMGU1PKO6t-RK_suHAaNA", + "banner_photo_year": 2018 + }, + { + "id": 381, + "name": "Patuli Central Club", + "average_rating": 3.778512639623751, + "latitude": 22.4742998193, + "longitude": 88.3841617804, + "uuid": "3aQJ-vXoXojiR6srM_eTnQ", + "is_public": true, + "banner_photo_uuid": "7YIucUU0bJjvSSTrR8Hn6g", + "banner_photo_year": 2017 + }, + { + "id": 785, + "name": "AK Block", + "average_rating": 3.7575892857142854, + "latitude": 22.5888138153911, + "longitude": 88.4308349713683, + "uuid": "YaFyWH_CIKGxQ67wYmZaYA", + "is_public": true, + "banner_photo_uuid": "nbbWv9GsNaVYRjZ9m2nBhA", + "banner_photo_year": 2020 + }, + { + "id": 4, + "name": "Dum Dum Park Tarun Sangha", + "average_rating": 3.7451927437641723, + "latitude": 22.6108, + "longitude": 88.413803, + "uuid": "FrsHhVecp7g8TxNEs9721g", + "is_public": true, + "banner_photo_uuid": "JCJybM1n8IsMQorUAS-jDw", + "banner_photo_year": 2024 + }, + { + "id": 220, + "name": "Arjunpur Amra Sabai Club", + "average_rating": 3.7417857142857143, + "latitude": 22.6243, + "longitude": 88.4245, + "uuid": "tSZD3svkao3uTdXxc5oYVQ", + "is_public": true, + "banner_photo_uuid": "U7-fhlY8nqTiTy36avrUlg", + "banner_photo_year": 2024 + }, + { + "id": 112, + "name": "Behala Sree Sangha", + "average_rating": 3.7407407407407405, + "latitude": 22.4986082078268, + "longitude": 88.320451731636, + "uuid": "ENgIQl9M0pJHT_AipZeFRw", + "is_public": true, + "banner_photo_uuid": "oq2dEfzNjqBTQifmVtRFnw", + "banner_photo_year": 2015 + }, + { + "id": 167, + "name": "21 Pally Sarbojanin Durgotsab", + "average_rating": 3.7037037037037037, + "latitude": 22.5290711963, + "longitude": 88.3688498798, + "uuid": "eJbX4GLzC6xVQNE7T7khnA", + "is_public": true, + "banner_photo_uuid": "zWd5lGytK4JOSXYcf51ERQ", + "banner_photo_year": 2016 + }, + { + "id": 446, + "name": "Keyatala Mananya Sangha", + "average_rating": 3.7, + "latitude": 22.5158718714, + "longitude": 88.3646597317, + "uuid": "3tnkudCnhbzfSa8fohcPgw", + "is_public": true, + "banner_photo_uuid": "jcYUS9ZrrpVoQIfvD9B8-A", + "banner_photo_year": 2015 + }, + { + "id": 27, + "name": "Sovabazar Beniatola", + "average_rating": 3.6833333333333336, + "latitude": 22.5958, + "longitude": 88.361198, + "uuid": "kGnav-O3pLUoR7gw52e9pA", + "is_public": true, + "banner_photo_uuid": "X8iyeBrqd5EgRsqH48889w", + "banner_photo_year": 2016 + }, + { + "id": 420, + "name": "Haridevpur New Sporting Club", + "average_rating": 3.6765046296296298, + "latitude": 22.479416692709, + "longitude": 88.3356723375159, + "uuid": "GNaToMJCSqWBT06TR9C5wA", + "is_public": true, + "banner_photo_uuid": "5xfdmO05p7FfQaHRkZs-ow", + "banner_photo_year": 2022 + }, + { + "id": 382, + "name": "Janmangal Samiti", + "average_rating": 3.666666666666667, + "latitude": 22.5183875291, + "longitude": 88.3415650376, + "uuid": "MQFt4S_xkbcESjaMljYMHA", + "is_public": true, + "banner_photo_uuid": "-rCt9RfMYKxRTPRzyl_DQw", + "banner_photo_year": 2015 + }, + { + "id": 374, + "name": "Vivekananda Sporting Club", + "average_rating": 3.6666666666666665, + "latitude": 22.5862880291, + "longitude": 88.3669299618, + "uuid": "m91l7XxGcqhSR_zB0yLwtw", + "is_public": true, + "banner_photo_uuid": "KhQjjvboIIxeR04ZvBGkzg", + "banner_photo_year": 2022 + }, + { + "id": 121, + "name": "Ekdalia Evergreen Club", + "average_rating": 3.6491787533454203, + "latitude": 22.5211043879, + "longitude": 88.366287802, + "uuid": "Ge7D9rkFi6BmRk6oKkUNcQ", + "is_public": true, + "banner_photo_uuid": "DLT8rwq9xIeiTuVzf0TFNQ", + "banner_photo_year": 2016 + }, + { + "id": 56, + "name": "Lalabagan Nabankur", + "average_rating": 3.6459999999999995, + "latitude": 22.588301, + "longitude": 88.3769, + "uuid": "YLl1FPKuaYOkQ07GjSVOEA", + "is_public": true, + "banner_photo_uuid": "yTYQUWbatbExS6ccN9fvZw", + "banner_photo_year": 2017 + }, + { + "id": 129, + "name": "Suruchi Sangha", + "average_rating": 3.6441082702020204, + "latitude": 22.5096, + "longitude": 88.333801, + "uuid": "oULKbbRpZYnvROpKeq7WNQ", + "is_public": true, + "banner_photo_uuid": "Y0xnQNoJoI7LRxrLVeSfSg", + "banner_photo_year": 2017 + }, + { + "id": 35, + "name": "Nalin Sarkar Street Sarbojanin Durgotsab", + "average_rating": 3.642815806878307, + "latitude": 22.5944058218694, + "longitude": 88.3743637427688, + "uuid": "ILbmKUJ7BIVVRfqrFr7C4A", + "is_public": true, + "banner_photo_uuid": "9b2eudT4UpsbS0hteobWXw", + "banner_photo_year": 2023 + }, + { + "id": 456, + "name": "Dum Dum Park Sarbojanin", + "average_rating": 3.6363389756944446, + "latitude": 22.6092312, + "longitude": 88.4162726, + "uuid": "FdgUvAHTNbxWRUpOoYyhDA", + "is_public": true, + "banner_photo_uuid": "oBmfUWtkqJ6jRYHuWi-CGg", + "banner_photo_year": 2017 + }, + { + "id": 464, + "name": "Entally Matribhumi", + "average_rating": 3.622895622895623, + "latitude": 22.5584839752, + "longitude": 88.3674311812, + "uuid": "Zf1MFrPCAKboQXcQMdy81w", + "is_public": true, + "banner_photo_uuid": "8uooecJidoarRb91HORCUA", + "banner_photo_year": 2015 + }, + { + "id": 8, + "name": "Baghbazar Sarbojonin Durgotsab & Exhibition", + "average_rating": 3.613888888888889, + "latitude": 22.6043, + "longitude": 88.366096, + "uuid": "PXIVn6J_J4PxTgZtZ8-r2A", + "is_public": true, + "banner_photo_uuid": "_lNuRVUQ3ofTT_pDV19HuA", + "banner_photo_year": 2017 + }, + { + "id": 390, + "name": "Ahiritola Yubak Brinda", + "average_rating": 3.613425925925926, + "latitude": 22.5945654633, + "longitude": 88.3604243431, + "uuid": "29PR9UPPk7BcQsy8mpW1vg", + "is_public": true, + "banner_photo_uuid": "iDf1051YtrnIS2Xd-2qq5Q", + "banner_photo_year": 2016 + }, + { + "id": 267, + "name": "Garia Nabadurga", + "average_rating": 3.6023524305555554, + "latitude": 22.462999, + "longitude": 88.380898, + "uuid": "e86dTg09_J2STw-2FRQplg", + "is_public": true, + "banner_photo_uuid": "WtYzpXH-CICqTA-dstn5Aw", + "banner_photo_year": 2014 + }, + { + "id": 1462, + "name": "Behala Roy Barir Durga Puja", + "average_rating": 3.6, + "latitude": 22.5015043, + "longitude": 88.3191318, + "uuid": "4k7mnSaGSLRuQNdQGgUj5w", + "is_public": true, + "banner_photo_uuid": "MphcimX1uaEpSmpTV5oUjQ", + "banner_photo_year": 2023 + }, + { + "id": 352, + "name": "Belgharia Bani Mandir", + "average_rating": 3.5979166666666664, + "latitude": 22.6661324493, + "longitude": 88.380887175, + "uuid": "Q5zvU2v214FVRVgKsrG6nA", + "is_public": true, + "banner_photo_uuid": "D0e-LeWqrq_uTCR5j0lLTg", + "banner_photo_year": 2015 + }, + { + "id": 1091, + "name": "Hospital Para Apanjan Sangha", + "average_rating": 3.595238095238095, + "latitude": 24.5439410424, + "longitude": 87.8587982431, + "uuid": "QaBpnrCPYoxaSy6t7FT3bg", + "is_public": true, + "banner_photo_uuid": "MkSyHEHmHrMqRP7S6qV--w", + "banner_photo_year": 2018 + }, + { + "id": 5, + "name": "Dum Dum Park Bharat Chakra", + "average_rating": 3.591600529100529, + "latitude": 22.610701, + "longitude": 88.414497, + "uuid": "rZCZOM63HJCTRX9G9B3y0A", + "is_public": true, + "banner_photo_uuid": "fpatTXXsMIKIRmeStAu8hw", + "banner_photo_year": 2024 + }, + { + "id": 264, + "name": "Tangra Horisobha Math Sarbojanin Durgotsab", + "average_rating": 3.5892620937263797, + "latitude": 22.5549918944874, + "longitude": 88.3911546010718, + "uuid": "UIx5O6ukDJWKTlZ_7pWW5g", + "is_public": true, + "banner_photo_uuid": "IC2_a_10R66ZQFAOCYeKWA", + "banner_photo_year": 2019 + }, + { + "id": 104, + "name": "Haridevpur Vivekananda Park Athletic Club", + "average_rating": 3.57464096749811, + "latitude": 22.481199, + "longitude": 88.337402, + "uuid": "vVwLgEQVR7uDT_fsYK25wQ", + "is_public": true, + "banner_photo_uuid": "OH7aTNpFBbXkSY5FlI7ojg", + "banner_photo_year": 2024 + }, + { + "id": 1540, + "name": "NewTown Sarbojanin", + "average_rating": 3.5555555555555554, + "latitude": 22.5826744, + "longitude": 88.4594974, + "uuid": "rCXqbsw5gJW3SYtjcUrEVw", + "is_public": true, + "banner_photo_uuid": "zguj4S2HvL_XR4RNjgFsTQ", + "banner_photo_year": 2024 + }, + { + "id": 416, + "name": "Hindustan Club", + "average_rating": 3.552972222222222, + "latitude": 22.5201798386, + "longitude": 88.3607477982, + "uuid": "CYVFwuvLWKn4TVQHaGwqxA", + "is_public": true, + "banner_photo_uuid": "XjrFnWWTJ5gmSVjSN-888A", + "banner_photo_year": 2024 + }, + { + "id": 16, + "name": "Mohammed Ali Park", + "average_rating": 3.5499131944444446, + "latitude": 22.5772979774324, + "longitude": 88.3607786323285, + "uuid": "kmPpkE5GjpXDRiOI3e3ySw", + "is_public": true, + "banner_photo_uuid": "Xxfq6y1fhIOpQHsfiPgI9w", + "banner_photo_year": 2018 + }, + { + "id": 741, + "name": "Dakshin Kolkata Sarbojanin Durgotsab", + "average_rating": 3.541666666666667, + "latitude": 22.534254, + "longitude": 88.3506824, + "uuid": "8JIqfZk9cYxTTxjSJtNC9Q", + "is_public": true, + "banner_photo_uuid": "gfTH6fPbO78bSKauJblUmw", + "banner_photo_year": 2019 + }, + { + "id": 45, + "name": "Rammohan Sammilani", + "average_rating": 3.5416666666666665, + "latitude": 22.5815383435, + "longitude": 88.3752853989, + "uuid": "F-HzuOcHT6RKRuomAAOfIA", + "is_public": true, + "banner_photo_uuid": "-IoQszQXQ596TyzJvI3W8g", + "banner_photo_year": 2015 + }, + { + "id": 76, + "name": "Jagat Mukherjee Park", + "average_rating": 3.539772727272727, + "latitude": 22.599501, + "longitude": 88.366302, + "uuid": "P7Lbe0RSNKPxTlgb6AcTCA", + "is_public": true, + "banner_photo_uuid": "7uyJrOvJ4os7TIscqKzCHQ", + "banner_photo_year": 2016 + }, + { + "id": 885, + "name": "Mukundapur Sarbojonin", + "average_rating": 3.5265306122448976, + "latitude": 22.4908101, + "longitude": 88.4056498, + "uuid": "SKdyDmcEoIg8SLBJr10NEQ", + "is_public": true, + "banner_photo_uuid": "nx13C25mGrRATd_laRE4Zg", + "banner_photo_year": 2017 + }, + { + "id": 126, + "name": "Shibmandir Sarbojanin Durgotsab", + "average_rating": 3.5235969387755097, + "latitude": 22.510799, + "longitude": 88.349403, + "uuid": "q8SZ9LM6SY3iRfFAhPjREA", + "is_public": true, + "banner_photo_uuid": "-HnUlbNZkq6IQIwBPIgHlw", + "banner_photo_year": 2023 + }, + { + "id": 124, + "name": "Santoshpur Lake Pally", + "average_rating": 3.5226666666666664, + "latitude": 22.491501, + "longitude": 88.382797, + "uuid": "V1iHl4Vvr6pXQXvpnmxk4A", + "is_public": true, + "banner_photo_uuid": "Qgdb8ZEMy7VVTzC44DA3fg", + "banner_photo_year": 2018 + }, + { + "id": 11, + "name": "Karbagan Sarbojanin", + "average_rating": 3.521875, + "latitude": 22.5953723597, + "longitude": 88.3837250144, + "uuid": "WpVHv-ltoYSaTAEfMfNLrA", + "is_public": true, + "banner_photo_uuid": "qmOIiwQyE6hIR10sFZJdUg", + "banner_photo_year": 2016 + }, + { + "id": 195, + "name": "Nepal Bhattacharjee Street", + "average_rating": 3.5184920634920633, + "latitude": 22.5178120079911, + "longitude": 88.3412228760971, + "uuid": "QjGg4eniEr-DTqR7woSZKg", + "is_public": true, + "banner_photo_uuid": "SZJbZgNlMq1hQ7p1L2JkGA", + "banner_photo_year": 2017 + }, + { + "id": 153, + "name": "Khidirpur Pally Saradiya", + "average_rating": 3.5161458333333333, + "latitude": 22.5430994919, + "longitude": 88.3213248365, + "uuid": "7cxSDXz6gLQ7SgDlBS8_BA", + "is_public": true, + "banner_photo_uuid": "BGHpm0xrT7l5QDWIHqMZMg", + "banner_photo_year": 2019 + }, + { + "id": 14, + "name": "Laketown Adhibasi Brinda", + "average_rating": 3.5037202380952386, + "latitude": 22.6048515706, + "longitude": 88.4038941935, + "uuid": "LHKnU47Qg4kqRQ9mtjM9kw", + "is_public": true, + "banner_photo_uuid": "J2nQdFZrpa9WRZlL_J7sdw", + "banner_photo_year": 2018 + }, + { + "id": 188, + "name": "Golden Arrow Club", + "average_rating": 3.5, + "latitude": 22.5160648166, + "longitude": 88.3476101626, + "uuid": "PjAHh_54j6tUTyQVmUjtfQ", + "is_public": true, + "banner_photo_uuid": "_qurU62Gz6BDRcvK25imdQ", + "banner_photo_year": 2015 + }, + { + "id": 960, + "name": "Tarun Matri Sevak Samity", + "average_rating": 3.5, + "latitude": 22.5021711205, + "longitude": 88.3215849102, + "uuid": "5tUkb_L22KoEQTl1lE02Og", + "is_public": true, + "banner_photo_uuid": "HSeHTsi0QLU-QFl1IFwIXA", + "banner_photo_year": 2022 + }, + { + "id": 135, + "name": "66 Pally Club", + "average_rating": 3.4842472342472344, + "latitude": 22.5180324556134, + "longitude": 88.3428359951233, + "uuid": "V8Z3EiMawIaSQUit6750LA", + "is_public": true, + "banner_photo_uuid": "SHqVG50hDJ-7SC__N2QCSw", + "banner_photo_year": 2018 + }, + { + "id": 709, + "name": "Shibpur Sastitala Baroary", + "average_rating": 3.46875, + "latitude": 22.5697212764, + "longitude": 88.3152398095, + "uuid": "WZWNLxA6PasDTAZLUEpq1Q", + "is_public": true, + "banner_photo_uuid": "35BEJ8NO0rCAQfPeqbpXMw", + "banner_photo_year": 2016 + }, + { + "id": 217, + "name": "Haridevpur Adarsha Samiti", + "average_rating": 3.4375, + "latitude": 22.4760147, + "longitude": 88.3340474, + "uuid": "ck-Sm2s-sJ4rRMsEFiqh6Q", + "is_public": true, + "banner_photo_uuid": "3LB9opMgWpomReiJfmTIiQ", + "banner_photo_year": 2017 + }, + { + "id": 1031, + "name": "Hajra Park", + "average_rating": 3.4333333333333327, + "latitude": 22.5239067299, + "longitude": 88.3459517732, + "uuid": "0uF7JTWY6oeeQRJCGmrTmQ", + "is_public": true, + "banner_photo_uuid": "v5qe7x3kBrkOTkc3udbGhw", + "banner_photo_year": 2017 + }, + { + "id": 170, + "name": "Ballygunge Cultural Association", + "average_rating": 3.4324349647266317, + "latitude": 22.5163, + "longitude": 88.355698, + "uuid": "S5QEPqpyn7plQ_JBOHRizw", + "is_public": true, + "banner_photo_uuid": "RyvkjigwS7IaThax-OaOXA", + "banner_photo_year": 2024 + }, + { + "id": 63, + "name": "Kumartuli Sarbojanin", + "average_rating": 3.4296334876543213, + "latitude": 22.6012, + "longitude": 88.362801, + "uuid": "oe4lKVOC97MQTckwDAs4EQ", + "is_public": true, + "banner_photo_uuid": "rU49c6IYrJC8R8hvlsWJrQ", + "banner_photo_year": 2016 + }, + { + "id": 469, + "name": "Shyam Square", + "average_rating": 3.419753086419753, + "latitude": 22.6007373768, + "longitude": 88.3686865121, + "uuid": "_OGlpZBcNrTkS2PVBPMJfQ", + "is_public": true, + "banner_photo_uuid": "6gIddr_FsIaFS5eVkWoqDw", + "banner_photo_year": 2016 + }, + { + "id": 459, + "name": "Entally Udayan Sangha", + "average_rating": 3.4166666666666665, + "latitude": 22.5575435919, + "longitude": 88.3674042667, + "uuid": "Fq6RmFullZURTFBaTQaU2g", + "is_public": true, + "banner_photo_uuid": "jEOQb_QYnJZASLjsHXYD0Q", + "banner_photo_year": 2015 + }, + { + "id": 753, + "name": "Sura Sarbojanin Durgotsab", + "average_rating": 3.4166666666666665, + "latitude": 22.5666370227, + "longitude": 88.3929504454, + "uuid": "FDDl2BAF5LtpRn8-_WnK4w", + "is_public": true, + "banner_photo_uuid": "JItCokuAFaDkSsRf0dVbWg", + "banner_photo_year": 2019 + }, + { + "id": 323, + "name": "Ultadanga Pallyshree", + "average_rating": 3.4038461538461537, + "latitude": 22.5959280743, + "longitude": 88.3839819434, + "uuid": "huMOdcplr5Y8QHAFCOXevQ", + "is_public": true, + "banner_photo_uuid": "13XoXnCuUJllTZNSvzKbPw", + "banner_photo_year": 2016 + }, + { + "id": 103, + "name": "Haridevpur Vivekananda Sporting Club", + "average_rating": 3.4027777777777772, + "latitude": 22.4765124820645, + "longitude": 88.3387791539883, + "uuid": "tOBk1DVAKbb-TyTGS14YsQ", + "is_public": true, + "banner_photo_uuid": "dSA4WOXolKMGRtVkHqR22w", + "banner_photo_year": 2022 + }, + { + "id": 819, + "name": "Bata Maidan", + "average_rating": 3.3977142857142857, + "latitude": 22.5047770218, + "longitude": 88.2290574163, + "uuid": "Jjb3ITxx7ayzTBgd2v7OQg", + "is_public": true, + "banner_photo_uuid": "6xyzYtMOn78WSyM8mmxY1w", + "banner_photo_year": 2016 + }, + { + "id": 149, + "name": "Babubagan (Dhakuria Sarbojanin)", + "average_rating": 3.38978835978836, + "latitude": 22.5078860718, + "longitude": 88.3687930504, + "uuid": "AQyfbvEen6kqQb-vVWa6UA", + "is_public": true, + "banner_photo_uuid": "rvCtmu0NE641TeCSMeD04Q", + "banner_photo_year": 2017 + }, + { + "id": 324, + "name": "Wellington Nagarik Kalyan Committee", + "average_rating": 3.380208333333333, + "latitude": 22.5652218095, + "longitude": 88.3574601263, + "uuid": "5zdK4EcOT44DTX2h92TwqA", + "is_public": true, + "banner_photo_uuid": "PZok4KyKVqubSrRFg8nUxg", + "banner_photo_year": 2017 + }, + { + "id": 711, + "name": "Mandirtala Sarbojanin Durgotsav Committee", + "average_rating": 3.377777777777778, + "latitude": 22.5696612142864, + "longitude": 88.3171964809299, + "uuid": "OrJDnwj6HLVYSCDiGcVvVQ", + "is_public": true, + "banner_photo_uuid": "AB8K50srO7aEROuqIGKkaw", + "banner_photo_year": 2016 + }, + { + "id": 371, + "name": "Anandin (Harinavi)", + "average_rating": 3.3768382352941178, + "latitude": 22.4204237, + "longitude": 88.4202631, + "uuid": "b4ymuBXUFIxSRaLD2LKxbw", + "is_public": true, + "banner_photo_uuid": "VOgHCGLGk7fqRvOM8mDFtg", + "banner_photo_year": 2015 + }, + { + "id": 120, + "name": "Singhi Park", + "average_rating": 3.3662925170068028, + "latitude": 22.5210309075788, + "longitude": 88.3630992156818, + "uuid": "Tyz-LxoBFZxdRgOKOO1ZRQ", + "is_public": true, + "banner_photo_uuid": "0oEFzkCTyKEXTemWzbO9GA", + "banner_photo_year": 2019 + }, + { + "id": 773, + "name": "Sevak Sangha", + "average_rating": 3.3625, + "latitude": 22.5115871966, + "longitude": 88.3498510346, + "uuid": "ePsCp7i-IKB0Se2U_eqaDQ", + "is_public": true, + "banner_photo_uuid": "VYkYx39Y3YE2RyhQazVHsQ", + "banner_photo_year": 2019 + }, + { + "id": 141, + "name": "Santoshpur Trikon Park", + "average_rating": 3.3622727272727273, + "latitude": 22.4931277193, + "longitude": 88.3785008601, + "uuid": "K0_H9XFKaY0jSUll93b38A", + "is_public": true, + "banner_photo_uuid": "_HffGudFQp9wTjs6o41BFg", + "banner_photo_year": 2024 + }, + { + "id": 342, + "name": "Hatkhola Gossain Para", + "average_rating": 3.358333333333333, + "latitude": 22.5991619746, + "longitude": 88.3590915229, + "uuid": "2s6VgB0jjqIySVheKFB9uQ", + "is_public": true, + "banner_photo_uuid": "orPTY3HJL6N1TMV_23f1mg", + "banner_photo_year": 2015 + }, + { + "id": 269, + "name": "Salkia Chatra Bayam Samity", + "average_rating": 3.3333333333333335, + "latitude": 22.5942, + "longitude": 88.345398, + "uuid": "o5v8mzurRbE9QKPrYo_tPA", + "is_public": true, + "banner_photo_uuid": "pOPK27WBaYcbQNbiB4CPyA", + "banner_photo_year": 2014 + }, + { + "id": 157, + "name": "Falguni Sangha", + "average_rating": 3.3229591836734693, + "latitude": 22.5219705118, + "longitude": 88.3658626152, + "uuid": "J2pJFuJqh6OwQSoq-0xSRA", + "is_public": true, + "banner_photo_uuid": "sfTptF3z0IXEQkscoOjUnQ", + "banner_photo_year": 2015 + }, + { + "id": 368, + "name": "Santoshpur Avenue South Pallymangal Samity", + "average_rating": 3.3111111111111113, + "latitude": 22.4915544671, + "longitude": 88.3796905117, + "uuid": "sIHIdOymoKNvRmkGyNHA-g", + "is_public": true, + "banner_photo_uuid": "ZFyRyxbL76LaSJQ1hhvuDQ", + "banner_photo_year": 2017 + }, + { + "id": 789, + "name": "Sobhabazar Rajbari", + "average_rating": 3.2972222222222225, + "latitude": 22.5965333, + "longitude": 88.3667891, + "uuid": "deYE2KbQcJvSQrF79aNw3Q", + "is_public": true, + "banner_photo_uuid": "ClXjyvANF7U-Qn06q29HKQ", + "banner_photo_year": 2017 + }, + { + "id": 813, + "name": "Rabindra Nagar Sporting Club", + "average_rating": 3.2962962962962967, + "latitude": 22.4996943382, + "longitude": 88.2978701591, + "uuid": "3D9f1PssSY8iRw6tqxwOqg", + "is_public": true, + "banner_photo_uuid": "KspZ8TBYfZQ8Qn-bmWxfwg", + "banner_photo_year": 2017 + }, + { + "id": 55, + "name": "Swapnar Bagan", + "average_rating": 3.2916666666666665, + "latitude": 22.5794425769039, + "longitude": 88.3954480775077, + "uuid": "nHu0gVeBtoQ5QjaG6TuEKA", + "is_public": true, + "banner_photo_uuid": "y4Wuz6rP5b4LSHECURKK0g", + "banner_photo_year": 2017 + }, + { + "id": 58, + "name": "Salt Lake AE Block - Part 1", + "average_rating": 3.2916666666666665, + "latitude": 22.5985569381, + "longitude": 88.4093151669, + "uuid": "gRIWY-_LqLcPSyrzfAvgQw", + "is_public": true, + "banner_photo_uuid": "Xu8461bV9I1ISE9xsGOpDA", + "banner_photo_year": 2015 + }, + { + "id": 412, + "name": "Sealdah Athletic Club", + "average_rating": 3.2888888888888888, + "latitude": 22.5708399, + "longitude": 88.3716733, + "uuid": "UMiO-wuM356vTUMfOAgLrg", + "is_public": true, + "banner_photo_uuid": "PkhhWW55yKMtTWBfafNQoA", + "banner_photo_year": 2015 + }, + { + "id": 265, + "name": "Dumdum Malpally Sarbojanin Durgotsab", + "average_rating": 3.258259259259259, + "latitude": 22.628201, + "longitude": 88.421799, + "uuid": "IamF4eEORL7cTo2uJ0iCIg", + "is_public": true, + "banner_photo_uuid": "9gDWxsbUpLoHTtmbuJ3-Ig", + "banner_photo_year": 2024 + }, + { + "id": 1461, + "name": "Friends Union", + "average_rating": 3.25, + "latitude": 22.603017, + "longitude": 88.3741823, + "uuid": "J4Pkbv6HnKLSSfv34xqexA", + "is_public": true, + "banner_photo_uuid": "VwcdFzkIwYT6QkAIhIyJFg", + "banner_photo_year": 2023 + }, + { + "id": 2, + "name": "College Square", + "average_rating": 3.2392174369747897, + "latitude": 22.5744543354, + "longitude": 88.3644482866, + "uuid": "4KB8nlIeEbgyTWoO2tHCFg", + "is_public": true, + "banner_photo_uuid": "ugF81gxJKqLeSAs9l9xEfA", + "banner_photo_year": 2018 + }, + { + "id": 146, + "name": "Palli Mangal Samiti", + "average_rating": 3.214285714285714, + "latitude": 22.503099, + "longitude": 88.3647, + "uuid": "7eKx2ZAjfpIzQRE2_GuTRw", + "is_public": true, + "banner_photo_uuid": "37RvJpwKKZ4KTH7JuHBLsg", + "banner_photo_year": 2017 + }, + { + "id": 34, + "name": "Hatibagan Nabin Pally", + "average_rating": 3.1968915343915345, + "latitude": 22.5956177776711, + "longitude": 88.3734236893756, + "uuid": "zwjsBgMn8pqtQ28cqzVySA", + "is_public": true, + "banner_photo_uuid": "FfdBtjd_5JWfRQ3NIupUnQ", + "banner_photo_year": 2022 + }, + { + "id": 343, + "name": "Bowbazar Friend's Society", + "average_rating": 3.1875, + "latitude": 22.5675506954, + "longitude": 88.3598981972, + "uuid": "xQ_JOfVps4hLSHN5uCrVyg", + "is_public": true, + "banner_photo_uuid": "2630TMKWpIFPTJovIp_vXA", + "banner_photo_year": 2015 + }, + { + "id": 468, + "name": "Kidderpore 75 Pally", + "average_rating": 3.1875, + "latitude": 22.539852943, + "longitude": 88.3202776685, + "uuid": "lB3Iua1BIpLIRl-9xk_N8w", + "is_public": true, + "banner_photo_uuid": "jxQvCeSybK9QSKKaZdPgOA", + "banner_photo_year": 2019 + }, + { + "id": 122, + "name": "Jodhpur Park", + "average_rating": 3.16978835978836, + "latitude": 22.504499, + "longitude": 88.365402, + "uuid": "6iQ-6fUwSKJkRVF9KBJHlQ", + "is_public": true, + "banner_photo_uuid": "_IosVnTLdL3kTNo-HCgrTA", + "banner_photo_year": 2017 + }, + { + "id": 442, + "name": "Suhud Sangha", + "average_rating": 3.158203125, + "latitude": 22.5163607353, + "longitude": 88.3469374768, + "uuid": "vR0QBi_K-51xR8lgmiFksQ", + "is_public": true, + "banner_photo_uuid": "JKj8Y568o6KLS2HXjW2roQ", + "banner_photo_year": 2016 + }, + { + "id": 85, + "name": "Japur Byayam Samiti", + "average_rating": 3.1492063492063496, + "latitude": 22.613199, + "longitude": 88.401901, + "uuid": "gepmNyNv9oYMRuJL1MFmbg", + "is_public": true, + "banner_photo_uuid": "Ixn8VBrJ_Kn7Qk9Xc5Og1w", + "banner_photo_year": 2018 + }, + { + "id": 213, + "name": "68 Pally", + "average_rating": 3.125, + "latitude": 22.5285, + "longitude": 88.346397, + "uuid": "i3ohbQ1TnZyzRl5oyi4-PQ", + "is_public": true, + "banner_photo_uuid": "VZoKtOIFzLRwRxDrfHZfPw", + "banner_photo_year": 2017 + }, + { + "id": 458, + "name": "Venus Club", + "average_rating": 3.125, + "latitude": 22.5381008449, + "longitude": 88.3268832788, + "uuid": "WKoNMA4-tJ3hQG5slRrCSg", + "is_public": true, + "banner_photo_uuid": "RYXZbUyv1YfvQfBB-UmFJQ", + "banner_photo_year": 2019 + }, + { + "id": 970, + "name": "Mohanbagan Sarbajanin", + "average_rating": 3.125, + "latitude": 22.5973006368646, + "longitude": 88.3727400004864, + "uuid": "cMNKB4GjDrElR4F4DRQv-w", + "is_public": true, + "banner_photo_uuid": "jDf06aPUSYWBSWL0pJRhVg", + "banner_photo_year": 2023 + }, + { + "id": 166, + "name": "Lake Youth Corner", + "average_rating": 3.123611111111111, + "latitude": 22.5107, + "longitude": 88.347198, + "uuid": "RaWtTv-K8JWxSnAM7YLQTw", + "is_public": true, + "banner_photo_uuid": "VZx0zma3DalZRLwqOu6EjQ", + "banner_photo_year": 2019 + }, + { + "id": 144, + "name": "Netaji Jatiya Sebadal", + "average_rating": 3.118055555555556, + "latitude": 22.484801157933, + "longitude": 88.3568775446782, + "uuid": "liNJyfaHKL_FT5dC-dvO1w", + "is_public": true, + "banner_photo_uuid": "xzEQB-Jva4yvT297Jh9A8A", + "banner_photo_year": 2016 + }, + { + "id": 701, + "name": "Shyama Pally Shyama Sangha", + "average_rating": 3.1, + "latitude": 22.4915876, + "longitude": 88.3714673, + "uuid": "-OzvL6B0a6hPTGVLSykNLw", + "is_public": true, + "banner_photo_uuid": "Su0mlOMpurrnQRGyMbOydA", + "banner_photo_year": 2016 + }, + { + "id": 131, + "name": "Pratapaditya Road Tricone Park", + "average_rating": 3.0833333333333335, + "latitude": 22.5134424946, + "longitude": 88.3447042044, + "uuid": "XUu3h8KdPKZBTyw3YdOinw", + "is_public": true, + "banner_photo_uuid": "ZiyMrntmhoXYTfoCbYBB-A", + "banner_photo_year": 2015 + }, + { + "id": 148, + "name": "Chakraberia Sarbojanin", + "average_rating": 3.0643849206349207, + "latitude": 22.5334915748, + "longitude": 88.35187688, + "uuid": "RrDwqH4hv7-FRUpn8zRTbA", + "is_public": true, + "banner_photo_uuid": "HyUmUwcrPZC7Q2aYVgQOhg", + "banner_photo_year": 2019 + }, + { + "id": 224, + "name": "Park Circus - Uddipani", + "average_rating": 3.063616071428571, + "latitude": 22.5429731915, + "longitude": 88.3705853869, + "uuid": "PVBJkWdw0qIwTk1KXNaPrg", + "is_public": true, + "banner_photo_uuid": "lyU7RUfWw7HlTTpd0z7sOQ", + "banner_photo_year": 2015 + }, + { + "id": 419, + "name": "26 Palli", + "average_rating": 3.0625, + "latitude": 22.5425867164, + "longitude": 88.323848313, + "uuid": "klwB9TGAaYqEQBvhL_J-DA", + "is_public": true, + "banner_photo_uuid": "JUKtjHInNb8ERLgTZSwfRQ", + "banner_photo_year": 2019 + }, + { + "id": 192, + "name": "95 Pally", + "average_rating": 3.0515873015873014, + "latitude": 22.508101, + "longitude": 88.3629, + "uuid": "Qx8ywnw5ibUzRQClmgxH2Q", + "is_public": true, + "banner_photo_uuid": "n2EZitk8sZjiTl8ul-lKhQ", + "banner_photo_year": 2017 + }, + { + "id": 436, + "name": "Hari Ghosh Street 17 Palli", + "average_rating": 3.046875, + "latitude": 22.5933749, + "longitude": 88.3692433, + "uuid": "wG7-zrkSPYjJRQbOI7fxMw", + "is_public": true, + "banner_photo_uuid": "u1X09vNPBZHQR1Qs1ynRkg", + "banner_photo_year": 2022 + }, + { + "id": 1046, + "name": "Ariadaha Jubak Sangha", + "average_rating": 3.0416666666666665, + "latitude": 22.6714297892, + "longitude": 88.3634153008, + "uuid": "sko4pJAaoJ8WSQba5fhSvA", + "is_public": true, + "banner_photo_uuid": "oHJc1vN31aG1RaySpgEAuQ", + "banner_photo_year": 2017 + }, + { + "id": 100, + "name": "Deshapriya Park", + "average_rating": 3.040415178571428, + "latitude": 22.518783201172, + "longitude": 88.3534682716584, + "uuid": "f_xSuG4ZCaCnQrNCcQB3IA", + "is_public": true, + "banner_photo_uuid": "rUBTPHW0sJrQSGeYhHiq6A", + "banner_photo_year": 2017 + }, + { + "id": 143, + "name": "Netaji Nagar", + "average_rating": 3.0333333333333337, + "latitude": 22.480789249, + "longitude": 88.3578069943, + "uuid": "DHTA14ewaIAYT06uKwvo8Q", + "is_public": true, + "banner_photo_uuid": "yvYRHziYLKQPRVS2ULNF2Q", + "banner_photo_year": 2016 + }, + { + "id": 439, + "name": "Hindustan Park Purbachal Club", + "average_rating": 3.0263888888888886, + "latitude": 22.5176405858, + "longitude": 88.3640795098, + "uuid": "FrmEPeOonryqT_swADZPzQ", + "is_public": true, + "banner_photo_uuid": "L0jxNF73uZwURaYtMqYsmw", + "banner_photo_year": 2023 + }, + { + "id": 369, + "name": "Panditia Puja Samiti", + "average_rating": 3.022222222222222, + "latitude": 22.5213737096, + "longitude": 88.3586086406, + "uuid": "dddFcf4AU4mGQax5zlU3iQ", + "is_public": true, + "banner_photo_uuid": "ZUIfVkKEFZSNQnueqQe8Lw", + "banner_photo_year": 2016 + }, + { + "id": 20, + "name": "Salt Lake FD Block", + "average_rating": 3.015740740740741, + "latitude": 22.5837598367, + "longitude": 88.4122218504, + "uuid": "RIKal6jgRJtgScOZEyVnJA", + "is_public": true, + "banner_photo_uuid": "Drw5m9yRe6BISM46_-sXSg", + "banner_photo_year": 2018 + }, + { + "id": 193, + "name": "Bandhab Sammilani", + "average_rating": 3, + "latitude": 22.507799, + "longitude": 88.367897, + "uuid": "deMjE1KRnLOzQ5YZeY_nyQ", + "is_public": true, + "banner_photo_uuid": "UjJKIXC5DbYcRIlMKIJswA", + "banner_photo_year": 2014 + }, + { + "id": 888, + "name": "Milani Paikpara", + "average_rating": 3, + "latitude": 22.6125686023, + "longitude": 88.389865905, + "uuid": "F6a-thfh_I-DSWuLvsVsbw", + "is_public": true, + "banner_photo_uuid": "wvhHGhg_taMERKssXoJ50A", + "banner_photo_year": 2023 + }, + { + "id": 1463, + "name": "Mitra Sangha Durgotsab", + "average_rating": 3, + "latitude": 22.5005137, + "longitude": 88.3229052, + "uuid": "_lLXmnFzcYXaQdML3HNeTg", + "is_public": true, + "banner_photo_uuid": "4a0TOVe-kY4-SFieftCniA", + "banner_photo_year": 2023 + }, + { + "id": 765, + "name": "Ballygunge Palli", + "average_rating": 2.96875, + "latitude": 22.5257031, + "longitude": 88.3574977, + "uuid": "nqZIzZ1CtppcQnw-eF9d3w", + "is_public": true, + "banner_photo_uuid": "3YVvzDGvV6IoQKcBXzGA1A", + "banner_photo_year": 2016 + }, + { + "id": 44, + "name": "Laketown Nutan Palli Pradeep Sangha", + "average_rating": 2.9635416666666665, + "latitude": 22.6036, + "longitude": 88.397499, + "uuid": "sPly_Wmw77gATbnTxpSmig", + "is_public": true, + "banner_photo_uuid": "QoJqbGnt8ocGTqO9Y3cuDQ", + "banner_photo_year": 2015 + }, + { + "id": 398, + "name": "Golmath Durgapuja Samiti", + "average_rating": 2.954861111111111, + "latitude": 22.5269223437, + "longitude": 88.3496149983, + "uuid": "jXgTSBEBerXPR7thtKsW1w", + "is_public": true, + "banner_photo_uuid": "cc2FKRi_5bQiRVUZwzmxIw", + "banner_photo_year": 2022 + }, + { + "id": 137, + "name": "Adi Lake Palli", + "average_rating": 2.95, + "latitude": 22.5144936992, + "longitude": 88.3493857332, + "uuid": "8VphwSjaEYBmRbMIhQicOQ", + "is_public": true, + "banner_photo_uuid": "VhoGksQ6YJQERCppGFkI7Q", + "banner_photo_year": 2015 + }, + { + "id": 268, + "name": "Ahiritola Sarbojanin Durgotsab B K Pal Park", + "average_rating": 2.934814814814815, + "latitude": 22.5951, + "longitude": 88.359596, + "uuid": "eWc_5pNXXYAAQEdv8FcRxw", + "is_public": true, + "banner_photo_uuid": "j2VdUWr936j9Qwe7u9EpPA", + "banner_photo_year": 2016 + }, + { + "id": 208, + "name": "Santoshpur Agragami", + "average_rating": 2.916666666666667, + "latitude": 22.4940475, + "longitude": 88.3781386, + "uuid": "1uMRPZxD3bU9R7dK6CUFww", + "is_public": true, + "banner_photo_uuid": "LB-sz9cqWLPwRJhIgddf1A", + "banner_photo_year": 2016 + }, + { + "id": 740, + "name": "Bhawanipur Kishor Sangha", + "average_rating": 2.916666666666667, + "latitude": 22.5327165, + "longitude": 88.3486222, + "uuid": "qcQTbVI47bdORwoPmUHHFA", + "is_public": true, + "banner_photo_uuid": "94FWs7RETKtbTirePviipQ", + "banner_photo_year": 2017 + }, + { + "id": 1044, + "name": "Naisha Prohori", + "average_rating": 2.9, + "latitude": 22.671994077928, + "longitude": 88.3649475127458, + "uuid": "mJsqMGt4MYbLQtqIDE766w", + "is_public": true, + "banner_photo_uuid": "piq-B2PXIINxSa6mSGRlKg", + "banner_photo_year": 2017 + }, + { + "id": 408, + "name": "Barisha Udayan Palli", + "average_rating": 2.8203125, + "latitude": 22.4753469993, + "longitude": 88.3095458698, + "uuid": "lgyiFA8StZxjQ_ge-3Y9Mg", + "is_public": true, + "banner_photo_uuid": "JLzFF850rJs5StbozNcftw", + "banner_photo_year": 2016 + }, + { + "id": 228, + "name": "Barisha Yubak Brinda", + "average_rating": 2.7936507936507935, + "latitude": 22.4865, + "longitude": 88.311996, + "uuid": "8iUl2bRZMLl8ThLaM0BPBw", + "is_public": true, + "banner_photo_uuid": "0a8GrZVzopmTT8k0LR_xSw", + "banner_photo_year": 2015 + }, + { + "id": 736, + "name": "Nabarag", + "average_rating": 2.78125, + "latitude": 22.5421467, + "longitude": 88.3211958, + "uuid": "ufxiJGOn_ZZPSWLq5S5-nA", + "is_public": true, + "banner_photo_uuid": "phIYp_Qx07lLTUwqbz2onQ", + "banner_photo_year": 2019 + }, + { + "id": 961, + "name": "Salt Lake BE East", + "average_rating": 2.75, + "latitude": 22.597557, + "longitude": 88.413891, + "uuid": "4VurZcsdJbedTvDyr0IO7w", + "is_public": true, + "banner_photo_uuid": "-vlp1sJ4ZKj2QWvAN6QyQg", + "banner_photo_year": 2017 + }, + { + "id": 271, + "name": "Howrah 6 Palli", + "average_rating": 2.74125, + "latitude": 22.599701, + "longitude": 88.346703, + "uuid": "a8swOj9gqoHCQJdUNExbTQ", + "is_public": true, + "banner_photo_uuid": "cqZpfzkWX6VbTgHM1FHoig", + "banner_photo_year": 2014 + }, + { + "id": 82, + "name": "Sovabazar Sarbojanin", + "average_rating": 2.7281746031746033, + "latitude": 22.597263183, + "longitude": 88.3605768532, + "uuid": "GhHQfPxsq5c_SGhhlxf_Bg", + "is_public": true, + "banner_photo_uuid": "TawuFYMgvLhIQ1nU1artcA", + "banner_photo_year": 2016 + }, + { + "id": 207, + "name": "Rupchand Mukherjee Lane Sarbojanin", + "average_rating": 2.7083333333333335, + "latitude": 22.527399, + "longitude": 88.345802, + "uuid": "mNo-Aka7v4dHRMOzwdWnPg", + "is_public": true, + "banner_photo_uuid": "SvZ94TuiDoiMRWesYLRvIQ", + "banner_photo_year": 2015 + }, + { + "id": 221, + "name": "Manoharpukur Sarbojanin Durgotsab", + "average_rating": 2.6328125, + "latitude": 22.5187582397, + "longitude": 88.3561475253, + "uuid": "EKqqBu4bqauwSLq2_1lm7g", + "is_public": true, + "banner_photo_uuid": "we4cX9GcL5FRQty8RvvySg", + "banner_photo_year": 2019 + }, + { + "id": 151, + "name": "74 Pally", + "average_rating": 2.6210317460317465, + "latitude": 22.5397835862, + "longitude": 88.3253103712, + "uuid": "SrSvwLgyjpUARYVtrtiVFw", + "is_public": true, + "banner_photo_uuid": "2XoErBFAYpyJSjj6NK0aFA", + "banner_photo_year": 2019 + }, + { + "id": 226, + "name": "Sitalatala Kishore Sangha", + "average_rating": 2.6166666666666667, + "latitude": 22.4809, + "longitude": 88.321503, + "uuid": "pTH3FjmFi4E_QioXRaKCGQ", + "is_public": true, + "banner_photo_uuid": "BJUqzTVcP5xmTiufhYpijQ", + "banner_photo_year": 2015 + }, + { + "id": 37, + "name": "Olabibitala Sarbojanin", + "average_rating": 2.5874149659863948, + "latitude": 22.575199, + "longitude": 88.314903, + "uuid": "qMU15aZOyIkoSFmSMkBu3w", + "is_public": true, + "banner_photo_uuid": "X5g0oIM5-ayuT8tx7HLMSw", + "banner_photo_year": 2014 + }, + { + "id": 114, + "name": "Behala Adarsha Pally", + "average_rating": 2.584325396825397, + "latitude": 22.4998, + "longitude": 88.327599, + "uuid": "xX1JdvWYa6RXT8xHl1oQ0Q", + "is_public": true, + "banner_photo_uuid": "-JXjB8kl6LSnQNEiiTpPCg", + "banner_photo_year": 2023 + }, + { + "id": 78, + "name": "Beadon Street Sarbojanin", + "average_rating": 2.5833333333333335, + "latitude": 22.589250435, + "longitude": 88.3676564761, + "uuid": "6BrWUFp-1YQoSWQ59dAMpQ", + "is_public": true, + "banner_photo_uuid": "f8XITw_GyaBUSC_kDo6GTQ", + "banner_photo_year": 2022 + }, + { + "id": 409, + "name": "Krishna Bagan Naba Jiban Sangha", + "average_rating": 2.5625, + "latitude": 22.5854766, + "longitude": 88.3728933, + "uuid": "foisyh6WWZ5kQZ6e-Xcd8A", + "is_public": true, + "banner_photo_uuid": "sdgf_TD2E66xT-od5blxsQ", + "banner_photo_year": 2015 + }, + { + "id": 89, + "name": "Salt Lake AD Block", + "average_rating": 2.555555555555556, + "latitude": 22.596457733, + "longitude": 88.4069266487, + "uuid": "ppsusAESUbTXRI9YFUtWNQ", + "is_public": true, + "banner_photo_uuid": "kjafc55pSru5QhUpmMKVbQ", + "banner_photo_year": 2017 + }, + { + "id": 417, + "name": "Udayan Khidirpur", + "average_rating": 2.5351190476190477, + "latitude": 22.5442251787, + "longitude": 88.3214387112, + "uuid": "36VdUg_VFqVUT60kXA88IA", + "is_public": true, + "banner_photo_uuid": "cnhk1sYuvo1OTcWDoPircQ", + "banner_photo_year": 2019 + }, + { + "id": 699, + "name": "Chittaranjan Sangha", + "average_rating": 2.5208333333333335, + "latitude": 22.4862150141, + "longitude": 88.3743083652, + "uuid": "GOd_sUKrdbhgTmYFyPo8pg", + "is_public": true, + "banner_photo_uuid": "gOCY-cE2Ta4_SikJPBfqDg", + "banner_photo_year": 2016 + }, + { + "id": 357, + "name": "Prafulla Kanan Adhibashi Brindo (Paschim)", + "average_rating": 2.5023504273504273, + "latitude": 22.6075167, + "longitude": 88.4215152, + "uuid": "73q3bcsIeZBMTwIYrfsoqw", + "is_public": true, + "banner_photo_uuid": "W7sfpgomKIwUTRHfQqXPwA", + "banner_photo_year": 2017 + }, + { + "id": 465, + "name": "Kidderpore Bayam Samiti", + "average_rating": 2.5, + "latitude": 22.53823648, + "longitude": 88.3250634, + "uuid": "tQ41nhLFJJiOSIeV6OYCYA", + "is_public": true, + "banner_photo_uuid": "260XK-t-B7iZQvGhyi-uig", + "banner_photo_year": 2016 + }, + { + "id": 811, + "name": "19 Palli", + "average_rating": 2.5, + "latitude": 22.5969706, + "longitude": 88.3581042, + "uuid": "Wt7hg9qRGoDsRNvzJoV9uQ", + "is_public": true, + "banner_photo_uuid": "_4NuO9dt15JMTMZqh0tEzw", + "banner_photo_year": 2016 + }, + { + "id": 1034, + "name": "Tala Dakshin Pally Durgotsab", + "average_rating": 2.5, + "latitude": 22.6049619, + "longitude": 88.3762118, + "uuid": "dypFo6HJJqNFREsXaAdNcw", + "is_public": true, + "banner_photo_uuid": "B11tT0DhBqekTC6x9zZtVg", + "banner_photo_year": 2022 + }, + { + "id": 1083, + "name": "Prafulla Kanan Balak Brinda Club", + "average_rating": 2.5, + "latitude": 22.60202825936034, + "longitude": 88.42484442785658, + "uuid": "U_YXCm4UfokkT2GroclfMA", + "is_public": true, + "banner_photo_uuid": "0jZQ6jROCq_HQC2UGKumHw", + "banner_photo_year": 2024 + }, + { + "id": 57, + "name": "Sammilita Lalabagan Sarbojanin", + "average_rating": 2.484375, + "latitude": 22.5874, + "longitude": 88.376801, + "uuid": "D4P8Rx6JA5L9Ro7iZiQreQ", + "is_public": true, + "banner_photo_uuid": "zIlTo5FD-pdRQlL0pcifVA", + "banner_photo_year": 2017 + }, + { + "id": 81, + "name": "Amherst Row Sarbojanin Durgotsab", + "average_rating": 2.466666666666667, + "latitude": 22.5845184861, + "longitude": 88.3722724736, + "uuid": "ZMrWLgF2oJHdQIGubiVEig", + "is_public": true, + "banner_photo_uuid": "PuF06AICCacgSWkWWGaobw", + "banner_photo_year": 2015 + }, + { + "id": 134, + "name": "Mukul Sangha", + "average_rating": 2.4027777777777777, + "latitude": 22.5035802221386, + "longitude": 88.3142218721143, + "uuid": "gn0rkz-ew51JQX-CLc7tOQ", + "is_public": true, + "banner_photo_uuid": "c0NVtVDjUJqSTygAMRoNEw", + "banner_photo_year": 2016 + }, + { + "id": 1470, + "name": "Salt Lake BJ Block", + "average_rating": 2.4, + "latitude": 22.590511716815136, + "longitude": 88.4268518909812, + "uuid": "G2Jw-7P6PKatQIxajuQ0yg", + "is_public": true, + "banner_photo_uuid": "h9wz-B78pYyTQ4eX_1kfqw", + "banner_photo_year": 2024 + }, + { + "id": 441, + "name": "Hindustan Tarun Sangha", + "average_rating": 2.395833333333333, + "latitude": 22.5180243709, + "longitude": 88.3615279807, + "uuid": "fH-aUlLbqpqnSRLb7UdPoA", + "is_public": true, + "banner_photo_uuid": "VL6_LRZCNpdvQoVEZQxG3Q", + "banner_photo_year": 2023 + }, + { + "id": 190, + "name": "Naskarpur Sarbojanin", + "average_rating": 2.390625, + "latitude": 22.5068822568601, + "longitude": 88.3121493861452, + "uuid": "ttuVbb5iXKTGSgfZlIalOw", + "is_public": true, + "banner_photo_uuid": "dLBfhVra8ZXsROcCbCGbtQ", + "banner_photo_year": 2016 + }, + { + "id": 161, + "name": "Bengal United Club", + "average_rating": 2.375, + "latitude": 22.5123, + "longitude": 88.3479, + "uuid": "dTJ_8h9Yb51OQ7ryQJc5kA", + "is_public": true, + "banner_photo_uuid": "rx8YGN7KXZwsSoBrJU-xJg", + "banner_photo_year": 2016 + }, + { + "id": 378, + "name": "Sahitya Parishad Sarbojanin Durgotsab", + "average_rating": 2.35, + "latitude": 22.5904646289, + "longitude": 88.3739762498, + "uuid": "T1dUFDTi2J_KSf3qcPBOgA", + "is_public": true, + "banner_photo_uuid": "PUogVzyXxJA4QfWbCaKgYg", + "banner_photo_year": 2015 + }, + { + "id": 824, + "name": "Agradut Uday Sangha", + "average_rating": 2.3333333333333335, + "latitude": 22.5337982317, + "longitude": 88.3419935033, + "uuid": "fu_r7VS_TI1-RHlR2WbVMg", + "is_public": true, + "banner_photo_uuid": "mbU2tROTrZtvSfmS3XvMHg", + "banner_photo_year": 2019 + }, + { + "id": 947, + "name": "Monotosh Smrity Sangha", + "average_rating": 2.3333333333333335, + "latitude": 22.5185348584, + "longitude": 88.3429798856, + "uuid": "9A064hVavpyZQ1QO0Gd76w", + "is_public": true, + "banner_photo_uuid": "ySc1YjtDnqq-TbGUWYqsNQ", + "banner_photo_year": 2017 + }, + { + "id": 150, + "name": "Barisha Tarun Tirtha", + "average_rating": 2.333333333333333, + "latitude": 22.484501, + "longitude": 88.319199, + "uuid": "_spI1xjtnpupRBST561xyw", + "is_public": true, + "banner_photo_uuid": "o9Oe1xbHwIXPT56_SQ7rZg", + "banner_photo_year": 2015 + }, + { + "id": 376, + "name": "Bidyasagar Udyan", + "average_rating": 2.333333333333333, + "latitude": 22.5809524484, + "longitude": 88.373030092, + "uuid": "52efaOeDfLssReQ3rPUXEQ", + "is_public": true, + "banner_photo_uuid": "A9kaea393bdRQYaGisFiag", + "banner_photo_year": 2015 + }, + { + "id": 467, + "name": "Kabitirtha", + "average_rating": 2.3125, + "latitude": 22.5405010713, + "longitude": 88.3224086836, + "uuid": "YfU4tkf4GaeyQMGi15zRag", + "is_public": true, + "banner_photo_uuid": "qEgCZ62iqJsVSezuCHH0FQ", + "banner_photo_year": 2019 + }, + { + "id": 74, + "name": "Goabagan Sarbojanin Durgotsab Samiti", + "average_rating": 2.25, + "latitude": 22.5911580232, + "longitude": 88.3728640308, + "uuid": "Txg7CsUH9L98Qnq3jAwMaQ", + "is_public": true, + "banner_photo_uuid": "UBBYqeuJhpXNQZKBL5M8sA", + "banner_photo_year": 2016 + }, + { + "id": 215, + "name": "Abasarika Club", + "average_rating": 2.25, + "latitude": 22.5070733193, + "longitude": 88.3701177289, + "uuid": "ocqKOIjwgqNwTAM1Sw863w", + "is_public": true, + "banner_photo_uuid": "x8xNWGTEGplATtiQKBo0Kw", + "banner_photo_year": 2015 + }, + { + "id": 370, + "name": "Shunra Palli", + "average_rating": 2.25, + "latitude": 22.567656184, + "longitude": 88.3923492646, + "uuid": "mcB7Hhcug67wTsath6flrw", + "is_public": true, + "banner_photo_uuid": "QEUe9ciu1paQSX_2ty72SA", + "banner_photo_year": 2015 + }, + { + "id": 794, + "name": "Behala Agradut Club", + "average_rating": 2.25, + "latitude": 22.5030282, + "longitude": 88.3112923, + "uuid": "imrXyEef0ZOcRJ3x33q_7A", + "is_public": true, + "banner_photo_uuid": "-2Z7X0Mrk6v_SQCFJlEBqg", + "banner_photo_year": 2016 + }, + { + "id": 463, + "name": "20 Palli", + "average_rating": 2.203125, + "latitude": 22.5935186648, + "longitude": 88.3579465702, + "uuid": "Cx4-OYbcDIK1S459ZxvV1w", + "is_public": true, + "banner_photo_uuid": "k4PqMASQXLxzSA_mftxd4A", + "banner_photo_year": 2015 + }, + { + "id": 405, + "name": "Bagmari 14 er Pally", + "average_rating": 2.1944444444444446, + "latitude": 22.5830371, + "longitude": 88.3807919, + "uuid": "9-Pi0y2BHpfERRBaIddjdQ", + "is_public": true, + "banner_photo_uuid": "ALAgGi5pJ4tlScM9j40gHg", + "banner_photo_year": 2015 + }, + { + "id": 261, + "name": "Barisha Youth Club", + "average_rating": 2.1354166666666665, + "latitude": 22.4790793402115, + "longitude": 88.3026376224201, + "uuid": "XXKA-CRtmYZkSXXPQcZ87Q", + "is_public": true, + "banner_photo_uuid": "OkuJ_CE5yqizQfFL9fIN2A", + "banner_photo_year": 2022 + }, + { + "id": 723, + "name": "Kata Pukur Durga Puja", + "average_rating": 2.1049382716049383, + "latitude": 22.5270789628, + "longitude": 88.3792648092, + "uuid": "KgSmCfnLGr4lTOxLNYLyAQ", + "is_public": true, + "banner_photo_uuid": "5FK1M2tal4yBRE8NtRuLzQ", + "banner_photo_year": 2017 + }, + { + "id": 222, + "name": "Padmapukur Youth Association", + "average_rating": 2.083333333333333, + "latitude": 22.5317355794, + "longitude": 88.352121068, + "uuid": "8g5x-lSc4oV8QWRfVQx41A", + "is_public": true, + "banner_photo_uuid": "PooIYEeOHa7dTZXEKFHDKg", + "banner_photo_year": 2016 + }, + { + "id": 31, + "name": "Pathuriaghata Pancher Pally", + "average_rating": 2.0625, + "latitude": 22.5886, + "longitude": 88.357399, + "uuid": "hXrJfbnMJK3NQSu5X8pz1g", + "is_public": true, + "banner_photo_uuid": "rK5A6nvtWJ9oQQRVlr14Ag", + "banner_photo_year": 2014 + }, + { + "id": 991, + "name": "Tarun Sangha", + "average_rating": 2, + "latitude": 22.512193293, + "longitude": 88.3468722375, + "uuid": "yelER8od7bJuSgNh16Pt1w", + "is_public": true, + "banner_photo_uuid": "ZEgmwTaD36enQJojUI5oBA", + "banner_photo_year": 2019 + }, + { + "id": 1138, + "name": "Nagarbazar Sarbojonin", + "average_rating": 2, + "latitude": 22.6233410191, + "longitude": 88.4146451578, + "uuid": "-3Oz596g_4AUR72rit3dnQ", + "is_public": true, + "banner_photo_uuid": "ajkeeFJDgpSgTGBQJhFajg", + "banner_photo_year": 2018 + }, + { + "id": 1211, + "name": "Agradut Club", + "average_rating": 2, + "latitude": 22.5950883623, + "longitude": 88.3431773633, + "uuid": "gvHdSBNt_qZ-RjjJTas6sQ", + "is_public": true, + "banner_photo_uuid": "bhI9ErtZR6QhQOUmOcmmGg", + "banner_photo_year": 2018 + }, + { + "id": 1365, + "name": "Khidirpur Jubogoshthi", + "average_rating": 2, + "latitude": 22.5432752477, + "longitude": 88.3198495437, + "uuid": "PNocvg4CA4rrQv2ZcqNDMg", + "is_public": true, + "banner_photo_uuid": "_HWKaZ-1PKh9T-UxIJnSfg", + "banner_photo_year": 2019 + }, + { + "id": 1366, + "name": "Kidderpore Sarbojonin Durgotsav", + "average_rating": 2, + "latitude": 22.5387603997, + "longitude": 88.3248375448, + "uuid": "LYTSVLOhQKDYTxCbb_DpCA", + "is_public": true, + "banner_photo_uuid": "l1-c0EBsX4_wT-cXMA5dKw", + "banner_photo_year": 2019 + }, + { + "id": 435, + "name": "Ramdulal Sarkar Street", + "average_rating": 1.9930555555555556, + "latitude": 22.5879133155, + "longitude": 88.3669906855, + "uuid": "v_uvOf5Re7x1TuqIxQHZ8w", + "is_public": true, + "banner_photo_uuid": "y07Kkbc1R6ncTbg8RkD2nQ", + "banner_photo_year": 2022 + }, + { + "id": 411, + "name": "Brindaban Matri Mandir", + "average_rating": 1.95, + "latitude": 22.5820167, + "longitude": 88.3728077, + "uuid": "eG8X9LBe7p7sTKazrTTYKA", + "is_public": true, + "banner_photo_uuid": "92Gv17M9ibWTSs2N_He0mw", + "banner_photo_year": 2015 + }, + { + "id": 756, + "name": "Bidhan Sarani Atlas Club", + "average_rating": 1.95, + "latitude": 22.5993558, + "longitude": 88.3729883, + "uuid": "CjcztXT_tZOfQPlyn3TA6w", + "is_public": true, + "banner_photo_uuid": "5wdAdrMPtJOYT0jPDpUz8w", + "banner_photo_year": 2023 + }, + { + "id": 1047, + "name": "Sunday Club Sarbojonin", + "average_rating": 1.9444444444444444, + "latitude": 22.6691026922, + "longitude": 88.3665588498, + "uuid": "7BdZlkZWOZWgS-csHjdBgw", + "is_public": true, + "banner_photo_uuid": "f8D6CFlZ14TeQZL2ksW38w", + "banner_photo_year": 2018 + }, + { + "id": 225, + "name": "Triangular Park Sarbojanin", + "average_rating": 1.8333333333333335, + "latitude": 22.517932192, + "longitude": 88.3583070638, + "uuid": "xQAre2AnZrA0Rfq1zXcEAw", + "is_public": true, + "banner_photo_uuid": "h5Y8BaRdwrasRGj99KSUZQ", + "banner_photo_year": 2015 + }, + { + "id": 75, + "name": "Hari Ghosh Street Sarbojonin", + "average_rating": 1.8333333333333333, + "latitude": 22.5903050945, + "longitude": 88.3682130274, + "uuid": "paCps2FFSaR4Ts5Dni9-ZA", + "is_public": true, + "banner_photo_uuid": "cCsVTHXGuqkoTV7ZreWRNg", + "banner_photo_year": 2022 + }, + { + "id": 92, + "name": "Tarun Sporting Club", + "average_rating": 1.8125, + "latitude": 22.5862519952206, + "longitude": 88.3650587383597, + "uuid": "ZlrrBoJjtKLCQaidrXZ09w", + "is_public": true, + "banner_photo_uuid": "i68UTQxeSao3SsOiSxcR7A", + "banner_photo_year": 2022 + }, + { + "id": 165, + "name": "Dilip Smriti Sangha", + "average_rating": 1.8055555555555556, + "latitude": 22.517799, + "longitude": 88.344902, + "uuid": "p_SqW1po94E2RZAFt051fA", + "is_public": true, + "banner_photo_uuid": "1G9fQeBt-rmNSbXZdUQVbw", + "banner_photo_year": 2015 + }, + { + "id": 65, + "name": "Salt Lake AE Block - Part 2", + "average_rating": 1.7916666666666665, + "latitude": 22.6007712669, + "longitude": 88.4135022792, + "uuid": "Mw9L-3Yjk5yET9SaDy3nFw", + "is_public": true, + "banner_photo_uuid": "Wpu_-Wh8Y774Qr_IfVtrsw", + "banner_photo_year": 2015 + }, + { + "id": 375, + "name": "Pallibashi Durgotsab Committee", + "average_rating": 1.75, + "latitude": 22.5858631748, + "longitude": 88.3687625117, + "uuid": "dG7f725B4Kx2T7ZrEWlPcA", + "is_public": true, + "banner_photo_uuid": "lMP8XVpDw45nStk1vfD13w", + "banner_photo_year": 2015 + }, + { + "id": 720, + "name": "Tarun Dal", + "average_rating": 1.75, + "latitude": 22.4808449, + "longitude": 88.3432343, + "uuid": "hsp0O4HSc499RwKUpAg2AA", + "is_public": true, + "banner_photo_uuid": "482wvvY_wZDXR27Lg1ag1A", + "banner_photo_year": 2016 + }, + { + "id": 766, + "name": "Panditiya Sandha Sangha", + "average_rating": 1.75, + "latitude": 22.5211222, + "longitude": 88.3575903, + "uuid": "UAWyZ9J1oKblRDLQviXxeQ", + "is_public": true, + "banner_photo_uuid": "1gRDE3cxwLK3TwmSVjHofQ", + "banner_photo_year": 2016 + }, + { + "id": 787, + "name": "Friends Union", + "average_rating": 1.75, + "latitude": 22.5161599569, + "longitude": 88.3573169634, + "uuid": "pXsRmJpon4aOSdXs9n-Q1A", + "is_public": true, + "banner_photo_uuid": "-dmIGWZNgYebTCh0lWv7WA", + "banner_photo_year": 2016 + }, + { + "id": 764, + "name": "Rajdanga Amra Kajan Kalyan Samiti", + "average_rating": 1.7277777777777779, + "latitude": 22.5161739, + "longitude": 88.3920384, + "uuid": "iVdt11YWWKj0RBhJy9nFKw", + "is_public": true, + "banner_photo_uuid": "ISKbjy1IJKDHTQ4fg_l5Kg", + "banner_photo_year": 2016 + }, + { + "id": 341, + "name": "Udyami Yubak Brinda", + "average_rating": 1.6666666666666667, + "latitude": 22.5946064, + "longitude": 88.3618861, + "uuid": "pXm2yOwvfJpYR8uv02LvcQ", + "is_public": true, + "banner_photo_uuid": "iQMxglUXMqzQTOV7iDufRA", + "banner_photo_year": 2015 + }, + { + "id": 152, + "name": "Milan Sangha", + "average_rating": 1.59375, + "latitude": 22.5410735002, + "longitude": 88.3233761684, + "uuid": "IpFo58-vco0AQMIrzxHq7g", + "is_public": true, + "banner_photo_uuid": "dN9QlznuSIGCRfSOQvO-uA", + "banner_photo_year": 2019 + }, + { + "id": 52, + "name": "Simla Byayam Samity", + "average_rating": 1.4583333333333333, + "latitude": 22.5854, + "longitude": 88.364899, + "uuid": "JOGjPmbW-IZRRxOgNjOetw", + "is_public": true, + "banner_photo_uuid": "nCGSd6EBeLbVQqAH43oPow", + "banner_photo_year": 2022 + }, + { + "id": 367, + "name": "Battala Uday Sangha", + "average_rating": 1.375, + "latitude": 22.4936899248, + "longitude": 88.3792193704, + "uuid": "YRQmx4Unoo_2QmgrA7nacQ", + "is_public": true, + "banner_photo_uuid": "S8j5WE6xxakYTiIx3C-5Ww", + "banner_photo_year": 2015 + }, + { + "id": 1030, + "name": "Lake Terrace Dakshinee Sangha", + "average_rating": 1.375, + "latitude": 22.5162075, + "longitude": 88.3563818, + "uuid": "HbARMTmVop3VSq_ja8dgEA", + "is_public": true, + "banner_photo_uuid": "10Wjr6uC1J_sSS6DgIJ0_w", + "banner_photo_year": 2017 + }, + { + "id": 111, + "name": "Debdaru Fatak", + "average_rating": 1.3611111111111112, + "latitude": 22.5026223654, + "longitude": 88.3175619365, + "uuid": "JVC8nf_TXqsIQM8mUliJEA", + "is_public": true, + "banner_photo_uuid": "9k7eDraNAr-ISK43pIu73A", + "banner_photo_year": 2016 + }, + { + "id": 66, + "name": "Salt Lake BE Block - Part 2", + "average_rating": 1.3333333333333333, + "latitude": 22.5967804452, + "longitude": 88.4122520592, + "uuid": "Psnb8lCQaZQ_Rh56xgljKw", + "is_public": true, + "banner_photo_uuid": "3nVPi4_-oL8SSNhBJ3PZIA", + "banner_photo_year": 2015 + }, + { + "id": 373, + "name": "Simla Sporting Club", + "average_rating": 1.277777777777778, + "latitude": 22.585020969, + "longitude": 88.3667264443, + "uuid": "Ty0PikaqPbloS24auA_gjg", + "is_public": true, + "banner_photo_uuid": "Q3LNTczKvY01RY6WKa0y9w", + "banner_photo_year": 2016 + }, + { + "id": 410, + "name": "Kailash Bose Street Sarbojanin", + "average_rating": 1.25, + "latitude": 22.5829499, + "longitude": 88.3700016, + "uuid": "2BkQ7Lq_95N-Sf9QFkrZXA", + "is_public": true, + "banner_photo_uuid": "6_r0eqgg6IIESN3oaf0rVg", + "banner_photo_year": 2015 + }, + { + "id": 470, + "name": "Ballygunge Purba Pally", + "average_rating": 1.25, + "latitude": 22.5223044, + "longitude": 88.3714804, + "uuid": "Lib8A3OVd7zQSWkgGHSleA", + "is_public": true, + "banner_photo_uuid": "8khT6GrsxolhR5nhhVotqA", + "banner_photo_year": 2016 + } + ], + "awards": [ + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2014, + "pandal_id": 129 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2014, + "pandal_id": 144 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Artisan of the Year", + "year": 2014, + "pandal_id": 180 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2014, + "pandal_id": 183 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Emerging new artist", + "year": 2014, + "pandal_id": 195 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2014, + "pandal_id": 274 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2015, + "pandal_id": 129 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2015, + "pandal_id": 123 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2015, + "pandal_id": 158 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2015, + "pandal_id": 116 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2015, + "pandal_id": 379 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Idol Artisan", + "year": 2015, + "pandal_id": 29 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2016, + "pandal_id": 158 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2016, + "pandal_id": 116 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2016, + "pandal_id": 127 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2016, + "pandal_id": 135 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2016, + "pandal_id": 372 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Idol Artisan", + "year": 2016, + "pandal_id": 29 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Special Jury Award", + "year": 2016, + "pandal_id": 126 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2017, + "pandal_id": 63 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2017, + "pandal_id": 357 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Idol Artisan", + "year": 2017, + "pandal_id": 116 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Special Jury Award", + "year": 2017, + "pandal_id": 35 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2017, + "pandal_id": 180 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2017, + "pandal_id": 129 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2017, + "pandal_id": 963 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Discovery of the Year", + "year": 2022, + "pandal_id": 6 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2022, + "pandal_id": 158 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2022, + "pandal_id": 220 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2022, + "pandal_id": 1385 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2022, + "pandal_id": 372 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Puja", + "year": 2022, + "pandal_id": 104 + }, + { + "awarder": "Asian Paints Sharad Shamman", + "award": "Best Idol Artisan", + "year": 2022, + "pandal_id": 35 + } + ], + "lapse": 0.23345947265625 +} \ No newline at end of file diff --git a/external/pandelHop.js b/external/pandelHop.js new file mode 100644 index 0000000..50b458c --- /dev/null +++ b/external/pandelHop.js @@ -0,0 +1,1348 @@ +// ratings +var RATINGS_DISABLED = false; +var RATING_UNSEEN = -1; +var RATING_WISHLIST = 0; +var RATING_MIN = -1; +var RATING_MAX = 5; + +// initial map view +var DEFAULT_LATITUDE = 22.5535899; +var DEFAULT_LONGITUDE = 88.3580924; +var DEFAULT_ZOOM = 12; + +// zoom when a pandal is selected +var ZOOM_WHEN_PANDAL_SELECTED = false; +var PANDAL_SELECTED_ZOOM = 18; + +// server API +var API_GET_DATA = '/api/getData'; +var API_GET_PHOTOS = '/api/getPhotos'; +var API_RATE_PLACE = '/api/ratePlace'; +var API_ADD_PHOTO = '/api/addPhoto'; +var API_ADD_PLACE = '/api/addPlace'; +var API_DELETE_PLACE = '/api/deletePlace'; +var API_MOVE_PLACE = '/api/movePlace'; +var IMG_CROSSHAIRS = '/img/crosshairs.png'; + +// marker parameters +var INFO_WINDOW_OFFSET_Y = -40; +var MAP_MARKER_W = 36; +var MAP_MARKER_H = 42; +var MARKER0_SZ = 12; +var CROSSHAIRS_SZ = 16; + +//photo uploads +var MAX_PHOTO_UPLOADS = 20; + +// tile parameters +var TILE_IMAGE_SIZE = 200; +var TILE_BORDER = 2; + +// the map +var map; +// the markers on the map +var markerFromPandalId = []; +// all of the pandals received from the server +var sortedPandals = []; +// pandals visible given the current filter setting +var filteredPandals = []; +// sparse array of all of the pandals +var pandalFromId = []; +// map from uuid to pandal +var pandalFromUuid = Object(); +// pandal ratings by ID +var ratingFromId = []; +// user info from the server +var userInfo = null; + +var prevSelectedPandalId = Number.NaN; +var selectedPandalId = Number.NaN; +var infoWindow = null; +var tiler = null; + +function clearAll() { + clearMarkers(); + hideInfoWindow(); + tiler.setTileContents([]); + markerFromPandalId = []; + sortedPandals = []; + filteredPandals = []; + pandalFromId = []; + pandalFromUuid = Object(); + ratingFromId = []; + userInfo = null; + prevSelectedPandalId = Number.NaN; + selectedPandalId = Number.NaN; +} + +// hide stuff before the page is shown +$( document ).ready( function() { + hideMapOverlays(); + // disable the menu items that require login + $("#menu-popup li.requires-login a").addClass("ui-state-disabled"); +}); + +// clear map markers +function clearMarkers() { + for(var pandal_id in markerFromPandalId) + markerFromPandalId[pandal_id].setMap(null); + markerFromPandalId = [] +} + +function hideInfoWindow() { + if (infoWindow != null) { + infoWindow.open(null); + infoWindow = null; + } +} + +function showPandalInfoWindow(pandal) { + hideInfoWindow(); + + var content = ""+pandal.name+""; + + if (pandal.awards) { + for(var i=0; i
 -  ' + pandal.awards[i].award + " (" + pandal.awards[i].year + ")"; + } + // todo: this is pretty clunky + var isSmallMarker = ((pandal.average_rating==0)&&(getRatingFromId(pandal.id)!=RATING_WISHLIST)); + infoWindow = new google.maps.InfoWindow({ + content : content, + position : {lat:pandal.latitude,lng:pandal.longitude}, + pixelOffset: new google.maps.Size(0,(isSmallMarker?0:INFO_WINDOW_OFFSET_Y)) + }); + google.maps.event.addListener(infoWindow, 'closeclick', function() {infoWindow=null}); + // tag the infoWindow with the pandal ID so we can detect the geolocation infoWindow + infoWindow.pandalId = pandal.id; + + infoWindow.open(map); +} + +// center the map on a pandal and zoom in +function showPandalOnMap(pandal) { + map.panTo(new google.maps.LatLng(pandal.latitude, pandal.longitude)); + if (ZOOM_WHEN_PANDAL_SELECTED) + map.setZoom(PANDAL_SELECTED_ZOOM); +} + +function updateMenuEnabledState() { + if (isLoggedIn()) { + $("#menu-popup li.requires-login a").removeClass("ui-state-disabled"); + + if (!userInfo || !selectedPandalId || (!userInfo.admin && pandalFromId[selectedPandalId].is_public)) + $("#menu-popup li.requires-movable-pandal a").addClass("ui-state-disabled"); + if (!userInfo || !selectedPandalId || pandalFromId[selectedPandalId].is_public) + $("#menu-popup li.requires-deletable-pandal a").addClass("ui-state-disabled"); + } + else + $("#menu-popup li.requires-login a").addClass("ui-state-disabled"); +} + +function selectTile(id) { + $('#side-panel-cell-' + id).addClass('side-panel-cell-selected'); +} + +function deselectTile(id) { + $('#side-panel-cell-' + id).removeClass('side-panel-cell-selected'); +} + +function selectPandal(pandal, showOnMap) { + if (selectedPandalId) { + deselectTile(selectedPandalId); + prevSelectedPandalId = selectedPandalId; + } + selectedPandalId = pandal.id; + selectTile(selectedPandalId); + showPandalInfoWindow(pandal); + tiler.showTile(pandal.id, true); + if (showOnMap) + showPandalOnMap(pandal); + updateMenuEnabledState(); + hideMapOverlays(); +} + +function deselectPandal() { + if (selectedPandalId) { + deselectTile(selectedPandalId); + prevSelectedPandalId = selectedPandalId; + selectedPandalId = Number.NaN; + hideInfoWindow(); + updateMenuEnabledState(); + } +} + +function onSearchPandalsClicked() { + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + $('#search-popup').popup( "open", {positionTo: '#menu-button'}); + }); +} + +function onMyPandalHoppingBlogClicked() { + if (userInfo) + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + location.pathname = userPageUrl; + }); +} + +function onRecentPhotosClicked() { + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + location.pathname = recentPageUrl; + }); +} + +// this is called when a pandal is selected during a search +function onSearchSelect(id) { + var pandal = pandalFromId[id]; + + // hide the dropdown + $('input[data-type="search"]').val(""); + $('input[data-type="search"]').trigger("keyup"); + $('#search-popup').popup("close"); + + selectPandal(pandal, true); +} + +function onAddPandalClicked() { + showAddPandalOverlays(); + /*if (geoMarker) { + map.panTo(geoMarker.getPosition()); + map.setZoom(ZOOM_TO_LOCATION_ZOOM); + }*/ + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + openOkayPopup("Add Pandal", "Move and zoom the map to position the red dot where you want the new pandal to be placed. Then press the Add Pandal button at the upper-right of the map. To cancel press the X button." , "Okay" ); + }); +} + +function onAddPandalCancelClick() { + hideMapOverlays(); +} + +function onAddPandalAddClick() { + $('#add-pandal-form').on('submit', function(e) { + $(this).unbind(e); + if (e.preventDefault) e.preventDefault(); + hideMapOverlays(); + $('#add-pandal-popup').popup("close"); + var center = map.getCenter(); + var name = $('#add-pandal-form input[name="name"]').val(); + useAccessToken(function(tok){ + api_addPandal(name, center.lat(), center.lng(), tok); + }); + return false; + }); + // clear the old name + $('#add-pandal-name').val(''); + $('#add-pandal-popup').popup("open"); +} + +function api_addPandal(name, lat, lng, tok) { + var params = {name:name, lat:lat, lng:lng, tok:tok}; + if (window.hasOwnProperty('eventName') && (eventName != null)) + params["event"] = eventName; + postUrl(API_ADD_PLACE, params).done(function(response) { + if (!response.error) { + var pandal = response; + addPandals([pandal]); + selectPandal(pandal, true); + } + }); +} + +function onMoveSelectedPandalClicked() { + showMovePandalOverlays(); + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + openOkayPopup("Move Pandal", "Move and zoom the map to position the red dot where you want the pandal to be moved to. Then press the Move Pandal button at the upper-right of the map. To cancel press the X button." , "Okay" ); + }); +} + +function onMoveSelectedPandalCancelClick() { + hideMapOverlays(); +} + +function onMoveSelectedPandalMoveClick() { + hideMapOverlays(); + if (selectedPandalId) { + var center = map.getCenter(); + useAccessToken(function(tok){ + api_movePandal(selectedPandalId, center.lat(), center.lng(), tok); + }); + } +} + +function api_getPhotos(pandal_id) { + var pandal = pandalFromId[pandal_id]; + pandal.getPhotosPromise = $.Deferred(); + useAccessToken(function(tok){ + getUrl(API_GET_PHOTOS, {pandal_id: pandal_id, tok: tok}).done(function(response) { + console.log(response); + pandal.photos = response.photos; + pandal.getPhotosPromise.resolve(); + }).fail(function() { + alert("Error communicating with the server. Please check your internet connection and reload the page."); + }); + }); +} + +function api_movePandal(pandal_id, lat, lng, tok) { + postUrl(API_MOVE_PLACE, {pandal_id:pandal_id, lat:lat, lng:lng, tok:tok}).done(function(response) { + console.log(response); + if (response.num_pandals_moved) { + var pandal = pandalFromId[response.pandal_id]; + pandal.latitude = response.latitude; + pandal.longitude = response.longitude; + var marker = markerFromPandalId[pandal.id]; + if (marker) + marker.setPosition( new google.maps.LatLng(pandal.latitude, pandal.longitude) ); + // move the info window (the cheesy way) + if (infoWindow && (infoWindow.pandalId == pandal.id)) { + hideInfoWindow(); + showPandalInfoWindow(pandal); + } + } + }); +} + +function onDeleteSelectedPandalOkayClicked() { + if (selectedPandalId) { + var pandal = pandalFromId[selectedPandalId]; + // never delete a public pandal - use the admin interface + if (!pandal.is_public) { + useAccessToken(function(tok){ + api_deletePandal(pandal.id, tok); + }); + } + } +} + +function onDeleteSelectedPandalClicked() { + if (selectedPandalId) { + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + var pandal = pandalFromId[selectedPandalId]; + openCancelPopup("Delete pandal?", 'If you delete a pandal the pandal and all of its photos will be gone forever.

Are you sure you want to delete the pandal "' + pandal.name + '"?', "Delete", onDeleteSelectedPandalOkayClicked, false); + }); + } +} + +function api_deletePandal(pandal_id, tok) { + postUrl(API_DELETE_PLACE, {pandal_id:pandal_id, tok:tok}).done(function(response) { + console.log(response); + if (response.num_pandals_deleted) { + var pandal_id = response.pandal_id; + // deselect the deleted pandal (unless a different one is now selected) + if (pandal_id == selectedPandalId) + deselectPandal(); + // remove from sortedPandals + for(var i = 0; i < sortedPandals.length; i++) + if (sortedPandals[i].id == pandal_id) { + sortedPandals.splice(i,1); + break; + } + // delete stuff from lists + delete pandalFromUuid[pandalFromId[pandal_id].uuid]; + delete pandalFromId[pandal_id]; + delete ratingFromId[pandal_id]; + // refresh stuff + initPandalSearch(); + onChangePandalFilter(); + } + }); +} + +function onPopupPhotoClicked(pandal_id) { + // Todo: For now we close the pandal popup when we start the slideshow. This addresses a bug + // that when the slideshow is up on top of the popup there is always an href active that shows up + // in the lower left of Chrome. + closePandalDialog(); + + // This is on a 1 ms timeout so that the close pandal callbacks can be completed first. + // I used to have this inside a popupafterclose callback but it would have to run after the + // one that is installed during initialize(), and its hard to ensure that order. + setTimeout(function(){ + var pandal = pandalFromId[pandal_id]; + startSlideshow2(pandal.uuid); + }, 100); +} + +function getRatingFromId(id) { + return (id in ratingFromId)?(ratingFromId[id]):(RATING_UNSEEN); +} + +function getThumbUrl(photo_uuid) { + return "/photos/thumbs/" + photo_uuid + ".jpg" +} + +function getSlideUrl(photo_uuid) { + // we need the absolute URL in order for the sharing links to work + return "http://" + window.location.hostname + (window.location.port?(":"+window.location.port):"") + "/photos/slides/" + photo_uuid + ".jpg" +} + +function onPandalPopupLoginButtonClicked() { + $(document).on('popupafterclose', '#pandal-popup', function(event) { + $(this).unbind(event); + // todo: this delay is a hack due to JQM's behavior + setTimeout(function(){ + onLoginMenuClicked(); + }, 1000); + }); + $("#pandal-popup").popup( "close" ); +} + +function openPandalDialog(pandal, suppressHistory) { + // make sure the photos are loaded for the slideshow + if (!pandal.photos && !pandal.getPhotosPromise) + api_getPhotos(pandal.id); + + var id = pandal.id; + var rating = getRatingFromId(id); + + hideMapOverlays(); + + // show the appropriate stuff based on whether the user is logged in + var loggedIn = isLoggedIn(); + $('#pandal-popup-not-logged-in-div').toggle(!loggedIn); + $('#pandal-popup-logged-in-div').toggle(loggedIn); + $('#add-photo-button').toggle(loggedIn); + + // clear the old photo, which otherwise briefly appears + $("#pandal-popup-photo").attr("src", ""); + + // Reset the radio buttons according to the pandal ratings. + for(var i = RATING_MIN; i <= RATING_MAX; i++) + $('#rating-radio-choice-'+i).attr("checked", false); + $('#rating-radio-choice-'+rating).attr("checked","checked"); + // In theory, we should only need this: + // $("#pandal-popup input[type='radio']").checkboxradio("refresh"); + // But there seems to be a bug where after a few times the radio + // stops showing the checked option as checked. So we rebuild from html. + $('#pandal-popup').html($('#pandal-popup').html()); + $('#pandal-popup').trigger('create'); + + $("#pandal-popup-name").html(pandal.name); + $("#pandal-popup-photo").unbind("click"); // get rid of old click handler if any + $("#pandal-popup-photo").click( function () { + onPopupPhotoClicked(id); + }); + if (!pandal.banner_photo_uuid) + $("#pandal-popup-photo").attr("src", ""); + else { + $("#pandal-popup-photo").attr("src", getThumbUrl(pandal.banner_photo_uuid)); + } + // add an id that is specific to this pandal so we can select for it + $(".pandal-popup-stars-div").attr("id", "pandal-popup-stars-div-" + id); + updateStarsInPopup(pandal); + + $("#activity-log-link").attr("href", "/place/"+pandal.uuid); + + // remove previous onclick bindings (see the error handler below) + $('#add-photo-button').unbind('click'); + + // open the popup + $("#pandal-popup").popup( "open" ); + + // plupload + if (loggedIn) { + useAccessToken(function(tok){ + var uploader = new plupload.Uploader({ + runtimes : 'html5,flash,silverlight,html4', + + browse_button : 'add-photo-button', + container: document.getElementById('plupload-hidden-container'), + + url : API_ADD_PHOTO, + + file_data_name : "imageFile", + + filters : { + max_file_size : '10mb', + mime_types: [ + {title : "Image files", extensions : "jpg,jpeg"}, + ] + }, + + flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf', + silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap', + + multipart_params : { + "place_id" : id.toString(), + "tok" : tok + }, + + init: { + PostInit: function() { + $('#photo-upload-status').html(''); + $('#photo-upload-status').hide(); + $('#add-photo-button').show(); + indexFromFileId = []; + numFiles = 0; + }, + + FilesAdded: function(up, files) { + if (files.length > MAX_PHOTO_UPLOADS) + alert("A maximum of " + MAX_PHOTO_UPLOADS + " photos can be uploaded at a time. The first " + MAX_PHOTO_UPLOADS + " photos that you selected will be uploaded."); + up.files.splice(MAX_PHOTO_UPLOADS); + files.splice(MAX_PHOTO_UPLOADS); + plupload.each(files, function(file) { + indexFromFileId[file.id] = numFiles; + numFiles++; + }); + uploader.start(); + }, + + UploadProgress: function(up, file) { + var i = indexFromFileId[file.id]; + $('#add-photo-button').hide(); + $('#photo-upload-status').html("
Uploading " + (i+1) + " of " + numFiles + "
" + file.percent + "%
"); + $('#photo-upload-status').show(); + }, + + FileUploaded: function(upldr, file, object) { + var i = indexFromFileId[file.id]; + if (i == numFiles-1) { + $('#add-photo-button').show(); + $('#photo-upload-status').hide(); + $('#photo-upload-status').html(""); + } + photo = eval('(' + object.response + ')'); + if (photo.error) { + console.log("Photo upload error: " + photo.error); + alert("Server failed to upload photos. Please try again."); + } + else { + console.log("Added photo: " + object.response); + thumbUrl = getThumbUrl(photo.uuid); + if (photo.pandal_id == selectedPandalId) + $("#pandal-popup-photo").attr("src", thumbUrl); + $("#side-panel-cell-"+photo.pandal_id+" img").attr("src", thumbUrl); + if (!pandal.hasOwnProperty("photos")) + pandal.photos = []; + pandal.photos.unshift(photo); + // make this photo the banner if there isn't one + if (!pandal.banner_photo_uuid) + pandal.banner_photo_uuid = photo.uuid; + } + }, + + Error: function(up, err) { + console.log("Plupload Error #" + err.code + ": " + err.message); + $('#add-photo-button').unbind('click'); + $('#add-photo-button').bind('click', function(){ + alert('Your browser is not supported for photo upload. Please try a newer browser.'); + }); + } + } + }); + + uploader.init(); + }); + } + + // the pandal popup has its own URL + if (!suppressHistory) + pushHistoryState(id); +} + +function onRatingChange() { + // There is a very special case being handled here. If the current filter is Wishlist and the rating + // in the popup is changed from Wishlist to something else, the pandal will disappear from the current + // filter set and be deselected. But the popup is still open and the user may want to change the rating. + // So we keep around the previously selected pandal ID and use it if there is no selection. + var pandalId = selectedPandalId?selectedPandalId:prevSelectedPandalId; + var oldRating = getRatingFromId(pandalId); + var newRating = parseInt($('input[name=rating-radio]:checked').val()); + + if (!RATINGS_DISABLED || (((oldRating == RATING_UNSEEN) || (oldRating == RATING_WISHLIST)) && ((newRating == RATING_UNSEEN) || (newRating == RATING_WISHLIST)))) { + console.log("rating pandal " + pandalFromId[pandalId].name + " a " + newRating ); + useAccessToken(function(tok){ + api_ratePandal(pandalId, newRating, tok); + }); + } + else { + console.log("ignoring rating change"); + } +} + +var WISHLIST_FILTER_NAME = "Wishlist"; + +function isCurrentFilterWishlist() { + return ($("#pandal-filter-select option:selected").val() == WISHLIST_FILTER_NAME); +} + +function setCurrentFilter(filter) { + var sel = $("#pandal-filter-select"); + sel.val(filter).attr('selected', true).siblings('option').removeAttr('selected'); + sel.selectmenu("refresh", true); + onChangePandalFilter(); +} + +function api_ratePandal(pandal_id, rating, tok) { + postUrl(API_RATE_PLACE, {pandal_id: pandal_id, rating: rating, tok: tok}).done(function(response) { + if (response.error) { + alert("An error occured. Please try rating the pandal again."); + console.log("ratePandal error: " + response.error); + return; + } + console.log("rating change successful"); + // new ratings + var newRating = response.new_rating; + var newAverageRating = response.average_rating; + + // old ratings + var pandal_id = response.pandal_id; + var pandal = pandalFromId[pandal_id]; + var oldRating = getRatingFromId(pandal_id); + var oldAverageRating = pandal.average_rating; + + // set the new ratings + ratingFromId[pandal_id] = newRating; + var oldStars = getNumStars(pandal.average_rating); + pandal.average_rating = response.average_rating; + var newStars = getNumStars(response.average_rating); + + if (oldStars != newStars) { + updateStarsInSidePanelAndPopup(pandal_id); + } + + // If our current filter is Wishlist and a rating changes then we have to re-filter + // because we don't have an incremental way of dealing with the sidebar + if ( isCurrentFilterWishlist() && + ((oldRating==RATING_WISHLIST)!= (newRating==RATING_WISHLIST))) + onChangePandalFilter(); + // update the marker if the wishlist or average rating of this marker changed + else if (((oldRating==RATING_WISHLIST)!= (newRating==RATING_WISHLIST)) || + (getNumStars(oldAverageRating)!=getNumStars(newAverageRating))) { + updateMapMarker(pandal_id); + // sometimes the infoWindow needs to be moved because unrated pandals only have a dot + if (infoWindow && (infoWindow.pandalId == pandal.id)) { + hideInfoWindow(); + showPandalInfoWindow(pandal); + } + } + }); +} + +function onSidePanelSelect(pandal_id) { + var pandal = pandalFromId[pandal_id]; + if (pandal_id == selectedPandalId) + openPandalDialog(pandal); + else + selectPandal(pandal, true); +} + +function onMapSelect(id) { + var pandal = pandalFromId[id]; + // If an unselected map marker is clicked, or the user had close the info window then we + // do a select (which will just reopen the info window if this pandal is already selected). + // The (infoWindow.pandalId != id) takes care of the geolocation infoWindow. + if ((infoWindow == null) || (id != infoWindow.pandalId) || (id != selectedPandalId)) { + selectPandal(pandal, false); + } + else { + openPandalDialog(pandal); + } +} + +function onInfoWindowSelect(id) { + var pandal = pandalFromId[id]; + openPandalDialog(pandal); +} + +function afterResize(mapw, maph) { + var winw = $(window).width(); + var winh = $(window).height(); + + $(".map-overlay-buttons").css({right: winw-mapw}); + + // move the crosshairs (depends on variables in both of the above blocks) + var left = ((mapw-CROSSHAIRS_SZ)/2); + var top = ((maph-CROSSHAIRS_SZ)/2); + $("#map-crosshairs").css({left: left, top: top}); + + // resize map keeping same center + var center = map.getCenter(); + google.maps.event.trigger(map, "resize"); + map.setCenter(center); +} + +function openIntroPopup() { + // if we change the intro and want it to appear again, just change "tag" to something new + var tag = '4'; + if (getLocalStorage('intro_popup') !== tag) { + setLocalStorage('intro_popup', tag); + $("#intro-popup").popup("open"); + } +} + +// initialize the app +function initialize() { + + var mapOptions; + + // center the map + mapOptions = { + center : new google.maps.LatLng(DEFAULT_LATITUDE, DEFAULT_LONGITUDE), + zoom : DEFAULT_ZOOM, + mapTypeId : google.maps.MapTypeId.ROADMAP, + mapTypeControl : false, + scaleControl : true, + overviewMapControl : false, + streetViewControl : false, + fullscreenControl : false + }; + map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); + + tiler = new Tiler({ + getTileHtml: getSidePanelCellHtml, + afterResize: afterResize, + headerId: "Header", + tileViewportId: "tile-viewport", + mapId: "map-canvas", + tileSize: TILE_IMAGE_SIZE + 2*TILE_BORDER, + border: TILE_BORDER + }); + + // track the user's location + initGeoLocation(); + + // The filter button keeps focus after being clicked, leaving a blue halo, so we remove the focus after the + // popup closes (the popup ID *-listbox-popup and the button ID *-button are created internally by JQM). + // This also seems to address a bug on Android where the menu button and the filter button would kind + // of get stuck together and you'd get the filter when trying to click the menu. + $(document).on('popupafterclose', '#pandal-filter-select-listbox-popup', function () { + setTimeout(function(){ + $('#pandal-filter-select-button').blur(); + }, 100); + }); + + $(document).on('popupafterclose', '#pandal-popup', function () { + // go back in history if this is a popup URL (it will be if the popup was not closed by pressing the back button) + if (window.location.pathname.indexOf('/site/') >= 0) + window.history.back(); + }); + + // This magically prevents some erroneous page navigations done by JQM. + // Since I am messing with the history, it confuses JQM. In the long run I need + // to turn off JQM history but they I have to replace it for all popup menus. + $(document).on("pagebeforechange", function(e) { + e.preventDefault(); + } ) + + window.addEventListener("popstate", function(e){ + console.log("popstate: " + window.location.pathname); + // If the gallery is open, we close it. In the long run if our states become more complicated + // we may need to be more careful here and check if it's really a "closed gallery" state (not, for + // example, an open gallery state). + if (gallery) + gallery.close(); + var m = window.location.pathname.match("/site/([0-9a-zA-Z_-]+)/photo/([0-9a-zA-Z_-]+)"); + if (m) + startSlideshow2(m[1], m[2]); + else { + m = window.location.pathname.match("/site/([0-9a-zA-Z_-]+)"); + if (m) { + var pandal = pandalFromUuid[m[1]]; + selectPandal(pandal, true); + // use a delay to work around JQM quirkiness (otherwise the popup closes immediately) + setTimeout(function(){ + openPandalDialog(pandal, true); // suppress history + }, 100); + } + else + $('#pandal-popup').popup( "close" ); + } + }); + + // After getting the public pandals and initializing the login system + // (which loads the pandals from the server) we can process the URL + // and open the pandal popup or slideshow + initLogin().then(initStateFromUrl); + + // The only way I have figured out how to open this dialog on startup without messing up + // JQMs history is to do it on a timer. The system I had before this of opening it when JQM + // thinks the page is ready only worked without history turned on. But I want to be able to + // use the back button for this dialog too. + // Only show the intro popup when the user navigates to the root (we don't want it to interfere + // if the first time the user comes to the site it is via a link to a photo or pandal). + if (window.location.pathname == '/') { + setTimeout(function(){ + openIntroPopup() + }, 1000); + } +} + +function addSlash(path) { + if (path[path.length-1] == '/') + return path; + return path + '/'; +} + +function pushHistoryState(selectedPandalId) { + var newUrl = addSlash(window.location.pathname) + "site/" + pandalFromId[selectedPandalId].uuid; + // replace the state if it's one of ours + if (window.location.pathname.indexOf("/site/") >= 0) + window.history.replaceState(null, "title", newUrl); + else + window.history.pushState(null, "title", newUrl); +} + +function closePandalDialog() { + $('#pandal-popup').popup( "close" ); +} + +function getRatingsFromServer(tok) { + if (tok) { + api_getRatings(tok); + } +} + +function getUrl(url, args, dataType) { + if (!dataType) + dataType = "json"; + + var settings = { + url: url, + data: args, + dataType: dataType + }; + + return $.ajax(settings); +} + +function postUrl(url, args) { + var settings = { + url: url, + data: args, + dataType: "json", + method: "POST", + }; + + return $.ajax(settings); +} + +function getNumStars(average_rating) { + return Math.round(average_rating); +} + +// create a marker +function createMarker(pandal) { + // select icon based on rating + var numStars = getNumStars(pandal.average_rating); + var icon = '/img/m' + numStars + ((getRatingFromId(pandal.id)==RATING_WISHLIST)?'wish':'') + '.png'; + + if (icon == '/img/m0.png') + var image = { + url: icon, + origin: new google.maps.Point(0, 0), + anchor: new google.maps.Point(MARKER0_SZ/2, MARKER0_SZ/2) + } + else + var image = { + url: icon, + origin: new google.maps.Point(0, 0), + anchor: new google.maps.Point(MAP_MARKER_W/2, MAP_MARKER_H) + }; + + var markerConfig = { + title : pandal.name, + position : new google.maps.LatLng(pandal.latitude, pandal.longitude), + icon : image, + draggable : false, + map: map + }; + var marker = new google.maps.Marker(markerConfig); + + var id = pandal.id; + google.maps.event.addListener(marker,"click", function(mouseEvent) { + onMapSelect(id); + }); + + return marker; +} + +function initPandalSearch(){ + $("#searchPandals_ul").on("filterablebeforefilter", function (e, data) { + var ul = $(this); + var htmlContent = ""; + var pandals = filteredPandals; // change this to sortedPandals if we want to search all of them + + // add an
  • for each pandal + for(var i=0; i" + pandals[i].name + "
  • "; + } + + ul.html(htmlContent); + ul.listview("refresh"); + ul.trigger("updatelayout"); + }); +} + +function addPandals(newPandals, awards) { + console.log("addPandals: " + newPandals.length); + if (newPandals.length > 0) { + // append the new elements + for (var i=0; i < newPandals.length; i++) + sortedPandals.push(newPandals[i]); + + // map IDs to pandals + for(var i = 0; i < newPandals.length; i++) { + pandalFromId[newPandals[i].id] = newPandals[i]; + pandalFromUuid[newPandals[i].uuid] = newPandals[i]; + } + + // attach the awards to each pandal + if (awards) { + console.log("awards: " + awards.length); + for(var i in awards) { + var award = awards[i]; + var pandal_id = award.pandal_id; + if (pandal_id in pandalFromId) { + var pandal = pandalFromId[pandal_id]; + if (!("awards" in pandal)) { + pandal.awards = []; + } + pandal.awards.push(award); + } + } + } + + // initialize the autocomplete + initPandalSearch(); + + // populate the map and sidebar + // todo: it would be nice if this was incremental, but it should be quite rare that addPandals is called + // due to a nonzero number of personal pandals. + onChangePandalFilter(); + } +} + +function processData(response) { + var before = Date.now(); + clearAll(); + + if (response.lapse) + console.log("server processing took " + Math.round(1000 * response.lapse) + " milliseconds"); + + if (response.user) + userInfo = response.user; + + var oldRatingFromId = ratingFromId; + + if (response.ratings) { + ratings = response.ratings; + + // record them by pandal ID + ratingFromId = []; + for(var i = 0; i < ratings.length; i++) + ratingFromId[ratings[i].pandal_id] = ratings[i].rating; + } + + if (response.pandals) { + sortedPandals = []; + pandalFromId = []; + pandalFromUuid = Object(); + + addPandals(response.pandals, response.awards); + } + + var after = Date.now(); + console.log("processData took " + (after-before) + " milliseconds"); +} + +function initStateFromUrl() { + // open the pandal popup or slideshow based on the current URL + var re0 = /\/site\/([0-9a-zA-Z_-]+)/; + var match0 = re0.exec(window.location.pathname); + + if (match0) { + var i = window.location.pathname.indexOf('/site/'); + if (i >= 0) + var basePath = window.location.pathname.slice(0,i); + else + var basePath = window.location.pathname; + + // select pandal + var pandal = pandalFromUuid[match0[1]]; + if (pandal) + selectPandal(pandal, true) + else { + console.log("pandal does not exist"); + // return the URL to the root since we won't open the popup + window.history.replaceState(null, "title", basePath); + return; + } + + var re1 = /\/photo\/([0-9a-zA-Z_-]+)/; + var match1 = re1.exec(window.location.pathname); + + // put in a root state so we can use back() to exit the slideshow or popup + window.history.replaceState(null, "title", basePath); + + if (match1) { + startSlideshow2(pandal.uuid, match1[1]) + } + else { + openPandalDialog(pandal, false) + } + } +} + +function unpack(splash) { + var n = 65; + var a = splash.substring(0,2*n); + var b = splash.substring(2*n); + var m = []; + for( var i = 0; i < n; i++) + m[a[2*i+1]] = a[2*i]; + var s = ''; + for (var i = 0; i < b.length; i++) + s += m[b[i]]; + return JSON.parse(atob(s)); +} + +function api_getData(tok) { + var before = Date.now(); + var deferred = $.Deferred(); + if (window.hasOwnProperty('ph_splash') && (ph_splash != null)) { + processData(unpack(ph_splash)); + // if the user logs in or out the ph_splash is invalid, so we just use it once + ph_splash = null + deferred.resolve(); + } + else { + var params = {} + if (tok) + params["tok"] = tok; + else + params["logout"] = null; + if (window.hasOwnProperty('eventName') && (eventName != null)) + params["event"] = eventName; + getUrl(API_GET_DATA, params, "text").done(function(response) { + processData(unpack(response)); + deferred.resolve(); + }).fail(function() { + deferred.reject(); + }); + } + deferred.done(function() { + var after = Date.now(); + console.log("api_getData took " + (after-before) + " milliseconds"); + }); + return deferred.promise(); +} + +function updateMapMarker(pandal_id) { + var pandal = pandalFromId[pandal_id]; + console.log("updating marker for " + pandal.name); + markerFromPandalId[pandal_id].setMap(null); + markerFromPandalId[pandal_id] = createMarker(pandal); +} + +function createMapMarkers(pandals) { + clearMarkers(); + for(var i = 0; i < pandals.length; i++) + markerFromPandalId[pandals[i].id] = createMarker(pandals[i]); +} + +function onFilteredPandalsChanged() { + createMapMarkers(filteredPandals); + populateSidePanel(filteredPandals); +} + +function hasAward(pandal, awarder) { + if (pandal.awards) + for (i in pandal.awards) + if (pandal.awards[i].awarder == awarder) + return true; + + return false; +} + +// filter the pandals according to rating and awards +function updateFilteredPandals(starsThreshold, awardName) { + var foundSelected = false; + filteredPandals = []; + + for (var i=0; i= starsThreshold)) || + ((awardName=="Wishlist") && (getRatingFromId(pandal.id) == RATING_WISHLIST)) || + (awardName && hasAward(pandal, awardName))) + { + filteredPandals.push(pandal); + if (selectedPandalId == pandal.id) + foundSelected = true; + } + } + + // if the selected pandal is not in the new filtered set, deselect it + if (!foundSelected) + deselectPandal(); + + onFilteredPandalsChanged(); +} + +function getStarsUrl(average_rating) { + return (average_rating==0)?(""):("/img/stars" + getNumStars(average_rating) + ".png"); +} + +function getSidePanelCellHtml(pandalId, tileSize) { + var thumbSize = tileSize - 2*TILE_BORDER; + var pandal = pandalFromId[pandalId]; + // todo: this is a hack to scale the stars down from 48 to 24 and also scale them with the tiles + var starsHeight = (24*thumbSize)/TILE_IMAGE_SIZE; + var imgSrc = pandal.banner_photo_uuid?getThumbUrl(pandal.banner_photo_uuid):""; + var starsUrl = getStarsUrl(pandal.average_rating); + // we have to hide the image if there are no stars or else it draws a box, but we need the img there in case the rating changes, + // and this is the only place we really know the tile size + var imgDisplay = starsUrl ? "inline" : "none"; + var starsDiv = "
    "; + + return "
    " + pandal.name + "
    " + starsDiv + "
    "; +} + +function updateStarsInPopup(pandal) { + var starsUrl = getStarsUrl(pandal.average_rating); + // we select using an id that is only valid for this pandal + if (starsUrl) + $("#pandal-popup-stars-div-"+pandal.id).html(""); + else + $("#pandal-popup-stars-div-"+pandal.id).html("
    (no stars yet)
    "); +} + +function updateStarsInSidePanelAndPopup(pandalId) { + var pandal = pandalFromId[pandalId]; + var starsUrl = getStarsUrl(pandal.average_rating); + // select the side panel image + var selector = "#side-panel-cell-" + pandal.id + " .pandal-stars-overlay img" + $(selector).attr("src", starsUrl); + $(selector).toggle(Boolean(starsUrl)); + // update the popup + updateStarsInPopup(pandal); +} + +// add pandals to the side panel +function populateSidePanel(pandals) { + if (tiler) { + var idList = []; + for(var index in pandals) + idList[index] = pandals[index].id; + + tiler.setTileContents(idList); + if (selectedPandalId) { + selectTile(selectedPandalId); + tiler.showTile(selectedPandalId); + } + } +} + +// this is called when the user selects a new pandal filter +function onChangePandalFilter() { + var selectedIndex = Math.max(0, document.getElementById('pandal-filter-select').selectedIndex); + var selectedValue = document.getElementById('pandal-filter-select').options[selectedIndex].value; + + var minStars = parseInt(selectedValue); + + if (isNaN(minStars)) + updateFilteredPandals(0, selectedValue); + else + updateFilteredPandals(minStars, ""); +} + +var gallery; + +// an onclick handler that just follows the href (to work around photoswipe breaking internal links) +function onclickHref(obj) { + location.assign(obj.getAttribute("href")); +} + +function startSlideshow2(pandal_uuid, photo_uuid) { + var pandal = pandalFromUuid[pandal_uuid]; + // if there are already photos for the pandal, use them + if (pandal.photos) + startSlideshow(pandal_uuid, photo_uuid); + else { + // if getPhotos is not underway, start it + if (!pandal.getPhotosPromise) + api_getPhotos(pandal.id); + // when the photos are ready, start the slideshow + pandal.getPhotosPromise.done(function(){ + startSlideshow(pandal_uuid, photo_uuid); + }); + } +} + +function startSlideshow(pandal_uuid, photo_uuid){ + var html = ""; + var pandal = pandalFromUuid[pandal_uuid]; + var photos = pandal.photos; + + var i = window.location.pathname.indexOf('/site/'); + if (i >= 0) + var basePath = window.location.pathname.slice(0,i+1); + else + var basePath = addSlash(window.location.pathname); + + if (photos) { + var items = []; + var startIndex = 0; + for(var i=0; i" + photo.user_name + " on " + photo.when_taken) + }); + } + + var pswpElement = document.querySelector('#gallery'); + + if (!pswpElement) + console.log("failed to select #gallery"); + + var options = { + index: startIndex, + history: false, + + addCaptionHTMLFn: function(item, captionEl, isFake) { + if(!item.title) { + captionEl.children[0].innerText = ''; + return false; + } + captionEl.children[0].innerHTML = item.title + '
    ' + item.subtitle + ''; + return true; + } + }; + + gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options); + if (gallery) + gallery.init(); + else + console.log("gallery failed to open"); + + photo_uuid = items[startIndex].pid; + + // push the first photo onto the history (or replace the one that is there) + if (window.location.pathname.indexOf('/photo/') >= 0) + window.history.replaceState(null, "title", basePath + "site/" + pandal_uuid + "/photo/" + photo_uuid); + else + window.history.pushState(null, "title", basePath + "site/" + pandal_uuid + "/photo/" + photo_uuid); + + // when the photo changes, change the history + gallery.listen('afterChange', function() { + var pid = items[gallery.getCurrentIndex()].pid; + window.history.replaceState(null, "title", basePath + "site/" + pandal_uuid + "/photo/" + pid); + }); + // when the slideshow is destroyed, go back in history + gallery.listen('destroy', function() { + // There is a tricky problem being solved here. The gallery can be closed by pressing the + // close button or by pressing the back button. But if the former, we have to rewind history + // but we don't want it to do anything since the gallery will already be closed. So we null + // out the gallery global here so that popstate knows now to try to close the gallery in this case. + gallery = null; + // If the slideshow is closed due to pressing the back button, we don't want to back() again. + // We only go back() manually if the current state is a slideshow state (photoUuid exists). + if (window.location.pathname.indexOf('/photo/') >= 0) { + window.history.back(); + } + }); + } +} + +function onMenuClicked() { + hideMapOverlays(); + $('#menu-popup').popup( "open", {positionTo: '#menu-button'} ); +} + +function hideMapOverlays() { + $(".map-overlay").hide(); +} + +function showAddPandalOverlays() { + $("#add-pandal-button-group-on-map").show(); + $("#map-crosshairs").show(); +} + +function showMovePandalOverlays() { + hideMapOverlays(); + $("#move-pandal-button-group-on-map").show(); + $("#map-crosshairs").show(); +} + +function openOkayPopup(title, contents, okay_text, okay_callback) { + $('#okay-popup-title').html(title); + $('#okay-popup-contents').html(contents); + $('#okay-popup-okay-button').html(okay_text); + $('#okay-popup-okay-button').unbind("click"); + if (okay_callback) + $('#okay-popup-okay-button').click(okay_callback); + $('#okay-popup').popup( "open" ); +} + +function openCancelPopup(title, contents, okay_text, okay_callback, redirect_on_okay) { + if (redirect_on_okay) + $('#cancel-popup-okay-button').removeAttr('data-rel'); + else + $('#cancel-popup-okay-button').attr('data-rel', 'back'); + $('#cancel-popup-title').html(title); + $('#cancel-popup-contents').html(contents); + $('#cancel-popup-okay-button').html(okay_text); + $('#cancel-popup-okay-button').unbind("click"); + $('#cancel-popup-okay-button').click(okay_callback); + $('#cancel-popup').popup( "open" ); +} + +function onGetTheAndroidAppClicked() { + window.open('https://play.google.com/store/apps/details?id=com.pandalhop.pandalhopper'); +} + +function helpClicked() { + $("#menu-popup").on("popupafterclose", function(event) { + $(this).unbind(event); + location.pathname = "/html/faq.html" + }); +} + +function onLoginMenuClicked() { + openCancelPopup('Facebook Login', "Pandal Hopper uses Facebook to verify your identity. It will not post on your behalf or anything like that. If your browser blocks the Facebook popup you will have to unblock it.

    If you choose not to log in you can still browse the pandals, but you won't be able to add pandals, rate them or save them to a wishlist, or upload photos.

    Please upload only photos taken yourself. Photos with text overlays, ads or any other inappropriate content will be removed at our discretion.
    ", "Agree and Login", onLoginClicked, true); +} + +function onLoginClicked() { + window.location = "/social-auth/login/facebook/?next=/pandalhop" +} + +function onLogoutClicked() { + window.location = "/logout/?next=/pandalhop" +} + +function initLogin() { + var deferred = $.Deferred(); + + // enable the menu items that require login + updateMenuEnabledState(); + + api_getData(null).done(function() { + deferred.resolve(); + }).fail(function() { + deferred.reject(); + }); + + return deferred.promise(); +} + +function useAccessToken(callback) { + // This is leftover from when we were using access tokens. Now the session knows whether you are logged in or not. + callback(null); +} + diff --git a/functions/src/index.ts b/functions/src/index.ts index cb0e7bc..c0cc32a 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -1,6 +1,7 @@ import * as functions from 'firebase-functions'; import * as v1 from 'firebase-functions/v1'; // Explicitly import v1 namespace import * as admin from 'firebase-admin'; +import { onNewMessage } from './messagingFunctions'; admin.initializeApp(); @@ -194,3 +195,101 @@ export const onNewChatMessage = v1.firestore console.error('Error sending chat notification:', error); } }); + +// Simple message notification handler +export const onNewSimpleMessage = functions.firestore + .document('simple_messages/{messageId}') + .onCreate(async (snapshot, context) => { + const messageData = snapshot.data(); + const messageId = context.params.messageId; + + if (!messageData) return; + + try { + // Get conversation to find participants + const conversationRef = admin.firestore().collection('simple_conversations').doc(messageData.conversationId); + const conversationSnapshot = await conversationRef.get(); + + if (!conversationSnapshot.exists) { + console.log(`Conversation ${messageData.conversationId} does not exist`); + return; + } + + const conversationData = conversationSnapshot.data(); + if (!conversationData) return; + + // Find recipient (everyone except sender) + const recipientIds = conversationData.participants.filter( + (participantId: string) => participantId !== messageData.senderId + ); + + if (recipientIds.length === 0) { + console.log('No recipients found'); + return; + } + + // Get sender information + const senderRef = admin.firestore().collection('Users').doc(messageData.senderId); + const senderSnapshot = await senderRef.get(); + const senderData = senderSnapshot.exists ? senderSnapshot.data() : null; + + const senderName = senderData?.displayName || + `${senderData?.firstName || ''} ${senderData?.lastName || ''}`.trim() || + 'User'; + + // Create message preview + let messagePreview = ''; + if (messageData.text) { + messagePreview = messageData.text.length > 50 ? + messageData.text.substring(0, 47) + '...' : + messageData.text; + } else if (messageData.mediaUrls && messageData.mediaUrls.length > 0) { + if (messageData.mediaTypes && messageData.mediaTypes.length > 0) { + const mediaType = messageData.mediaTypes[0]; + messagePreview = `Sent a ${mediaType}`; + } else { + messagePreview = 'Sent an attachment'; + } + } + + // Send notification to each recipient + for (const recipientId of recipientIds) { + // Get recipient's FCM token + const recipientRef = admin.firestore().collection('Users').doc(recipientId); + const recipientSnapshot = await recipientRef.get(); + + if (!recipientSnapshot.exists) { + console.log(`Recipient ${recipientId} not found`); + continue; + } + + const recipientData = recipientSnapshot.data(); + if (!recipientData || !recipientData.fcmToken) { + console.log(`No FCM token for recipient ${recipientId}`); + continue; + } + + // Send the notification + await admin.messaging().send({ + token: recipientData.fcmToken, + notification: { + title: `Message from ${senderName}`, + body: messagePreview || 'New message', + }, + data: { + type: 'simple_message', + conversationId: messageData.conversationId, + senderId: messageData.senderId, + messageId: messageId + } + }); + + console.log(`Notification sent to recipient ${recipientId}`); + } + } catch (error) { + console.error('Error sending message notification:', error); + } + }); + +// Export messaging functions +export { onNewMessage }; diff --git a/package-lock.json b/package-lock.json index 839e6c4..dce8cda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,16 +12,28 @@ "@aws-sdk/lib-storage": "^3.758.0", "@aws-sdk/s3-request-presigner": "^3.758.0", "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@google/genai": "^0.9.0", + "@headlessui/react": "^2.2.2", + "@heroicons/react": "^2.2.0", + "@hookform/resolvers": "^5.0.1", "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-dialog": "^1.1.10", + "@radix-ui/react-label": "^2.1.4", + "@radix-ui/react-progress": "^1.1.4", + "@radix-ui/react-radio-group": "^1.3.0", + "@radix-ui/react-select": "^2.2.0", + "@radix-ui/react-separator": "^1.1.4", "@radix-ui/react-slider": "^1.2.3", - "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-switch": "^1.1.3", "@tailwindcss/vite": "^4.0.14", "@types/dotenv": "^8.2.3", + "@types/react-datepicker": "^6.2.0", + "@types/tesseract.js": "^0.0.2", "@types/uuid": "^10.0.0", "@vercel/analytics": "^1.5.0", "aws-sdk": "^2.1692.0", - "axios": "^1.8.3", + "axios": "^1.8.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", @@ -29,27 +41,35 @@ "firebase": "^11.4.0", "firebase-functions": "^6.3.2", "framer-motion": "^12.5.0", + "gsap": "^3.13.0", "lucide-react": "^0.482.0", "motion": "^12.5.0", "neighbourlink": "file:", - "olamaps-web-sdk": "^1.1.2", + "next-themes": "^0.4.6", "react": "^19.0.0", + "react-datepicker": "^8.3.0", "react-dom": "^19.0.0", + "react-dropzone": "^14.3.8", + "react-hook-form": "^7.55.0", "react-icons": "^5.5.0", "react-router-dom": "^7.3.0", "react-toastify": "^11.0.5", + "sonner": "^2.0.3", "tailwind-merge": "^3.0.2", "tailwindcss": "^4.0.14", "tailwindcss-animate": "^1.0.7", "tailwindcss-motion": "^1.1.0", + "tesseract.js": "^6.0.1", "uuid": "^11.1.0", - "vite-plugin-pwa": "^0.21.1" + "vite-plugin-pwa": "^0.21.1", + "zod": "^3.24.3" }, "devDependencies": { "@eslint/js": "^9.21.0", + "@types/googlemaps": "^3.43.3", "@types/node": "^22.13.10", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", "@vitejs/plugin-react": "^4.3.4", "eslint": "^9.21.0", "eslint-plugin-react-hooks": "^5.1.0", @@ -276,66 +296,66 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.758.0.tgz", - "integrity": "sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.787.0.tgz", + "integrity": "sha512-eGLCWkN0NlntJ9yPU6OKUggVS4cFvuZJog+cFg1KD5hniLqz7Y0YRtB4uBxW212fK3XCfddgyscEOEeHaTQQTw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/credential-provider-node": "3.758.0", - "@aws-sdk/middleware-bucket-endpoint": "3.734.0", - "@aws-sdk/middleware-expect-continue": "3.734.0", - "@aws-sdk/middleware-flexible-checksums": "3.758.0", - "@aws-sdk/middleware-host-header": "3.734.0", - "@aws-sdk/middleware-location-constraint": "3.734.0", - "@aws-sdk/middleware-logger": "3.734.0", - "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-sdk-s3": "3.758.0", - "@aws-sdk/middleware-ssec": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/region-config-resolver": "3.734.0", - "@aws-sdk/signature-v4-multi-region": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.758.0", - "@aws-sdk/xml-builder": "3.734.0", - "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.5", - "@smithy/eventstream-serde-browser": "^4.0.1", - "@smithy/eventstream-serde-config-resolver": "^4.0.1", - "@smithy/eventstream-serde-node": "^4.0.1", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/hash-blob-browser": "^4.0.1", - "@smithy/hash-node": "^4.0.1", - "@smithy/hash-stream-node": "^4.0.1", - "@smithy/invalid-dependency": "^4.0.1", - "@smithy/md5-js": "^4.0.1", - "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-retry": "^4.0.7", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/credential-provider-node": "3.787.0", + "@aws-sdk/middleware-bucket-endpoint": "3.775.0", + "@aws-sdk/middleware-expect-continue": "3.775.0", + "@aws-sdk/middleware-flexible-checksums": "3.787.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-location-constraint": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-sdk-s3": "3.775.0", + "@aws-sdk/middleware-ssec": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.787.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/signature-v4-multi-region": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.787.0", + "@aws-sdk/xml-builder": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/eventstream-serde-browser": "^4.0.2", + "@smithy/eventstream-serde-config-resolver": "^4.1.0", + "@smithy/eventstream-serde-node": "^4.0.2", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-blob-browser": "^4.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/hash-stream-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/md5-js": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.7", - "@smithy/util-defaults-mode-node": "^4.0.7", - "@smithy/util-endpoints": "^3.0.1", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", - "@smithy/util-stream": "^4.1.2", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", - "@smithy/util-waiter": "^4.0.2", + "@smithy/util-waiter": "^4.0.3", "tslib": "^2.6.2" }, "engines": { @@ -343,47 +363,47 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz", - "integrity": "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.787.0.tgz", + "integrity": "sha512-L8R+Mh258G0DC73ktpSVrG4TT9i2vmDLecARTDR/4q5sRivdDQSL5bUp3LKcK80Bx+FRw3UETIlX6mYMLL9PJQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/middleware-host-header": "3.734.0", - "@aws-sdk/middleware-logger": "3.734.0", - "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/region-config-resolver": "3.734.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.758.0", - "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.5", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/hash-node": "^4.0.1", - "@smithy/invalid-dependency": "^4.0.1", - "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-retry": "^4.0.7", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.787.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.787.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.7", - "@smithy/util-defaults-mode-node": "^4.0.7", - "@smithy/util-endpoints": "^3.0.1", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -392,20 +412,20 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.758.0.tgz", - "integrity": "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/core": "^3.1.5", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/signature-v4": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.775.0.tgz", + "integrity": "sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -414,15 +434,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz", - "integrity": "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.775.0.tgz", + "integrity": "sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -430,20 +450,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz", - "integrity": "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/property-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.2", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.775.0.tgz", + "integrity": "sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -451,23 +471,23 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.758.0.tgz", - "integrity": "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/credential-provider-env": "3.758.0", - "@aws-sdk/credential-provider-http": "3.758.0", - "@aws-sdk/credential-provider-process": "3.758.0", - "@aws-sdk/credential-provider-sso": "3.758.0", - "@aws-sdk/credential-provider-web-identity": "3.758.0", - "@aws-sdk/nested-clients": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/credential-provider-imds": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.787.0.tgz", + "integrity": "sha512-hc2taRoDlXn2uuNuHWDJljVWYrp3r9JF1a/8XmOAZhVUNY+ImeeStylHXhXXKEA4JOjW+5PdJj0f1UDkVCHJiQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/credential-provider-env": "3.775.0", + "@aws-sdk/credential-provider-http": "3.775.0", + "@aws-sdk/credential-provider-process": "3.775.0", + "@aws-sdk/credential-provider-sso": "3.787.0", + "@aws-sdk/credential-provider-web-identity": "3.787.0", + "@aws-sdk/nested-clients": "3.787.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -475,22 +495,22 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz", - "integrity": "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.758.0", - "@aws-sdk/credential-provider-http": "3.758.0", - "@aws-sdk/credential-provider-ini": "3.758.0", - "@aws-sdk/credential-provider-process": "3.758.0", - "@aws-sdk/credential-provider-sso": "3.758.0", - "@aws-sdk/credential-provider-web-identity": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/credential-provider-imds": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.787.0.tgz", + "integrity": "sha512-JioVi44B1vDMaK2CdzqimwvJD3uzvzbQhaEWXsGMBcMcNHajXAXf08EF50JG3ZhLrhhUsT1ObXpbTaPINOhh+g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.775.0", + "@aws-sdk/credential-provider-http": "3.775.0", + "@aws-sdk/credential-provider-ini": "3.787.0", + "@aws-sdk/credential-provider-process": "3.775.0", + "@aws-sdk/credential-provider-sso": "3.787.0", + "@aws-sdk/credential-provider-web-identity": "3.787.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -498,16 +518,16 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz", - "integrity": "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.775.0.tgz", + "integrity": "sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -515,18 +535,18 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz", - "integrity": "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.758.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/token-providers": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.787.0.tgz", + "integrity": "sha512-fHc08bsvwm4+dEMEQKnQ7c1irEQmmxbgS+Fq41y09pPvPh31nAhoMcjBSTWAaPHvvsRbTYvmP4Mf12ZGr8/nfg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.787.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/token-providers": "3.787.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -534,16 +554,16 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.758.0.tgz", - "integrity": "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.787.0.tgz", + "integrity": "sha512-SobmCwNbk6TfEsF283mZPQEI5vV2j6eY5tOCj8Er4Lzraxu9fBPADV+Bib2A8F6jlB1lMPJzOuDCbEasSt/RIw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/nested-clients": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/nested-clients": "3.787.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -551,14 +571,14 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.758.0.tgz", - "integrity": "sha512-g07y7rA505zaTJNPTmvW4zYJA3gThFDE1be7kBUKhTKAdwv8jVSbOiAy2AhClXs2evSUoQiFFtD1xWxLRXPPRQ==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.787.0.tgz", + "integrity": "sha512-iIMbmd9uASD3KFfGeH/OeVo4oxAeqbuXDmhoVEJb4M0hZ4yJ2o9v1V0TEaHwIXcrdlc0H8rCpd9opmV74MBxrA==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/smithy-client": "^4.1.6", + "@smithy/abort-controller": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/smithy-client": "^4.2.0", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", @@ -568,39 +588,20 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.758.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" + "@aws-sdk/client-s3": "^3.787.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz", - "integrity": "sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.775.0.tgz", + "integrity": "sha512-qogMIpVChDYr4xiUNC19/RDSw/sKoHkAhouS6Skxiy6s27HBhow1L3Z1qVYXuBmOZGSWPU0xiyZCvOyWrv9s+Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", + "@aws-sdk/types": "3.775.0", "@aws-sdk/util-arn-parser": "3.723.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" }, @@ -609,14 +610,14 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.734.0.tgz", - "integrity": "sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.775.0.tgz", + "integrity": "sha512-Apd3owkIeUW5dnk3au9np2IdW2N0zc9NjTjHiH+Mx3zqwSrc+m+ANgJVgk9mnQjMzU/vb7VuxJ0eqdEbp5gYsg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -624,22 +625,22 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.758.0.tgz", - "integrity": "sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.787.0.tgz", + "integrity": "sha512-X71qEwWoixFmwowWzlPoZUR3u1CWJ7iAzU0EzIxqmPhQpQJLFmdL1+SRjqATynDPZQzLs1a5HBtPT++EnZ+Quw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", "@smithy/is-array-buffer": "^4.0.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.1.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -648,14 +649,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz", - "integrity": "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz", + "integrity": "sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -663,13 +664,13 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.734.0.tgz", - "integrity": "sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.775.0.tgz", + "integrity": "sha512-8TMXEHZXZTFTckQLyBT5aEI8fX11HZcwZseRifvBKKpj0RZDk4F0EEYGxeNSPpUQ7n+PRWyfAEnnZNRdAj/1NQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -677,13 +678,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz", - "integrity": "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz", + "integrity": "sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -691,14 +692,14 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz", - "integrity": "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz", + "integrity": "sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -706,23 +707,23 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.758.0.tgz", - "integrity": "sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.775.0.tgz", + "integrity": "sha512-zsvcu7cWB28JJ60gVvjxPCI7ZU7jWGcpNACPiZGyVtjYXwcxyhXbYEVDSWKsSA6ERpz9XrpLYod8INQWfW3ECg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", "@aws-sdk/util-arn-parser": "3.723.0", - "@smithy/core": "^3.1.5", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/signature-v4": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.1.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -731,13 +732,13 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.734.0.tgz", - "integrity": "sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.775.0.tgz", + "integrity": "sha512-Iw1RHD8vfAWWPzBBIKaojO4GAvQkHOYIpKdAfis/EUSUmSa79QsnXnRqsdcE0mCB0Ylj23yi+ah4/0wh9FsekA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -745,17 +746,17 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz", - "integrity": "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.787.0.tgz", + "integrity": "sha512-Lnfj8SmPLYtrDFthNIaNj66zZsBCam+E4XiUDr55DIHTGstH6qZ/q6vg0GfbukxwSmUcGMwSR4Qbn8rb8yd77g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@smithy/core": "^3.1.5", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@smithy/core": "^3.2.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -763,47 +764,47 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.758.0.tgz", - "integrity": "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.787.0.tgz", + "integrity": "sha512-xk03q1xpKNHgbuo+trEf1dFrI239kuMmjKKsqLEsHlAZbuFq4yRGMlHBrVMnKYOPBhVFDS/VineM991XI52fKg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/middleware-host-header": "3.734.0", - "@aws-sdk/middleware-logger": "3.734.0", - "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/region-config-resolver": "3.734.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.758.0", - "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.5", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/hash-node": "^4.0.1", - "@smithy/invalid-dependency": "^4.0.1", - "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-retry": "^4.0.7", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.787.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.787.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.7", - "@smithy/util-defaults-mode-node": "^4.0.7", - "@smithy/util-endpoints": "^3.0.1", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -812,16 +813,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz", - "integrity": "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz", + "integrity": "sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", + "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" }, "engines": { @@ -829,18 +830,18 @@ } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.758.0.tgz", - "integrity": "sha512-dVyItwu/J1InfJBbCPpHRV9jrsBfI7L0RlDGyS3x/xqBwnm5qpvgNZQasQiyqIl+WJB4f5rZRZHgHuwftqINbA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/signature-v4-multi-region": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-format-url": "3.734.0", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.787.0.tgz", + "integrity": "sha512-WBm0AS3RRURNN0yjYXHaiI692boVwWXGt3RLdI7tYBX58E1Zb5nzC8rlk81O9Xe7ZTgTC1KCr8y4+jcBD+zwJg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-format-url": "3.775.0", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -848,16 +849,16 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.758.0.tgz", - "integrity": "sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.775.0.tgz", + "integrity": "sha512-cnGk8GDfTMJ8p7+qSk92QlIk2bmTmFJqhYxcXZ9PysjZtx0xmfCMxnG3Hjy1oU2mt5boPCVSOptqtWixayM17g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/signature-v4": "^5.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/middleware-sdk-s3": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -865,16 +866,16 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz", - "integrity": "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.787.0.tgz", + "integrity": "sha512-d7/NIqxq308Zg0RPMNrmn0QvzniL4Hx8Qdwzr6YZWLYAbUSvZYS2ppLR3BFWSkV6SsTJUx8BuDaj3P8vttkrog==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/nested-clients": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/nested-clients": "3.787.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -882,12 +883,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz", - "integrity": "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.775.0.tgz", + "integrity": "sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -907,14 +908,14 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.743.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz", - "integrity": "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.787.0.tgz", + "integrity": "sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", - "@smithy/util-endpoints": "^3.0.1", + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.2", "tslib": "^2.6.2" }, "engines": { @@ -922,14 +923,14 @@ } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.734.0.tgz", - "integrity": "sha512-TxZMVm8V4aR/QkW9/NhujvYpPZjUYqzLwSge5imKZbWFR806NP7RMwc5ilVuHF/bMOln/cVHkl42kATElWBvNw==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.775.0.tgz", + "integrity": "sha512-Nw4nBeyCbWixoGh8NcVpa/i8McMA6RXJIjQFyloJLaPr7CPquz7ZbSl0MUWMFVwP/VHaJ7B+lNN3Qz1iFCEP/Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -949,27 +950,27 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz", - "integrity": "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz", + "integrity": "sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz", - "integrity": "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==", + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.787.0.tgz", + "integrity": "sha512-mG7Lz8ydfG4SF9e8WSXiPQ/Lsn3n8A5B5jtPROidafi06I3ckV2WxyMLdwG14m919NoS6IOfWHyRGSqWIwbVKA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/middleware-user-agent": "3.787.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -985,12 +986,12 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.734.0.tgz", - "integrity": "sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==", + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.775.0.tgz", + "integrity": "sha512-b9NGO6FKJeLGYnV7Z1yvcP1TNU4dkD5jNsLWOF1/sygZoASaQhNOlaiJ/1OH331YQ1R1oWk38nBb0frsYkDsOQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -1051,13 +1052,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", - "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -1079,12 +1080,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", + "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -1095,9 +1096,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -1105,7 +1106,7 @@ "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/helper-replace-supers": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", + "@babel/traverse": "^7.27.0", "semver": "^6.3.1" }, "engines": { @@ -1116,9 +1117,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -1133,9 +1134,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -1301,25 +1302,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.10" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1530,12 +1531,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -2108,12 +2109,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "regenerator-transform": "^0.15.2" }, "engines": { @@ -2216,9 +2217,9 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.26.5" @@ -2391,9 +2392,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2402,31 +2403,37 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", - "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2444,9 +2451,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2457,9 +2464,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", "cpu": [ "ppc64" ], @@ -2473,9 +2480,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", "cpu": [ "arm" ], @@ -2489,9 +2496,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", "cpu": [ "arm64" ], @@ -2505,9 +2512,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", "cpu": [ "x64" ], @@ -2521,9 +2528,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", "cpu": [ "arm64" ], @@ -2537,9 +2544,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", "cpu": [ "x64" ], @@ -2553,9 +2560,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", "cpu": [ "arm64" ], @@ -2569,9 +2576,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", "cpu": [ "x64" ], @@ -2585,9 +2592,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", "cpu": [ "arm" ], @@ -2601,9 +2608,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", "cpu": [ "arm64" ], @@ -2617,9 +2624,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", "cpu": [ "ia32" ], @@ -2633,9 +2640,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", "cpu": [ "loong64" ], @@ -2649,9 +2656,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", "cpu": [ "mips64el" ], @@ -2665,9 +2672,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", "cpu": [ "ppc64" ], @@ -2681,9 +2688,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", "cpu": [ "riscv64" ], @@ -2697,9 +2704,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", "cpu": [ "s390x" ], @@ -2713,9 +2720,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", "cpu": [ "x64" ], @@ -2729,9 +2736,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", "cpu": [ "arm64" ], @@ -2745,9 +2752,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", "cpu": [ "x64" ], @@ -2761,9 +2768,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", "cpu": [ "arm64" ], @@ -2777,9 +2784,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", "cpu": [ "x64" ], @@ -2793,9 +2800,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ "x64" ], @@ -2809,9 +2816,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ "arm64" ], @@ -2825,9 +2832,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ "ia32" ], @@ -2841,9 +2848,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", "cpu": [ "x64" ], @@ -2857,9 +2864,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", "dev": true, "license": "MIT", "dependencies": { @@ -2899,9 +2906,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2914,9 +2921,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", - "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2924,9 +2931,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2937,9 +2944,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2974,9 +2981,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", - "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", + "version": "9.25.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.0.tgz", + "integrity": "sha512-iWhsUS8Wgxz9AXNfvfOPFSW4VfMXdVhp1hjkZVhXCrpgh/aLcc45rX6MPu+tIVUWDw0HfNwth7O28M1xDxNf9w==", "dev": true, "license": "MIT", "engines": { @@ -2994,13 +3001,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", + "@eslint/core": "^0.13.0", "levn": "^0.4.1" }, "engines": { @@ -3053,9 +3060,9 @@ "license": "Apache-2.0" }, "node_modules/@firebase/app": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.11.2.tgz", - "integrity": "sha512-bFee0hPJZBzNtiizRxdgsu8C9DW3mn1y0OJJ4zHQsccjDYzGOfvN0G3CMGyBIiwNctsFpQa8orbp2IKywoUeqA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.11.4.tgz", + "integrity": "sha512-GPREsZjfSaHzwyC6cI/Cqvzf6zxqMzya+25tSpUstdqC2w0IdfxEfOMjfdW7bDfVEf4Rb4Nb6gfoOAgVSp4c4g==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", @@ -3069,9 +3076,9 @@ } }, "node_modules/@firebase/app-check": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.12.tgz", - "integrity": "sha512-LxjcoIFOU4sgK07ZWb8XDHxuVB+UKs41vPK+Sg9PeZMvEoz84fndFAx8Nz2nipiya2EmyxBgVhff8Hi6GBt+XA==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.13.tgz", + "integrity": "sha512-ONsgml8/dplUOAP42JQO6hhiWDEwR9+RUTLenxAN9S8N6gel/sDQ9Ci721Py1oASMGdDU8v9R7xAZxzvOX5lPg==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", @@ -3087,12 +3094,12 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.19.tgz", - "integrity": "sha512-G8FMiqhrKc4gEEujrBDBBrbRav8MGqoLObWj1hy/riCSg4XlRYhpnq3ev8E9HTirqU1tAGH6oJl7vr+jfM7YNA==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.20.tgz", + "integrity": "sha512-/twgmlnNAaZ/wbz3kcQrL/26b+X+zUX+lBmu5LwwEcWcpnb+mrVEAKhD7/ttm52dxYiSWtLDeuXy3FXBhqBC5A==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-check": "0.8.12", + "@firebase/app-check": "0.8.13", "@firebase/app-check-types": "0.5.3", "@firebase/component": "0.6.13", "@firebase/logger": "0.4.4", @@ -3119,12 +3126,12 @@ "license": "Apache-2.0" }, "node_modules/@firebase/app-compat": { - "version": "0.2.51", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.51.tgz", - "integrity": "sha512-pxF1+coABt+ugqNI0YXDlmkKv4kh3pjI5BqIJJ1VXBo42OZbKMsQbFeos14YBrWwiqqSjUvQ70FBNsv5E2wuxg==", + "version": "0.2.53", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.53.tgz", + "integrity": "sha512-vDeZSit0q4NyaDIVcaiJF3zhLgguP6yc0JwQAfpTyllgt8XMtkMFyY/MxJtFrK2ocpQX/yCbV2DXwvpY2NVuJw==", "license": "Apache-2.0", "dependencies": { - "@firebase/app": "0.11.2", + "@firebase/app": "0.11.4", "@firebase/component": "0.6.13", "@firebase/logger": "0.4.4", "@firebase/util": "1.11.0", @@ -3141,9 +3148,9 @@ "license": "Apache-2.0" }, "node_modules/@firebase/auth": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.9.1.tgz", - "integrity": "sha512-9KKo5SNVkyJzftsW+daS+PGDbeJ+MFJWXQFHDqqPPH3acWHtiNnGHH5HGpIJErEELrsm9xMPie5zfZ0XpGU8+w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.10.0.tgz", + "integrity": "sha512-S7SqBsN7sIQsftNE3bitLlK+4bWrTHY+Rx2JFlNitgVYu2nK8W8ZQrkG8GCEwiFPq0B2vZ9pO5kVTFfq2sP96A==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", @@ -3165,12 +3172,12 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.19.tgz", - "integrity": "sha512-v898POphOIBJliKF76SiGOXh4EdhO5fM6S9a2ZKf/8wHdBea/qwxwZoVVya4DW6Mi7vWyp1lIzHbFgwRz8G9TA==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.20.tgz", + "integrity": "sha512-8FwODTSBnaqGQbKfML7LcpzGGPyouB7YHg3dZq+CZMziVc7oBY1jJeNvpnM1hAQoVuTjWPXoRrCltdGeOlkKfQ==", "license": "Apache-2.0", "dependencies": { - "@firebase/auth": "1.9.1", + "@firebase/auth": "1.10.0", "@firebase/auth-types": "0.13.0", "@firebase/component": "0.6.13", "@firebase/util": "1.11.0", @@ -3213,9 +3220,9 @@ } }, "node_modules/@firebase/data-connect": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.1.tgz", - "integrity": "sha512-PNlfAJ2mcbyRlWfm41nfk8EksTuvMFTFIX+puNzeUa6OTIDtyp1IX1NJVc7n6WpfbErN7tNqcOEMe6BMtpcjVA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.3.tgz", + "integrity": "sha512-JsgppNX1wcQYP5bg4Sg6WTS7S0XazklSjr1fG3ox9DHtt4LOQwJ3X1/c81mKMIZxocV22ujiwLYQWG6Y9D1FiQ==", "license": "Apache-2.0", "dependencies": { "@firebase/auth-interop-types": "0.2.4", @@ -3229,9 +3236,9 @@ } }, "node_modules/@firebase/database": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.13.tgz", - "integrity": "sha512-cdc+LuseKdJXzlrCx8ePMXyctSWtYS9SsP3y7EeA85GzNh/IL0b7HOq0eShridL935iQ0KScZCj5qJtKkGE53g==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.14.tgz", + "integrity": "sha512-9nxYtkHAG02/Nh2Ssms1T4BbWPPjiwohCvkHDUl4hNxnki1kPgsLo5xe9kXNzbacOStmVys+RUXvwzynQSKmUQ==", "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.3", @@ -3247,14 +3254,14 @@ } }, "node_modules/@firebase/database-compat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.4.tgz", - "integrity": "sha512-4qsptwZ3DTGNBje56ETItZQyA/HMalOelnLmkC3eR0M6+zkzOHjNHyWUWodW2mqxRKAM0sGkn+aIwYHKZFJXug==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.5.tgz", + "integrity": "sha512-CNf1UbvWh6qIaSf4sn6sx2DTDz/em/D7QxULH1LTxxDQHr9+CeYGvlAqrKnk4ZH0P0eIHyQFQU7RwkUJI0B9gQ==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", - "@firebase/database": "1.0.13", - "@firebase/database-types": "1.0.9", + "@firebase/database": "1.0.14", + "@firebase/database-types": "1.0.10", "@firebase/logger": "0.4.4", "@firebase/util": "1.11.0", "tslib": "^2.1.0" @@ -3264,9 +3271,9 @@ } }, "node_modules/@firebase/database-types": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.9.tgz", - "integrity": "sha512-uCntrxPbJHhZsNRpMhxNCm7GzhYWX+7J2e57wq1ZZ4NJrQw5DORgkAzJMByYZcVAjgADnCxxhK/GkoypH+XpvQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.10.tgz", + "integrity": "sha512-mH6RC1E9/Pv8jf1/p+M8YFTX+iu+iHDN89hecvyO7wHrI4R1V0TXjxOHvX3nLJN1sfh0CWG6CHZ0VlrSmK/cwg==", "license": "Apache-2.0", "dependencies": { "@firebase/app-types": "0.9.3", @@ -3274,9 +3281,9 @@ } }, "node_modules/@firebase/firestore": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.9.tgz", - "integrity": "sha512-uq/bUtHDqJ5ZqPHAJIlNzHpXUtcVYcASz2V6y7UmP1WLlRKEt1yf1OcQW5u8pY2yq7162OnCl5J5mkOdMTMLZw==", + "version": "4.7.10", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.10.tgz", + "integrity": "sha512-6nKsyo2U+jYSCcSE5sjMdDNA23DMUvYPUvsYGg09CNvcTO8GGKsPs7SpOhspsB91mbacq+u627CDAx3FUhPSSQ==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", @@ -3295,13 +3302,13 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.44", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.44.tgz", - "integrity": "sha512-4Lv2TyHEW+FugXPgmQ0ZylSbh9uFuKDP0lCL1hX9cbxXaafhC/Nww+DWokUQ2zZcynjc8fxFunw6Xbd3QHAlgA==", + "version": "0.3.45", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.45.tgz", + "integrity": "sha512-uRvi7AYPmsDl7UZwPyV7jgDGYusEZ2+U2g7MndbQHKIA8fNHpYC6QrzMs58+/IjX+kF/lkUn67Vrr0AkVjlY+Q==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", - "@firebase/firestore": "4.7.9", + "@firebase/firestore": "4.7.10", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.11.0", "tslib": "^2.1.0" @@ -3459,9 +3466,9 @@ "license": "Apache-2.0" }, "node_modules/@firebase/performance": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.1.tgz", - "integrity": "sha512-SkEUurawojCjav2V2AXo6BQLDtv02NxgXPLCiAvrkn95IAKI4W/UbLKYQvMbEez/nqvmnucLyklcMlB0Q5a1iw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.2.tgz", + "integrity": "sha512-DXLLp0R0jdxH/yTmv+WTkOzsLl8YYecXh4lGZE0dzqC0IV8k+AxpLSSWvOTCkAETze8yEU/iF+PtgYVlGjfMMQ==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", @@ -3476,14 +3483,14 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.14.tgz", - "integrity": "sha512-/crPg0fDqHIx+FjFoEqWxNp+lJSF40ZG7x43AAJGRaUaWLJDncQm3UJB5/mABaRZb7obs1CQAcRtd4phZFkmZg==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.15.tgz", + "integrity": "sha512-wUxsw7hGBEMN6XfvYQqwPIQp5LcJXawWM5tmYp6L7ClCoTQuEiCKHWWVurJgN8Q1YHzoHVgjNfPQAOVu29iMVg==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.6.13", "@firebase/logger": "0.4.4", - "@firebase/performance": "0.7.1", + "@firebase/performance": "0.7.2", "@firebase/performance-types": "0.2.3", "@firebase/util": "1.11.0", "tslib": "^2.1.0" @@ -3597,9 +3604,9 @@ } }, "node_modules/@firebase/vertexai": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.1.0.tgz", - "integrity": "sha512-K8CgIFKJrfrf5lYhKnDXOu08FEmIzVExK+ApUZx4Bw2GAmLEA3wDVrsjuupuvpXZSp8QlzvEiXwqshqqc4v0pA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.2.1.tgz", + "integrity": "sha512-cukZ5ne2RsOWB4PB1EO6nTXgOLxPMKDJfEn+XnSV5ZKWM0ID5o0DvbyS59XihFaBzmy2SwJldP5ap7/xUnW4jA==", "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.3", @@ -3622,119 +3629,93 @@ "integrity": "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==", "license": "Apache-2.0" }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", - "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@floating-ui/utils": "^0.2.9" } }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", - "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.7.2" - }, - "engines": { - "node": ">=6" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" } }, - "node_modules/@google-cloud/firestore": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.0.tgz", - "integrity": "sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "license": "MIT", "dependencies": { - "@opentelemetry/api": "^1.3.0", - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^4.3.3", - "protobufjs": "^7.2.6" + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@google-cloud/paginator": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", - "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" + "@floating-ui/dom": "^1.0.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@google-cloud/projectify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", - "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", + "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=6" } }, - "node_modules/@google-cloud/promisify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.1.0.tgz", - "integrity": "sha512-G/FQx5cE/+DqBbOpA5jKsegGwdPniU6PuIEMt+qxWgFxvxuFOzVmp6zYchtYuwAWV5/8Dgs0yAmjvNZv3uXLQg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", + "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/@google-cloud/storage": { - "version": "7.15.2", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.15.2.tgz", - "integrity": "sha512-+2k+mcQBb9zkaXMllf2wwR/rI07guAx+eZLWsGTDihW2lJRGfiqB7xu1r7/s4uvSP/T+nAumvzT5TTscwHKJ9A==", + "node_modules/@google/genai": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-0.9.0.tgz", + "integrity": "sha512-FD2RizYGInsvfjeaN6O+wQGpRnGVglS1XWrGQr8K7D04AfMmvPodDSw94U9KyFtsVLzWH9kmlPyFM+G4jbmkqg==", "license": "Apache-2.0", - "optional": true, - "peer": true, "dependencies": { - "@google-cloud/paginator": "^5.0.0", - "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "^4.0.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "duplexify": "^4.1.3", - "fast-xml-parser": "^4.4.1", - "gaxios": "^6.0.2", - "google-auth-library": "^9.6.3", - "html-entities": "^2.5.2", - "mime": "^3.0.0", - "p-limit": "^3.0.1", - "retry-request": "^7.0.0", - "teeny-request": "^9.0.0", - "uuid": "^8.0.0" + "google-auth-library": "^9.14.2", + "ws": "^8.18.0", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.4" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@google-cloud/storage/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=18.0.0" } }, "node_modules/@grpc/grpc-js": { @@ -3751,9 +3732,9 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", @@ -3768,6 +3749,47 @@ "node": ">=6" } }, + "node_modules/@headlessui/react": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.2.tgz", + "integrity": "sha512-zbniWOYBQ8GHSUIOPY7BbdIn6PzUOq0z41RFrF30HbjsxG6Rrfk+6QulR8Kgf2Vwj2a/rE6i62q5vo+2gI5dJA==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.17.1", + "@react-aria/interactions": "^3.21.3", + "@tanstack/react-virtual": "^3.13.6", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@heroicons/react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz", + "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==", + "license": "MIT", + "peerDependencies": { + "react": ">= 16 || ^19.0.0-rc" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.0.1.tgz", + "integrity": "sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -3892,18 +3914,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3942,17 +3952,6 @@ "node": ">= 8" } }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -4018,31 +4017,24 @@ "license": "BSD-3-Clause" }, "node_modules/@radix-ui/number": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", - "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", - "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", "license": "MIT" }, - "node_modules/@radix-ui/react-checkbox": { + "node_modules/@radix-ui/react-arrow": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.4.tgz", - "integrity": "sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.4.tgz", + "integrity": "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", @@ -4059,16 +4051,20 @@ } } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", - "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", + "node_modules/@radix-ui/react-checkbox": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.2.2.tgz", + "integrity": "sha512-pMxzQLK+m/tkDRXJg7VUjRx6ozsBdzNLOV4vexfVBU57qT2Gvf4cw2gKKhOohJxjadQ+WcUXCKosTIxcZzi03A==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -4085,25 +4081,36 @@ } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", - "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "node_modules/@radix-ui/react-collection": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.4.tgz", + "integrity": "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==", "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4115,10 +4122,10 @@ } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4130,14 +4137,26 @@ } } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", - "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.10.tgz", + "integrity": "sha512-m6pZb0gEM5uHPSb+i2nKKGQi/HMSVjARMsLMWQfKDP+eJ6B+uqryHnXhpnohTWElw+vEcMk/o4wJODtdRKHwqg==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.7", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.4", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.6", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -4154,46 +4173,32 @@ } } }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", - "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.1.2" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-slider": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.3.tgz", - "integrity": "sha512-nNrLAWLjGESnhqBqcCNW4w2nn7LxudyMzeB6VgdyAnFLC6kfQgnAjSL2v6UkQTnDctJBlxrmxfplWS4iYjdUTw==", + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz", + "integrity": "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -4210,14 +4215,11 @@ } } }, - "node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-focus-guards": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", + "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4228,19 +4230,15 @@ } } }, - "node_modules/@radix-ui/react-switch": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.3.tgz", - "integrity": "sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==", + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.4.tgz", + "integrity": "sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -4257,11 +4255,14 @@ } } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4272,47 +4273,476 @@ } } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "node_modules/@radix-ui/react-label": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.4.tgz", + "integrity": "sha512-wy3dqizZnZVV4ja0FNnUhIWNwWdoldXrneEyUcVtLYDAt8ovGS4ridtMAOGgXBBIfggL4BOveVWsjXDORdGEQg==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "node_modules/@radix-ui/react-popper": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.4.tgz", + "integrity": "sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA==", "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", - "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "node_modules/@radix-ui/react-portal": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.6.tgz", + "integrity": "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==", "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.3.tgz", + "integrity": "sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz", + "integrity": "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.4.tgz", + "integrity": "sha512-8rl9w7lJdcVPor47Dhws9mUHRHLE+8JEgyJRdNWCpGPa6HIlr3eh+Yn9gyx1CnCLbw5naHsI2gaO9dBWO50vzw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.3.tgz", + "integrity": "sha512-647Bm/gC/XLM+B3MMkBlzjWRVkRoaB93QwOeD0iRfu029GtagWouaiql+oS1kw7//WuH9fjHUpIjOOnQFQplMw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.3", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-roving-focus": "1.1.7", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.7.tgz", + "integrity": "sha512-C6oAg451/fQT3EGbWHbCQjYTtbyjNO1uzQgMzwyivcHT3GKNEmu1q3UuREhN+HzHAVtv3ivMVK08QlC+PkYw9Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.2.tgz", + "integrity": "sha512-HjkVHtBkuq+r3zUAZ/CvNWUGKPfuicGDbgtZgiQuFmNcV5F+Tgy24ep2nsAW2nFgvhGPJVqeBZa6KyVN0EyrBA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.7", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.4", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.4", + "@radix-ui/react-portal": "1.1.6", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.0", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.4.tgz", + "integrity": "sha512-2fTm6PSiUm8YPq9W0E4reYuv01EE3aFSzt8edBiXqPHshF8N9+Kymt/k0/R+F3dkY5lQyB/zPtrP82phskLi7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.2.tgz", + "integrity": "sha512-oQnqfgSiYkxZ1MrF6672jw2/zZvpB+PJsrIc3Zm1zof1JHf/kj7WhmROw7JahLfOwYQ5/+Ip0rFORgF1tjSiaQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz", + "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.2.tgz", + "integrity": "sha512-7Z8n6L+ifMIIYZ83f28qWSceUpkXuslI2FJ34+kDMTiyj91ENdpdQ7VCidrzj5JfwfZTeano/BnGBbu/jqa5rQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -4321,12 +4751,12 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -4338,6 +4768,132 @@ } } }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz", + "integrity": "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@react-aria/focus": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.20.2.tgz", + "integrity": "sha512-Q3rouk/rzoF/3TuH6FzoAIKrl+kzZi9LHmr8S5EqLAOyP9TXIKG34x2j42dZsAhrw7TbF9gA8tBKwnCNH4ZV+Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.0", + "@react-aria/utils": "^3.28.2", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.0.tgz", + "integrity": "sha512-GgIsDLlO8rDU/nFn6DfsbP9rfnzhm8QFjZkB9K9+r+MTSCn7bMntiWQgMM+5O6BiA8d7C7x4zuN4bZtc0RBdXQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.8", + "@react-aria/utils": "^3.28.2", + "@react-stately/flags": "^3.1.1", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.8.tgz", + "integrity": "sha512-lQDE/c9uTfBSDOjaZUJS8xP2jCKVk4zjQeIlCH90xaLhHDgbpCdns3xvFpJJujfj3nI4Ll9K7A+ONUBDCASOuw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.28.2", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.28.2.tgz", + "integrity": "sha512-J8CcLbvnQgiBn54eeEvQQbIOfBF3A1QizxMw9P4cl9MkeR03ug7RnjTIdJY/n2p7t59kLeAB3tqiczhcj+Oi5w==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.8", + "@react-stately/flags": "^3.1.1", + "@react-stately/utils": "^3.10.6", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.1.tgz", + "integrity": "sha512-XPR5gi5LfrPdhxZzdIlJDz/B5cBf63l4q6/AzNqVWFKgd0QqY5LvWJftXkklaIUpKSJkIKQb8dphuZXDtkWNqg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.6.tgz", + "integrity": "sha512-O76ip4InfTTzAJrg8OaZxKU4vvjMDOpfA/PGNOytiXwBbkct2ZeZwaimJ8Bt9W1bj5VsZ81/o/tW4BacbdDOMA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.29.0.tgz", + "integrity": "sha512-IDQYu/AHgZimObzCFdNl1LpZvQW/xcfLt3v20sorl5qRucDVj4S9os98sVTZ4IRIBjmS+MkjqpR5E70xan7ooA==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", @@ -4419,9 +4975,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", - "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", "cpu": [ "arm" ], @@ -4432,9 +4988,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", - "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", "cpu": [ "arm64" ], @@ -4445,9 +5001,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", - "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", "cpu": [ "arm64" ], @@ -4458,9 +5014,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", - "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", "cpu": [ "x64" ], @@ -4471,9 +5027,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", - "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", "cpu": [ "arm64" ], @@ -4484,9 +5040,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", - "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", "cpu": [ "x64" ], @@ -4497,9 +5053,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", - "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", "cpu": [ "arm" ], @@ -4510,9 +5066,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", - "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", "cpu": [ "arm" ], @@ -4523,9 +5079,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", - "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", "cpu": [ "arm64" ], @@ -4536,9 +5092,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", - "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", "cpu": [ "arm64" ], @@ -4549,9 +5105,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", - "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", "cpu": [ "loong64" ], @@ -4562,9 +5118,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", - "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", "cpu": [ "ppc64" ], @@ -4575,9 +5131,22 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", - "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", "cpu": [ "riscv64" ], @@ -4588,9 +5157,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", - "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", "cpu": [ "s390x" ], @@ -4601,9 +5170,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", - "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", "cpu": [ "x64" ], @@ -4614,9 +5183,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", - "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", "cpu": [ "x64" ], @@ -4627,9 +5196,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", - "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", "cpu": [ "arm64" ], @@ -4640,9 +5209,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", - "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", "cpu": [ "ia32" ], @@ -4653,9 +5222,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", - "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", "cpu": [ "x64" ], @@ -4666,12 +5235,12 @@ ] }, "node_modules/@smithy/abort-controller": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz", - "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", + "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4704,15 +5273,15 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz", - "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz", + "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", + "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" }, "engines": { @@ -4720,17 +5289,17 @@ } }, "node_modules/@smithy/core": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.5.tgz", - "integrity": "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz", + "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.0.2", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.1.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -4739,15 +5308,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz", - "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz", + "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", "tslib": "^2.6.2" }, "engines": { @@ -4755,13 +5324,13 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz", - "integrity": "sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz", + "integrity": "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" }, @@ -4770,13 +5339,13 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz", - "integrity": "sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz", + "integrity": "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/eventstream-serde-universal": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4784,12 +5353,12 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz", - "integrity": "sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz", + "integrity": "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4797,13 +5366,13 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz", - "integrity": "sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz", + "integrity": "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/eventstream-serde-universal": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4811,13 +5380,13 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz", - "integrity": "sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz", + "integrity": "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/eventstream-codec": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4825,14 +5394,14 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz", - "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", + "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, @@ -4841,14 +5410,14 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.1.tgz", - "integrity": "sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.2.tgz", + "integrity": "sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==", "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^5.0.0", "@smithy/chunked-blob-reader-native": "^4.0.0", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4856,12 +5425,12 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz", - "integrity": "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", + "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -4871,12 +5440,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.1.tgz", - "integrity": "sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.2.tgz", + "integrity": "sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -4885,12 +5454,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz", - "integrity": "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", + "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4910,12 +5479,12 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.1.tgz", - "integrity": "sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.2.tgz", + "integrity": "sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -4924,13 +5493,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz", - "integrity": "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", + "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -4938,18 +5507,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz", - "integrity": "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz", + "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "@smithy/util-middleware": "^4.0.1", + "@smithy/core": "^3.2.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", "tslib": "^2.6.2" }, "engines": { @@ -4957,18 +5526,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz", - "integrity": "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/service-error-classification": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz", + "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -4990,12 +5559,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz", - "integrity": "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", + "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5003,12 +5572,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz", - "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", + "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5016,14 +5585,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz", - "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", + "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5031,15 +5600,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz", - "integrity": "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", + "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5047,12 +5616,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz", - "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", + "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5060,12 +5629,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz", - "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", + "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5073,12 +5642,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz", - "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", + "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, @@ -5087,12 +5656,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz", - "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", + "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5100,24 +5669,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", - "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz", + "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0" + "@smithy/types": "^4.2.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz", - "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", + "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5125,16 +5694,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz", - "integrity": "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.2.tgz", + "integrity": "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", + "@smithy/util-middleware": "^4.0.2", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -5144,17 +5713,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.6.tgz", - "integrity": "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz", + "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.2", + "@smithy/core": "^3.2.0", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5162,9 +5731,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", + "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -5174,13 +5743,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz", - "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", + "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5251,14 +5820,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz", - "integrity": "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz", + "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -5267,17 +5836,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz", - "integrity": "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz", + "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.0.1", - "@smithy/credential-provider-imds": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5285,13 +5854,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz", - "integrity": "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz", + "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5311,12 +5880,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz", - "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", + "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5324,13 +5893,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz", - "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz", + "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/service-error-classification": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5338,14 +5907,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.2.tgz", - "integrity": "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", + "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/types": "^4.1.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", @@ -5382,19 +5951,25 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.2.tgz", - "integrity": "sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.3.tgz", + "integrity": "sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/abort-controller": "^4.0.2", + "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, + "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/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", @@ -5407,43 +5982,54 @@ "string.prototype.matchall": "^4.0.6" } }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@tailwindcss/node": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.14.tgz", - "integrity": "sha512-Ux9NbFkKWYE4rfUFz6M5JFLs/GEYP6ysxT8uSyPn6aTbh2K3xDE1zz++eVK4Vwx799fzMF8CID9sdHn4j/Ab8w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz", + "integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==", "license": "MIT", "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", - "tailwindcss": "4.0.14" + "lightningcss": "1.29.2", + "tailwindcss": "4.1.4" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.14.tgz", - "integrity": "sha512-M8VCNyO/NBi5vJ2cRcI9u8w7Si+i76a7o1vveoGtbbjpEYJZYiyc7f2VGps/DqawO56l3tImIbq2OT/533jcrA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz", + "integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==", "license": "MIT", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.14", - "@tailwindcss/oxide-darwin-arm64": "4.0.14", - "@tailwindcss/oxide-darwin-x64": "4.0.14", - "@tailwindcss/oxide-freebsd-x64": "4.0.14", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.14", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.14", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.14", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.14", - "@tailwindcss/oxide-linux-x64-musl": "4.0.14", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.14", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.14" + "@tailwindcss/oxide-android-arm64": "4.1.4", + "@tailwindcss/oxide-darwin-arm64": "4.1.4", + "@tailwindcss/oxide-darwin-x64": "4.1.4", + "@tailwindcss/oxide-freebsd-x64": "4.1.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.4", + "@tailwindcss/oxide-linux-x64-musl": "4.1.4", + "@tailwindcss/oxide-wasm32-wasi": "4.1.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.4" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.14.tgz", - "integrity": "sha512-VBFKC2rFyfJ5J8lRwjy6ub3rgpY186kAcYgiUr8ArR8BAZzMruyeKJ6mlsD22Zp5ZLcPW/FXMasJiJBx0WsdQg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz", + "integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==", "cpu": [ "arm64" ], @@ -5457,9 +6043,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.14.tgz", - "integrity": "sha512-U3XOwLrefGr2YQZ9DXasDSNWGPZBCh8F62+AExBEDMLDfvLLgI/HDzY8Oq8p/JtqkAY38sWPOaNnRwEGKU5Zmg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz", + "integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==", "cpu": [ "arm64" ], @@ -5473,9 +6059,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.14.tgz", - "integrity": "sha512-V5AjFuc3ndWGnOi1d379UsODb0TzAS2DYIP/lwEbfvafUaD2aNZIcbwJtYu2DQqO2+s/XBvDVA+w4yUyaewRwg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz", + "integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==", "cpu": [ "x64" ], @@ -5489,9 +6075,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.14.tgz", - "integrity": "sha512-tXvtxbaZfcPfqBwW3f53lTcyH6EDT+1eT7yabwcfcxTs+8yTPqxsDUhrqe9MrnEzpNkd+R/QAjJapfd4tjWdLg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz", + "integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==", "cpu": [ "x64" ], @@ -5505,9 +6091,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.14.tgz", - "integrity": "sha512-cSeLNWWqIWeSTmBntQvyY2/2gcLX8rkPFfDDTQVF8qbRcRMVPLxBvFVJyfSAYRNch6ZyVH2GI6dtgALOBDpdNA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz", + "integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==", "cpu": [ "arm" ], @@ -5521,9 +6107,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.14.tgz", - "integrity": "sha512-bwDWLBalXFMDItcSXzFk6y7QKvj6oFlaY9vM+agTlwFL1n1OhDHYLZkSjaYsh6KCeG0VB0r7H8PUJVOM1LRZyg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz", + "integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==", "cpu": [ "arm64" ], @@ -5537,9 +6123,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.14.tgz", - "integrity": "sha512-gVkJdnR/L6iIcGYXx64HGJRmlme2FGr/aZH0W6u4A3RgPMAb+6ELRLi+UBiH83RXBm9vwCfkIC/q8T51h8vUJQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz", + "integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==", "cpu": [ "arm64" ], @@ -5553,41 +6139,124 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.14.tgz", - "integrity": "sha512-EE+EQ+c6tTpzsg+LGO1uuusjXxYx0Q00JE5ubcIGfsogSKth8n8i2BcS2wYTQe4jXGs+BQs35l78BIPzgwLddw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz", + "integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==", "cpu": [ "x64" ], "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz", + "integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz", + "integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@emnapi/wasi-threads": "^1.0.1", + "@napi-rs/wasm-runtime": "^0.2.8", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.4.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.4.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.8", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@tybys/wasm-util": "^0.9.0" } }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.14.tgz", - "integrity": "sha512-KCCOzo+L6XPT0oUp2Jwh233ETRQ/F6cwUnMnR0FvMUCbkDAzHbcyOgpfuAtRa5HD0WbTbH4pVD+S0pn1EhNfbw==", - "cpu": [ - "x64" - ], + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "inBundle": true, "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "tslib": "^2.4.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.0", + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.14.tgz", - "integrity": "sha512-AHObFiFL9lNYcm3tZSPqa/cHGpM5wOrNmM2uOMoKppp+0Hom5uuyRh0QkOp7jftsHZdrZUpmoz0Mp6vhh2XtUg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz", + "integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==", "cpu": [ "arm64" ], @@ -5601,9 +6270,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.14.tgz", - "integrity": "sha512-rNXXMDJfCJLw/ZaFTOLOHoGULxyXfh2iXTGiChFiYTSgKBKQHIGEpV0yn5N25WGzJJ+VBnRjHzlmDqRV+d//oQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz", + "integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==", "cpu": [ "x64" ], @@ -5617,29 +6286,44 @@ } }, "node_modules/@tailwindcss/vite": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.14.tgz", - "integrity": "sha512-y69ztPTRFy+13EPS/7dEFVl7q2Goh1pQueVO8IfGeyqSpcx/joNJXFk0lLhMgUbF0VFJotwRSb9ZY7Xoq3r26Q==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.4.tgz", + "integrity": "sha512-4UQeMrONbvrsXKXXp/uxmdEN5JIJ9RkH7YVzs6AMxC/KC1+Np7WZBaNIco7TEjlkthqxZbt8pU/ipD+hKjm80A==", "license": "MIT", "dependencies": { - "@tailwindcss/node": "4.0.14", - "@tailwindcss/oxide": "4.0.14", - "lightningcss": "1.29.2", - "tailwindcss": "4.0.14" + "@tailwindcss/node": "4.1.4", + "@tailwindcss/oxide": "4.1.4", + "tailwindcss": "4.1.4" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@tanstack/react-virtual": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.6.tgz", + "integrity": "sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==", "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10" + "dependencies": { + "@tanstack/virtual-core": "3.13.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.6.tgz", + "integrity": "sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@types/babel__core": { @@ -5657,9 +6341,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5678,9 +6362,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5697,14 +6381,6 @@ "@types/node": "*" } }, - "node_modules/@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -5714,12 +6390,6 @@ "@types/node": "*" } }, - "node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "license": "MIT" - }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", @@ -5740,9 +6410,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "license": "MIT" }, "node_modules/@types/express": { @@ -5769,6 +6439,14 @@ "@types/send": "*" } }, + "node_modules/@types/googlemaps": { + "version": "3.43.3", + "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.43.3.tgz", + "integrity": "sha512-ZWNoz/O8MPEpiajvj7QiqCY8tTLFNqNZ/a+s+zTV58wFVNAvvqV4bdGfnsjTb5Cs4V6wEsLrX8XRhmnyYJ2Tdg==", + "deprecated": "Types for the Google Maps browser API have moved to @types/google.maps. Note: these types are not for the googlemaps npm package, which is a Node API.", + "dev": true, + "license": "MIT" + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -5793,14 +6471,6 @@ "@types/node": "*" } }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -5815,12 +6485,12 @@ "peer": true }, "node_modules/@types/node": { - "version": "22.13.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", - "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/qs": { @@ -5839,12 +6509,32 @@ "version": "19.1.2", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", - "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" } }, + "node_modules/@types/react-datepicker": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-6.2.0.tgz", + "integrity": "sha512-+JtO4Fm97WLkJTH8j8/v3Ldh7JCNRwjMYjRaKh4KHH0M3jJoXtwiD3JBCsdlg3tsFIw9eQSqyAPeVDN2H2oM9Q==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.2", + "@types/react": "*", + "date-fns": "^3.3.1" + } + }, + "node_modules/@types/react-datepicker/node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/@types/react-dom": { "version": "19.1.2", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz", @@ -5855,20 +6545,6 @@ "@types/react": "^19.0.0" } }, - "node_modules/@types/request": { - "version": "2.48.12", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", - "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", @@ -5896,13 +6572,14 @@ "@types/send": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "node_modules/@types/tesseract.js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@types/tesseract.js/-/tesseract.js-0.0.2.tgz", + "integrity": "sha512-tYdOx7LEQF1E08qlO7kXFseQzPAqjUW1OlgOo/LHGkJPUUxTqJgKib5HAy4msiYt9vOYz9/RMydIo0KHqt6xdA==", "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/trusted-types": { "version": "2.0.7", @@ -5917,17 +6594,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz", - "integrity": "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.30.1.tgz", + "integrity": "sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.26.1", - "@typescript-eslint/type-utils": "8.26.1", - "@typescript-eslint/utils": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1", + "@typescript-eslint/scope-manager": "8.30.1", + "@typescript-eslint/type-utils": "8.30.1", + "@typescript-eslint/utils": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -5947,16 +6624,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz", - "integrity": "sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.30.1.tgz", + "integrity": "sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.26.1", - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/typescript-estree": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1", + "@typescript-eslint/scope-manager": "8.30.1", + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/typescript-estree": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1", "debug": "^4.3.4" }, "engines": { @@ -5972,14 +6649,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz", - "integrity": "sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.30.1.tgz", + "integrity": "sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1" + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5990,14 +6667,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz", - "integrity": "sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.30.1.tgz", + "integrity": "sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.26.1", - "@typescript-eslint/utils": "8.26.1", + "@typescript-eslint/typescript-estree": "8.30.1", + "@typescript-eslint/utils": "8.30.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -6014,9 +6691,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.1.tgz", - "integrity": "sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.30.1.tgz", + "integrity": "sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==", "dev": true, "license": "MIT", "engines": { @@ -6028,14 +6705,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz", - "integrity": "sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.30.1.tgz", + "integrity": "sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1", + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/visitor-keys": "8.30.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6094,16 +6771,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.1.tgz", - "integrity": "sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.30.1.tgz", + "integrity": "sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.26.1", - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/typescript-estree": "8.26.1" + "@typescript-eslint/scope-manager": "8.30.1", + "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/typescript-estree": "8.30.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6118,13 +6795,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz", - "integrity": "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.30.1.tgz", + "integrity": "sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/types": "8.30.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -6174,17 +6851,17 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", - "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", + "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" + "react-refresh": "^0.17.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -6193,20 +6870,6 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6247,7 +6910,6 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", - "peer": true, "engines": { "node": ">= 14" } @@ -6300,6 +6962,18 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", @@ -6343,17 +7017,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -6369,17 +7032,6 @@ "node": ">= 0.4" } }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "retry": "0.13.1" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -6395,6 +7047,15 @@ "node": ">= 4.0.0" } }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -6432,6 +7093,32 @@ "node": ">= 10.0.0" } }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", @@ -6442,38 +7129,24 @@ } }, "node_modules/axios": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz", - "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -6494,12 +7167,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6532,15 +7205,20 @@ "license": "MIT" }, "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.0.tgz", + "integrity": "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==", "license": "MIT", - "peer": true, "engines": { "node": "*" } }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -6642,22 +7320,20 @@ } }, "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "license": "MIT", "dependencies": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "^1.1.4" } }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", @@ -6665,12 +7341,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -6738,9 +7408,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001704", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001704.tgz", - "integrity": "sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==", + "version": "1.0.30001715", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", "funding": [ { "type": "opencollective", @@ -6887,12 +7557,12 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, "node_modules/cookie-signature": { @@ -6955,7 +7625,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, "license": "MIT" }, "node_modules/data-view-buffer": { @@ -7013,6 +7682,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -7122,10 +7792,17 @@ "node": ">=8" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -7147,26 +7824,11 @@ "node": ">= 0.4" } }, - "node_modules/duplexify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.2" - } - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "safe-buffer": "^5.0.1" } @@ -7193,9 +7855,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.118", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.118.tgz", - "integrity": "sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA==", + "version": "1.5.139", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz", + "integrity": "sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7213,17 +7875,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.18.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", @@ -7365,9 +8016,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -7377,31 +8028,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" } }, "node_modules/escalade": { @@ -7433,20 +8084,20 @@ } }, "node_modules/eslint": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", - "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", + "version": "9.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.0.tgz", + "integrity": "sha512-MsBdObhM4cEwkzCiraDv7A6txFXEqtNXOb877TsSp2FCkBNl8JfVQrmiuDqC1IkejT6JLPzYBXx/xAiYhyzgGA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/config-helpers": "^0.1.0", - "@eslint/core": "^0.12.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.22.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.25.0", + "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -7624,24 +8275,13 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", "engines": { - "node": ">=0.4.x" + "node": ">=0.8.x" } }, "node_modules/express": { @@ -7690,15 +8330,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7718,8 +8349,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/farmhash-modern": { "version": "1.1.0", @@ -7853,6 +8483,18 @@ "node": ">=16.0.0" } }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -7947,39 +8589,39 @@ } }, "node_modules/firebase": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.4.0.tgz", - "integrity": "sha512-Z6kwhWIPDgIm0+NUEQxwjH14hMP7t42WSFnf/78R0Vh59VovLYTOCTM3MIdY3jlSZ9uKz56FhXrvsNXNhAn/Xg==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.6.0.tgz", + "integrity": "sha512-Xqm6j6zszIEmI5nW1MPR8yTafoRTSrW3mWG9Lk9elCJtQDQSiTEkKZiNtUm9y6XfOPl8xoF1TNpxZe8HjgA0Og==", "license": "Apache-2.0", "dependencies": { "@firebase/analytics": "0.10.12", "@firebase/analytics-compat": "0.2.18", - "@firebase/app": "0.11.2", - "@firebase/app-check": "0.8.12", - "@firebase/app-check-compat": "0.3.19", - "@firebase/app-compat": "0.2.51", + "@firebase/app": "0.11.4", + "@firebase/app-check": "0.8.13", + "@firebase/app-check-compat": "0.3.20", + "@firebase/app-compat": "0.2.53", "@firebase/app-types": "0.9.3", - "@firebase/auth": "1.9.1", - "@firebase/auth-compat": "0.5.19", - "@firebase/data-connect": "0.3.1", - "@firebase/database": "1.0.13", - "@firebase/database-compat": "2.0.4", - "@firebase/firestore": "4.7.9", - "@firebase/firestore-compat": "0.3.44", + "@firebase/auth": "1.10.0", + "@firebase/auth-compat": "0.5.20", + "@firebase/data-connect": "0.3.3", + "@firebase/database": "1.0.14", + "@firebase/database-compat": "2.0.5", + "@firebase/firestore": "4.7.10", + "@firebase/firestore-compat": "0.3.45", "@firebase/functions": "0.12.3", "@firebase/functions-compat": "0.3.20", "@firebase/installations": "0.6.13", "@firebase/installations-compat": "0.2.13", "@firebase/messaging": "0.12.17", "@firebase/messaging-compat": "0.2.17", - "@firebase/performance": "0.7.1", - "@firebase/performance-compat": "0.2.14", + "@firebase/performance": "0.7.2", + "@firebase/performance-compat": "0.2.15", "@firebase/remote-config": "0.6.0", "@firebase/remote-config-compat": "0.2.13", "@firebase/storage": "0.13.7", "@firebase/storage-compat": "0.3.17", "@firebase/util": "1.11.0", - "@firebase/vertexai": "1.1.0" + "@firebase/vertexai": "1.2.1" } }, "node_modules/firebase-admin": { @@ -8087,21 +8729,18 @@ } }, "node_modules/form-data": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", - "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/forwarded": { @@ -8114,12 +8753,13 @@ } }, "node_modules/framer-motion": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.5.0.tgz", - "integrity": "sha512-buPlioFbH9/W7rDzYh1C09AuZHAk2D1xTA1BlounJ2Rb9aRg84OXexP0GLd+R83v0khURdMX7b5MKnGTaSg5iA==", + "version": "12.7.4", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.7.4.tgz", + "integrity": "sha512-jX0bPsTmU0oPZTYz/dVyD0dmOyEOEJvdn0TaZBE5I8g2GvVnnQnW9f65cJnoVfUkY3WZWNXGXnPbVA9YnaIfVA==", + "license": "MIT", "dependencies": { - "motion-dom": "^12.5.0", - "motion-utils": "^12.5.0", + "motion-dom": "^12.7.4", + "motion-utils": "^12.7.2", "tslib": "^2.4.0" }, "peerDependencies": { @@ -8212,14 +8852,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -8234,7 +8866,6 @@ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -8255,7 +8886,6 @@ "https://github.com/sponsors/ctavan" ], "license": "MIT", - "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -8265,7 +8895,6 @@ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", "license": "Apache-2.0", - "peer": true, "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", @@ -8317,6 +8946,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -8421,7 +9059,6 @@ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", "license": "Apache-2.0", - "peer": true, "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", @@ -8434,67 +9071,11 @@ "node": ">=14" } }, - "node_modules/google-gax": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", - "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@grpc/grpc-js": "^1.10.9", - "@grpc/proto-loader": "^0.7.13", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "google-auth-library": "^9.3.0", - "node-fetch": "^2.7.0", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^2.0.2", - "protobufjs": "^7.3.2", - "retry-request": "^7.0.0", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/google-gax/node_modules/@grpc/grpc-js": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.0.tgz", - "integrity": "sha512-pMuxInZjUnUkgMT2QLZclRqwk2ykJbIU05aZgPgJYXEpN9+2I7z7aNwcjWZSycRPl232FfhPszyBFJyOxTHNog==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" - }, - "engines": { - "node": ">=12.10.0" - } - }, - "node_modules/google-gax/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/google-logging-utils": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -8524,12 +9105,16 @@ "dev": true, "license": "MIT" }, + "node_modules/gsap": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.13.0.tgz", + "integrity": "sha512-QL7MJ2WMjm1PHWsoFrAQH/J8wUeqZvMtHO58qdekHpCfhvhSL4gSiz6vJf5EeMP0LOn3ZCprL2ki/gjED8ghVw==" + }, "node_modules/gtoken": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", "license": "MIT", - "peer": true, "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" @@ -8625,24 +9210,6 @@ "node": ">= 0.4" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -8660,47 +9227,16 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "license": "MIT" }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", - "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "4" @@ -8727,6 +9263,12 @@ "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", "license": "ISC" }, + "node_modules/idb-keyval": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==", + "license": "Apache-2.0" + }, "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", @@ -9185,6 +9727,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -9323,7 +9871,6 @@ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", "license": "MIT", - "peer": true, "dependencies": { "bignumber.js": "^9.0.0" } @@ -9452,7 +9999,6 @@ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "license": "MIT", - "peer": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -9482,7 +10028,6 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "license": "MIT", - "peer": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" @@ -9859,11 +10404,23 @@ "license": "MIT" }, "node_modules/long": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", - "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -9982,20 +10539,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -10030,11 +10573,12 @@ } }, "node_modules/motion": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.5.0.tgz", - "integrity": "sha512-BTAYKszMmTvXSsIyeHNMPSicjWgUA4j7OmZv1xPpthm4sPub3ch66fy9U7BhJ1uXNL3YeprsIegzuvps3FkEMw==", + "version": "12.7.4", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.7.4.tgz", + "integrity": "sha512-MBGrMbYageHw4iZJn+pGTr7abq5n53jCxYkhFC1It3vYukQPRWg5zij46MnwYGpLR8KG465MLHSASXot9edYOw==", + "license": "MIT", "dependencies": { - "framer-motion": "^12.5.0", + "framer-motion": "^12.7.4", "tslib": "^2.4.0" }, "peerDependencies": { @@ -10055,17 +10599,19 @@ } }, "node_modules/motion-dom": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.5.0.tgz", - "integrity": "sha512-uH2PETDh7m+Hjd1UQQ56yHqwn83SAwNjimNPE/kC+Kds0t4Yh7+29rfo5wezVFpPOv57U4IuWved5d1x0kNhbQ==", + "version": "12.7.4", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.7.4.tgz", + "integrity": "sha512-1ZUHAoSUMMxP6jPqyxlk9XUfb6NxMsnWPnH2YGhrOhTURLcXWbETi6eemoKb60Pe32NVJYduL4B62VQSO5Jq8Q==", + "license": "MIT", "dependencies": { - "motion-utils": "^12.5.0" + "motion-utils": "^12.7.2" } }, "node_modules/motion-utils": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.5.0.tgz", - "integrity": "sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA==" + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.7.2.tgz", + "integrity": "sha512-XhZwqctxyJs89oX00zn3OGCuIIpVevbTa+u82usWBC6pSHUd2AoNWiYa7Du8tJxJy9TFbZ82pcn5t7NOm1PHAw==", + "license": "MIT" }, "node_modules/ms": { "version": "2.1.3", @@ -10074,9 +10620,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", - "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -10111,12 +10657,21 @@ "resolved": "", "link": true }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", - "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10132,31 +10687,6 @@ } } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT", - "peer": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -10182,17 +10712,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -10234,15 +10753,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/olamaps-web-sdk": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/olamaps-web-sdk/-/olamaps-web-sdk-1.1.2.tgz", - "integrity": "sha512-B5iuaO78L+YgyZ/qJwSDiuqTN6mX0vnGIiIBotpWNm4Z/V4Z5KhoOHldZNxvN1qufnhz1+5ygnqssuwyMt5h7A==", - "engines": { - "node": ">=16.14.0", - "npm": ">=8.1.0" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -10264,6 +10774,15 @@ "wrappy": "1" } }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "license": "MIT", + "bin": { + "opencollective-postinstall": "index.js" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -10303,7 +10822,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -10471,24 +10990,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proto3-json-serializer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", - "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { - "protobufjs": "^7.2.5" - }, - "engines": { - "node": ">=14.0.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.0.tgz", + "integrity": "sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -10616,24 +11132,87 @@ } }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/react-datepicker": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-8.3.0.tgz", + "integrity": "sha512-DhfrIJnTPJTUVRtXU7c7zooug40rD6q+Fc8UTCt19dYEotLpDQgTN98MfocY6Rc4S99oOFFEoxyanOM/TKauuw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.27.3", + "clsx": "^2.1.1", + "date-fns": "^4.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/react-datepicker/node_modules/@floating-ui/react": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.7.tgz", + "integrity": "sha512-5V9pwFeiv+95Jlowq/7oiGISSrdXMTs2jfoSy8k+WM6oI/Skm1WWjPdJWeporN2O4UGcsaCJdirKffKayMoPgw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.9", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-dropzone": { + "version": "14.3.8", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", + "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.55.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz", + "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "node_modules/react-icons": { @@ -10645,23 +11224,75 @@ "react": "*" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", + "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-router": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.3.0.tgz", - "integrity": "sha512-466f2W7HIWaNXTKM5nHTqNxLrHTyXybm7R0eBlVSt0k/u55tTCDO194OIx/NrYD4TS5SXKTNekXfT37kMKUjgw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.1.tgz", + "integrity": "sha512-/jjU3fcYNd2bwz9Q0xt5TwyiyoO8XjSEFXJY4O/lMAlkGTHWuHRAbR9Etik+lSDqMC7A7mz3UlXzgYT6Vl58sA==", "license": "MIT", "dependencies": { - "@types/cookie": "^0.6.0", "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0", "turbo-stream": "2.4.0" @@ -10680,18 +11311,50 @@ } }, "node_modules/react-router-dom": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.3.0.tgz", - "integrity": "sha512-z7Q5FTiHGgQfEurX/FBinkOXhWREJIAB2RiU24lvcBa82PxUpwqvs/PAXb9lJyPjTs2jrl6UkLvCZVGJPeNuuQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.5.1.tgz", + "integrity": "sha512-5DPSPc7ENrt2tlKPq0FtpG80ZbqA9aIKEyqX6hSNJDlol/tr6iqCK4crqdsusmOSSotq6zDsn0y3urX9TuTNmA==", + "license": "MIT", "dependencies": { - "react-router": "7.3.0" + "react-router": "7.5.1" }, "engines": { "node": ">=20.0.0" }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-router/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-toastify": { @@ -10762,9 +11425,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "license": "MIT" }, "node_modules/regenerator-transform": { @@ -10891,33 +11554,6 @@ "node": ">=4" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/retry-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", - "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/request": "^2.48.8", - "extend": "^3.0.2", - "teeny-request": "^9.0.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -10930,12 +11566,12 @@ } }, "node_modules/rollup": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", - "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -10945,25 +11581,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.35.0", - "@rollup/rollup-android-arm64": "4.35.0", - "@rollup/rollup-darwin-arm64": "4.35.0", - "@rollup/rollup-darwin-x64": "4.35.0", - "@rollup/rollup-freebsd-arm64": "4.35.0", - "@rollup/rollup-freebsd-x64": "4.35.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", - "@rollup/rollup-linux-arm-musleabihf": "4.35.0", - "@rollup/rollup-linux-arm64-gnu": "4.35.0", - "@rollup/rollup-linux-arm64-musl": "4.35.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", - "@rollup/rollup-linux-riscv64-gnu": "4.35.0", - "@rollup/rollup-linux-s390x-gnu": "4.35.0", - "@rollup/rollup-linux-x64-gnu": "4.35.0", - "@rollup/rollup-linux-x64-musl": "4.35.0", - "@rollup/rollup-win32-arm64-msvc": "4.35.0", - "@rollup/rollup-win32-ia32-msvc": "4.35.0", - "@rollup/rollup-win32-x64-msvc": "4.35.0", + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", "fsevents": "~2.3.2" } }, @@ -11076,9 +11713,9 @@ "license": "ISC" }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "license": "MIT" }, "node_modules/semver": { @@ -11333,6 +11970,16 @@ "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", "license": "MIT" }, + "node_modules/sonner": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz", + "integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -11373,6 +12020,32 @@ "node": ">=0.10.0" } }, + "node_modules/source-map/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/source-map/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/source-map/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -11399,25 +12072,6 @@ "readable-stream": "^3.5.0" } }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -11584,14 +12238,6 @@ ], "license": "MIT" }, - "node_modules/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11616,10 +12262,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, "node_modules/tailwind-merge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz", - "integrity": "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.2.0.tgz", + "integrity": "sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==", "license": "MIT", "funding": { "type": "github", @@ -11627,9 +12279,9 @@ } }, "node_modules/tailwindcss": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.14.tgz", - "integrity": "sha512-92YT2dpt671tFiHH/e1ok9D987N9fHD5VWoly1CdPD/Cd1HMglvZwP3nx2yTj2lbXDAHt8QssZkxTLCCTNL+xw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz", + "integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==", "license": "MIT" }, "node_modules/tailwindcss-animate": { @@ -11645,6 +12297,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/tailwindcss-motion/-/tailwindcss-motion-1.1.0.tgz", "integrity": "sha512-0lK6rA4+367ffJdi1TtB72GlMCxJi2TP/xRiHc6An5pZSlU6WfIHhSvLxpcGilGZfBrOqc2q4woH1DEP/lCNbQ==", + "license": "MIT", "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } @@ -11658,68 +12311,6 @@ "node": ">=6" } }, - "node_modules/teeny-request": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", - "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.9", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/teeny-request/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/teeny-request/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/teeny-request/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -11765,13 +12356,37 @@ "node": ">=10" } }, + "node_modules/tesseract.js": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-6.0.1.tgz", + "integrity": "sha512-/sPvMvrCtgxnNRCjbTYbr7BRu0yfWDsMZQ2a/T5aN/L1t8wUQN6tTWv6p6FwzpoEBA0jrN2UD2SX4QQFRdoDbA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bmp-js": "^0.1.0", + "idb-keyval": "^6.2.0", + "is-url": "^1.2.4", + "node-fetch": "^2.6.9", + "opencollective-postinstall": "^2.0.3", + "regenerator-runtime": "^0.13.3", + "tesseract.js-core": "^6.0.0", + "wasm-feature-detect": "^1.2.11", + "zlibjs": "^0.3.1" + } + }, + "node_modules/tesseract.js-core": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tesseract.js-core/-/tesseract.js-core-6.0.0.tgz", + "integrity": "sha512-1Qncm/9oKM7xgrQXZXNB+NRh19qiXGhxlrR8EwFbK5SaUbPZnS5OMtP/ghtqfd23hsr1ZvZbZjeuAGcMxd/ooA==", + "license": "Apache-2.0" + }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -11782,9 +12397,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -11830,18 +12445,15 @@ } }, "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" - } + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -11990,15 +12602,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.1.tgz", - "integrity": "sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==", + "version": "8.30.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.30.1.tgz", + "integrity": "sha512-D7lC0kcehVH7Mb26MRQi64LMyRJsj3dToJxM1+JVTl53DQSV5/7oUGWQLcKl1C1KnoVHxMMU2FNQMffr7F3Row==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.26.1", - "@typescript-eslint/parser": "8.26.1", - "@typescript-eslint/utils": "8.26.1" + "@typescript-eslint/eslint-plugin": "8.30.1", + "@typescript-eslint/parser": "8.30.1", + "@typescript-eslint/utils": "8.30.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12031,9 +12643,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -12172,6 +12784,58 @@ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "license": "MIT" }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -12223,14 +12887,17 @@ } }, "node_modules/vite": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz", - "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz", + "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.3", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.12" }, "bin": { "vite": "bin/vite.js" @@ -12294,9 +12961,9 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.21.1.tgz", - "integrity": "sha512-rkTbKFbd232WdiRJ9R3u+hZmf5SfQljX1b45NF6oLA6DSktEKpYllgTo1l2lkiZWMWV78pABJtFjNXfBef3/3Q==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.21.2.tgz", + "integrity": "sha512-vFhH6Waw8itNu37hWUJxL50q+CBbNcMVzsKaYHQVrfxTt3ihk3PeLO22SbiP1UNWzcEPaTQv+YVxe4G0KOjAkg==", "license": "MIT", "dependencies": { "debug": "^4.3.6", @@ -12323,6 +12990,38 @@ } } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/wasm-feature-detect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", + "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", + "license": "Apache-2.0" + }, "node_modules/web-vitals": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", @@ -12330,9 +13029,9 @@ "license": "Apache-2.0" }, "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/websocket-driver": { @@ -12359,14 +13058,13 @@ } }, "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { @@ -12825,6 +13523,27 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml2js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", @@ -12893,7 +13612,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -12901,6 +13620,33 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zlibjs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", + "integrity": "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/zod": { + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", + "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } } } } diff --git a/package.json b/package.json index 40c1c8a..07c3bfc 100644 --- a/package.json +++ b/package.json @@ -15,16 +15,28 @@ "@aws-sdk/lib-storage": "^3.758.0", "@aws-sdk/s3-request-presigner": "^3.758.0", "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@google/genai": "^0.9.0", + "@headlessui/react": "^2.2.2", + "@heroicons/react": "^2.2.0", + "@hookform/resolvers": "^5.0.1", "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-dialog": "^1.1.10", + "@radix-ui/react-label": "^2.1.4", + "@radix-ui/react-progress": "^1.1.4", + "@radix-ui/react-radio-group": "^1.3.0", + "@radix-ui/react-select": "^2.2.0", + "@radix-ui/react-separator": "^1.1.4", "@radix-ui/react-slider": "^1.2.3", - "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-switch": "^1.1.3", "@tailwindcss/vite": "^4.0.14", "@types/dotenv": "^8.2.3", + "@types/react-datepicker": "^6.2.0", + "@types/tesseract.js": "^0.0.2", "@types/uuid": "^10.0.0", "@vercel/analytics": "^1.5.0", "aws-sdk": "^2.1692.0", - "axios": "^1.8.3", + "axios": "^1.8.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", @@ -32,24 +44,32 @@ "firebase": "^11.4.0", "firebase-functions": "^6.3.2", "framer-motion": "^12.5.0", + "gsap": "^3.13.0", "lucide-react": "^0.482.0", "motion": "^12.5.0", "neighbourlink": "file:", - "olamaps-web-sdk": "^1.1.2", + "next-themes": "^0.4.6", "react": "^19.0.0", + "react-datepicker": "^8.3.0", "react-dom": "^19.0.0", + "react-dropzone": "^14.3.8", + "react-hook-form": "^7.55.0", "react-icons": "^5.5.0", "react-router-dom": "^7.3.0", "react-toastify": "^11.0.5", + "sonner": "^2.0.3", "tailwind-merge": "^3.0.2", "tailwindcss": "^4.0.14", "tailwindcss-animate": "^1.0.7", "tailwindcss-motion": "^1.1.0", + "tesseract.js": "^6.0.1", "uuid": "^11.1.0", - "vite-plugin-pwa": "^0.21.1" + "vite-plugin-pwa": "^0.21.1", + "zod": "^3.24.3" }, "devDependencies": { "@eslint/js": "^9.21.0", + "@types/googlemaps": "^3.43.3", "@types/node": "^22.13.10", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", diff --git a/public/assets/dhak.jpg b/public/assets/dhak.jpg new file mode 100644 index 0000000..2d394c3 Binary files /dev/null and b/public/assets/dhak.jpg differ diff --git a/public/assets/dhaki.png b/public/assets/dhaki.png new file mode 100644 index 0000000..d7a3e5d Binary files /dev/null and b/public/assets/dhaki.png differ diff --git a/public/assets/pujo-bg.jpg b/public/assets/pujo-bg.jpg new file mode 100644 index 0000000..7b9780b Binary files /dev/null and b/public/assets/pujo-bg.jpg differ diff --git a/public/assets/pujo-bg2.jpg b/public/assets/pujo-bg2.jpg new file mode 100644 index 0000000..5085cbd Binary files /dev/null and b/public/assets/pujo-bg2.jpg differ diff --git a/public/assets/subho-saradiya.jpeg b/public/assets/subho-saradiya.jpeg new file mode 100644 index 0000000..7887435 Binary files /dev/null and b/public/assets/subho-saradiya.jpeg differ diff --git a/public/assets/subho-saradiya.jpg b/public/assets/subho-saradiya.jpg new file mode 100644 index 0000000..7533091 Binary files /dev/null and b/public/assets/subho-saradiya.jpg differ diff --git a/src/ThemeToggle.tsx b/src/ThemeToggle.tsx deleted file mode 100644 index da0c6b1..0000000 --- a/src/ThemeToggle.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import { useThemeContext } from './contexts/ThemeContext'; // Update the import path -import { useStateContext } from './contexts/StateContext'; - -const ThemeToggle: React.FC = () => { - const { theme, toggleTheme } = useThemeContext(); // Use the correct properties - const { user } = useStateContext(); - - return ( - <> - { - user ? - - : - - } - - ); -} - -export default ThemeToggle; \ No newline at end of file diff --git a/src/components/AWS/UploadFile.tsx b/src/components/AWS/UploadFile.tsx index 7b377fe..ea7bd28 100644 --- a/src/components/AWS/UploadFile.tsx +++ b/src/components/AWS/UploadFile.tsx @@ -4,6 +4,7 @@ import React, { useState, useEffect } from 'react'; const UploadFiletoAWS = () => { const [, setPhotoFile] = useState(null); const [photoUrl, setPhotoUrl] = useState(null); + const [objectKey, setObjectKey] = useState(null); const [isUploading, setIsUploading] = useState(false); const [error, setError] = useState(null); @@ -15,9 +16,13 @@ const UploadFiletoAWS = () => { setError(null); try { - const url = await uploadFileToS3(file, file.name); + // Store the S3 key separately from the URL + const key = file.name; + const url = await uploadFileToS3(file, key); setPhotoUrl(url); + setObjectKey(key); // Save the S3 object key console.log("Photo URL:", url); + console.log("Object Key:", key); } catch (err) { setError("Upload failed. Please try again."); console.error(err); @@ -38,17 +43,13 @@ const UploadFiletoAWS = () => { {isUploading &&

    Uploading...

    } {error &&

    {error}

    } - {photoUrl && ( + {photoUrl && objectKey && (

    File uploaded successfully!

    View uploaded file - { - photoUrl && - - - } + {/* Pass objectKey, not photoUrl */}
    )} @@ -84,7 +85,70 @@ export const ImageDisplay: React.FC = ({ objectKey, className if (loading) return
    Loading image...
    ; if (error) return
    {error}
    ; + return S3 Image; }; +export interface VideoDisplayProps { + objectKey: string; + className?: string; + autoPlay?: boolean; + loop?: boolean; + muted?: boolean; + playsInline?: boolean; + controls?: boolean; +} + +export const VideoDisplay: React.FC = ({ + objectKey, + className = '', + autoPlay = true, + loop = true, + muted = true, + playsInline = true, + controls = true +}) => { + const [videoUrl, setVideoUrl] = useState(''); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const loadVideo = async () => { + try { + console.log('Loading video with object key:', objectKey); + if (!objectKey) { + setError('No video object key provided'); + setLoading(false); + return; + } + const signedUrl = await getSignedImageUrl(objectKey); + console.log('Video signed URL generated:', signedUrl); + setVideoUrl(signedUrl); + } catch (err) { + console.error('Failed to load video:', err); + setError('Failed to load video'); + } finally { + setLoading(false); + } + }; + + loadVideo(); + }, [objectKey]); + + if (loading) return
    Loading video...
    ; + if (error) return
    {error}
    ; + + return ( +