From fcad028959bd28df804da0ec0b7103dab23fe2be Mon Sep 17 00:00:00 2001
From: Stefan Hardegger
Date: Mon, 28 Jul 2025 13:52:09 +0200
Subject: [PATCH] scraping and improvements
---
.../controller/AuthorController.java | 36 +-
.../controller/CollectionController.java | 9 +-
.../storycove/controller/StoryController.java | 7 +-
.../com/storycove/service/AuthorService.java | 82 +--
.../storycove/service/TypesenseService.java | 19 -
.../storycove/service/AuthorServiceTest.java | 135 ++++-
frontend/next.config.js | 21 +-
frontend/package-lock.json | 225 +++++++++
frontend/package.json | 21 +-
frontend/src/app/add-story/page.tsx | 155 +++++-
frontend/src/app/scrape/author/route.ts | 72 +++
frontend/src/app/scrape/bulk/route.ts | 292 +++++++++++
frontend/src/app/scrape/story/route.ts | 85 ++++
frontend/src/app/stories/import/bulk/page.tsx | 300 +++++++++++
frontend/src/components/layout/Header.tsx | 62 ++-
frontend/src/components/ui/Dropdown.tsx | 98 ++++
frontend/src/lib/scraper/config/sites.json | 334 ++++++++++++
frontend/src/lib/scraper/scraper.ts | 379 ++++++++++++++
.../lib/scraper/strategies/contentCleaner.ts | 164 ++++++
frontend/src/lib/scraper/strategies/index.ts | 3 +
.../lib/scraper/strategies/linkExtractor.ts | 98 ++++
.../lib/scraper/strategies/textExtractor.ts | 144 ++++++
frontend/src/lib/scraper/types.ts | 248 +++++++++
frontend/src/lib/scraper/utils/cache.ts | 35 ++
frontend/src/lib/scraper/utils/rateLimit.ts | 23 +
frontend/src/lib/scraper/utils/urlParser.ts | 61 +++
frontend/tsconfig.tsbuildinfo | 2 +-
nginx.conf | 18 +-
package-lock.json | 304 ++++++++++-
storycove-scraper-spec.md | 474 ++++++++++++++++++
swissmilk_hamburger.pdf | Bin 0 -> 2363988 bytes
31 files changed, 3788 insertions(+), 118 deletions(-)
create mode 100644 frontend/src/app/scrape/author/route.ts
create mode 100644 frontend/src/app/scrape/bulk/route.ts
create mode 100644 frontend/src/app/scrape/story/route.ts
create mode 100644 frontend/src/app/stories/import/bulk/page.tsx
create mode 100644 frontend/src/components/ui/Dropdown.tsx
create mode 100644 frontend/src/lib/scraper/config/sites.json
create mode 100644 frontend/src/lib/scraper/scraper.ts
create mode 100644 frontend/src/lib/scraper/strategies/contentCleaner.ts
create mode 100644 frontend/src/lib/scraper/strategies/index.ts
create mode 100644 frontend/src/lib/scraper/strategies/linkExtractor.ts
create mode 100644 frontend/src/lib/scraper/strategies/textExtractor.ts
create mode 100644 frontend/src/lib/scraper/types.ts
create mode 100644 frontend/src/lib/scraper/utils/cache.ts
create mode 100644 frontend/src/lib/scraper/utils/rateLimit.ts
create mode 100644 frontend/src/lib/scraper/utils/urlParser.ts
create mode 100644 storycove-scraper-spec.md
create mode 100644 swissmilk_hamburger.pdf
diff --git a/backend/src/main/java/com/storycove/controller/AuthorController.java b/backend/src/main/java/com/storycove/controller/AuthorController.java
index 021ad57..89cc1c2 100644
--- a/backend/src/main/java/com/storycove/controller/AuthorController.java
+++ b/backend/src/main/java/com/storycove/controller/AuthorController.java
@@ -65,10 +65,12 @@ public class AuthorController {
@PostMapping
public ResponseEntity createAuthor(@Valid @RequestBody CreateAuthorRequest request) {
+ logger.info("Creating new author: {}", request.getName());
Author author = new Author();
updateAuthorFromRequest(author, request);
Author savedAuthor = authorService.create(author);
+ logger.info("Successfully created author: {} (ID: {})", savedAuthor.getName(), savedAuthor.getId());
return ResponseEntity.status(HttpStatus.CREATED).body(convertToDto(savedAuthor));
}
@@ -81,13 +83,7 @@ public class AuthorController {
@RequestParam(required = false, name = "authorRating") Integer rating,
@RequestParam(required = false, name = "avatar") MultipartFile avatarFile) {
- System.out.println("DEBUG: MULTIPART PUT called with:");
- System.out.println(" - name: " + name);
- System.out.println(" - notes: " + notes);
- System.out.println(" - urls: " + urls);
- System.out.println(" - rating: " + rating);
- System.out.println(" - avatar: " + (avatarFile != null ? avatarFile.getOriginalFilename() : "null"));
-
+ logger.info("Updating author with multipart data (ID: {})", id);
try {
Author existingAuthor = authorService.findById(id);
@@ -104,7 +100,6 @@ public class AuthorController {
// Handle rating update
if (rating != null) {
- System.out.println("DEBUG: Setting author rating via PUT: " + rating);
existingAuthor.setAuthorRating(rating);
}
@@ -115,6 +110,7 @@ public class AuthorController {
}
Author updatedAuthor = authorService.update(id, existingAuthor);
+ logger.info("Successfully updated author: {} via multipart", updatedAuthor.getName());
return ResponseEntity.ok(convertToDto(updatedAuthor));
} catch (Exception e) {
@@ -125,31 +121,27 @@ public class AuthorController {
@PutMapping(value = "/{id}", consumes = "application/json")
public ResponseEntity updateAuthorJson(@PathVariable UUID id,
@Valid @RequestBody UpdateAuthorRequest request) {
- System.out.println("DEBUG: JSON PUT called with:");
- System.out.println(" - name: " + request.getName());
- System.out.println(" - notes: " + request.getNotes());
- System.out.println(" - urls: " + request.getUrls());
- System.out.println(" - rating: " + request.getRating());
+ logger.info("Updating author with JSON data: {} (ID: {})", request.getName(), id);
Author existingAuthor = authorService.findById(id);
updateAuthorFromRequest(existingAuthor, request);
Author updatedAuthor = authorService.update(id, existingAuthor);
+ logger.info("Successfully updated author: {} via JSON", updatedAuthor.getName());
return ResponseEntity.ok(convertToDto(updatedAuthor));
}
@PutMapping("/{id}")
public ResponseEntity updateAuthorGeneric(@PathVariable UUID id, HttpServletRequest request) {
- System.out.println("DEBUG: GENERIC PUT called!");
- System.out.println(" - Content-Type: " + request.getContentType());
- System.out.println(" - Method: " + request.getMethod());
return ResponseEntity.status(415).body("Unsupported Media Type. Expected multipart/form-data or application/json");
}
@DeleteMapping("/{id}")
public ResponseEntity> deleteAuthor(@PathVariable UUID id) {
+ logger.info("Deleting author with ID: {}", id);
authorService.delete(id);
+ logger.info("Successfully deleted author with ID: {}", id);
return ResponseEntity.ok(Map.of("message", "Author deleted successfully"));
}
@@ -177,11 +169,8 @@ public class AuthorController {
@PostMapping("/{id}/rating")
public ResponseEntity rateAuthor(@PathVariable UUID id, @RequestBody RatingRequest request) {
- System.out.println("DEBUG: Rating author " + id + " with rating " + request.getRating());
Author author = authorService.setRating(id, request.getRating());
- System.out.println("DEBUG: After setRating, author rating is: " + author.getAuthorRating());
AuthorDto dto = convertToDto(author);
- System.out.println("DEBUG: Final DTO rating is: " + dto.getAuthorRating());
return ResponseEntity.ok(dto);
}
@@ -211,9 +200,7 @@ public class AuthorController {
@PostMapping("/{id}/test-rating/{rating}")
public ResponseEntity
-
+ )}
);
diff --git a/frontend/src/app/scrape/author/route.ts b/frontend/src/app/scrape/author/route.ts
new file mode 100644
index 0000000..20ac5f3
--- /dev/null
+++ b/frontend/src/app/scrape/author/route.ts
@@ -0,0 +1,72 @@
+import { NextRequest, NextResponse } from 'next/server';
+
+export async function POST(request: NextRequest) {
+ try {
+ const body = await request.json();
+ const { url } = body;
+
+ if (!url || typeof url !== 'string') {
+ return NextResponse.json(
+ { error: 'URL is required and must be a string' },
+ { status: 400 }
+ );
+ }
+
+ // Dynamic import to prevent client-side bundling
+ const { StoryScraper } = await import('@/lib/scraper/scraper');
+
+ const scraper = new StoryScraper();
+ const stories = await scraper.scrapeAuthorPage(url);
+
+ return NextResponse.json({ stories });
+ } catch (error) {
+ console.error('Author page scraping error:', error);
+
+ // Check if it's a ScraperError without importing at module level
+ if (error && typeof error === 'object' && error.constructor.name === 'ScraperError') {
+ return NextResponse.json(
+ {
+ error: (error as any).message,
+ url: (error as any).url
+ },
+ { status: 400 }
+ );
+ }
+
+ if (error instanceof Error) {
+ // Handle specific error types
+ if (error.message.includes('Invalid URL')) {
+ return NextResponse.json(
+ { error: 'Invalid URL provided' },
+ { status: 400 }
+ );
+ }
+
+ if (error.message.includes('not supported')) {
+ return NextResponse.json(
+ { error: 'Author page scraping is not supported for this website' },
+ { status: 400 }
+ );
+ }
+
+ if (error.message.includes('HTTP 404')) {
+ return NextResponse.json(
+ { error: 'Author page not found at the provided URL' },
+ { status: 404 }
+ );
+ }
+
+ if (error.message.includes('timeout')) {
+ return NextResponse.json(
+ { error: 'Request timed out while fetching content' },
+ { status: 408 }
+ );
+ }
+ }
+
+ return NextResponse.json(
+ { error: 'Failed to scrape author page. Please try again.' },
+ { status: 500 }
+ );
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/scrape/bulk/route.ts b/frontend/src/app/scrape/bulk/route.ts
new file mode 100644
index 0000000..f44931a
--- /dev/null
+++ b/frontend/src/app/scrape/bulk/route.ts
@@ -0,0 +1,292 @@
+import { NextRequest, NextResponse } from 'next/server';
+
+interface BulkImportRequest {
+ urls: string[];
+}
+
+interface ImportResult {
+ url: string;
+ status: 'imported' | 'skipped' | 'error';
+ reason?: string;
+ title?: string;
+ author?: string;
+ error?: string;
+ storyId?: string;
+}
+
+interface BulkImportResponse {
+ results: ImportResult[];
+ summary: {
+ total: number;
+ imported: number;
+ skipped: number;
+ errors: number;
+ };
+}
+
+export async function POST(request: NextRequest) {
+ try {
+ // Check for authentication
+ const authorization = request.headers.get('authorization');
+ if (!authorization) {
+ return NextResponse.json(
+ { error: 'Authentication required for bulk import' },
+ { status: 401 }
+ );
+ }
+
+ const body = await request.json();
+ const { urls } = body as BulkImportRequest;
+
+ if (!urls || !Array.isArray(urls) || urls.length === 0) {
+ return NextResponse.json(
+ { error: 'URLs array is required and must not be empty' },
+ { status: 400 }
+ );
+ }
+
+ if (urls.length > 50) {
+ return NextResponse.json(
+ { error: 'Maximum 50 URLs allowed per bulk import' },
+ { status: 400 }
+ );
+ }
+
+ // Dynamic imports to prevent client-side bundling
+ const { StoryScraper } = await import('@/lib/scraper/scraper');
+
+ const scraper = new StoryScraper();
+ const results: ImportResult[] = [];
+ let importedCount = 0;
+ let skippedCount = 0;
+ let errorCount = 0;
+
+ console.log(`Starting bulk scraping for ${urls.length} URLs`);
+ console.log(`Environment NEXT_PUBLIC_API_URL: ${process.env.NEXT_PUBLIC_API_URL}`);
+
+ // For server-side API calls in Docker, use direct backend container URL
+ // Client-side calls use NEXT_PUBLIC_API_URL through nginx, but server-side needs direct container access
+ const serverSideApiBaseUrl = 'http://backend:8080/api';
+ console.log(`DEBUG: serverSideApiBaseUrl variable is: ${serverSideApiBaseUrl}`);
+
+ // Quick test to verify backend connectivity
+ try {
+ console.log(`Testing backend connectivity at: http://backend:8080/api/stories/check-duplicate`);
+ const testResponse = await fetch(`http://backend:8080/api/stories/check-duplicate?title=test&authorName=test`, {
+ method: 'GET',
+ headers: {
+ 'Authorization': authorization,
+ 'Content-Type': 'application/json',
+ },
+ });
+ console.log(`Backend test response status: ${testResponse.status}`);
+ } catch (error) {
+ console.error(`Backend connectivity test failed:`, error);
+ }
+
+ for (const url of urls) {
+ console.log(`Processing URL: ${url}`);
+
+ try {
+ // Validate URL format
+ if (!url || typeof url !== 'string' || url.trim() === '') {
+ results.push({
+ url: url || 'Empty URL',
+ status: 'error',
+ error: 'Invalid URL format'
+ });
+ errorCount++;
+ continue;
+ }
+
+ const trimmedUrl = url.trim();
+
+ // Scrape the story
+ const scrapedStory = await scraper.scrapeStory(trimmedUrl);
+
+ // Validate required fields
+ if (!scrapedStory.title || !scrapedStory.author || !scrapedStory.content) {
+ const missingFields = [];
+ if (!scrapedStory.title) missingFields.push('title');
+ if (!scrapedStory.author) missingFields.push('author');
+ if (!scrapedStory.content) missingFields.push('content');
+
+ results.push({
+ url: trimmedUrl,
+ status: 'skipped',
+ reason: `Missing required fields: ${missingFields.join(', ')}`,
+ title: scrapedStory.title,
+ author: scrapedStory.author
+ });
+ skippedCount++;
+ continue;
+ }
+
+ // Check for duplicates using query parameters
+ try {
+ // Use hardcoded backend URL for container-to-container communication
+ const duplicateCheckUrl = `http://backend:8080/api/stories/check-duplicate`;
+ console.log(`Duplicate check URL: ${duplicateCheckUrl}`);
+ const params = new URLSearchParams({
+ title: scrapedStory.title,
+ authorName: scrapedStory.author
+ });
+
+ const duplicateCheckResponse = await fetch(`${duplicateCheckUrl}?${params.toString()}`, {
+ method: 'GET',
+ headers: {
+ 'Authorization': authorization,
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (duplicateCheckResponse.ok) {
+ const duplicateResult = await duplicateCheckResponse.json();
+ if (duplicateResult.hasDuplicates) {
+ results.push({
+ url: trimmedUrl,
+ status: 'skipped',
+ reason: `Duplicate story found (${duplicateResult.count} existing)`,
+ title: scrapedStory.title,
+ author: scrapedStory.author
+ });
+ skippedCount++;
+ continue;
+ }
+ }
+ } catch (error) {
+ console.warn('Duplicate check failed:', error);
+ // Continue with import if duplicate check fails
+ }
+
+ // Create the story
+ try {
+ const storyData = {
+ title: scrapedStory.title,
+ summary: scrapedStory.summary || undefined,
+ contentHtml: scrapedStory.content,
+ sourceUrl: scrapedStory.sourceUrl || trimmedUrl,
+ authorName: scrapedStory.author,
+ tagNames: scrapedStory.tags && scrapedStory.tags.length > 0 ? scrapedStory.tags : undefined,
+ };
+
+ // Use hardcoded backend URL for container-to-container communication
+ const createUrl = `http://backend:8080/api/stories`;
+ console.log(`Create story URL: ${createUrl}`);
+ const createResponse = await fetch(createUrl, {
+ method: 'POST',
+ headers: {
+ 'Authorization': authorization,
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(storyData),
+ });
+
+ if (!createResponse.ok) {
+ const errorData = await createResponse.json();
+ throw new Error(errorData.message || 'Failed to create story');
+ }
+
+ const createdStory = await createResponse.json();
+
+ results.push({
+ url: trimmedUrl,
+ status: 'imported',
+ title: scrapedStory.title,
+ author: scrapedStory.author,
+ storyId: createdStory.id
+ });
+ importedCount++;
+
+ console.log(`Successfully imported: ${scrapedStory.title} by ${scrapedStory.author} (ID: ${createdStory.id})`);
+
+ } catch (error) {
+ console.error(`Failed to create story for ${trimmedUrl}:`, error);
+
+ let errorMessage = 'Failed to create story';
+ if (error instanceof Error) {
+ errorMessage = error.message;
+ }
+
+ results.push({
+ url: trimmedUrl,
+ status: 'error',
+ error: errorMessage,
+ title: scrapedStory.title,
+ author: scrapedStory.author
+ });
+ errorCount++;
+ }
+
+ } catch (error) {
+ console.error(`Error processing URL ${url}:`, error);
+
+ let errorMessage = 'Unknown error';
+ if (error instanceof Error) {
+ errorMessage = error.message;
+ }
+
+ results.push({
+ url: url,
+ status: 'error',
+ error: errorMessage
+ });
+ errorCount++;
+ }
+ }
+
+ const response: BulkImportResponse = {
+ results,
+ summary: {
+ total: urls.length,
+ imported: importedCount,
+ skipped: skippedCount,
+ errors: errorCount
+ }
+ };
+
+ console.log(`Bulk import completed:`, response.summary);
+
+ // Trigger Typesense reindex if any stories were imported
+ if (importedCount > 0) {
+ try {
+ console.log('Triggering Typesense reindex after bulk import...');
+ const reindexUrl = `http://backend:8080/api/stories/reindex-typesense`;
+ const reindexResponse = await fetch(reindexUrl, {
+ method: 'POST',
+ headers: {
+ 'Authorization': authorization,
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (reindexResponse.ok) {
+ const reindexResult = await reindexResponse.json();
+ console.log('Typesense reindex completed:', reindexResult);
+ } else {
+ console.warn('Typesense reindex failed:', reindexResponse.status);
+ }
+ } catch (error) {
+ console.warn('Failed to trigger Typesense reindex:', error);
+ // Don't fail the whole request if reindex fails
+ }
+ }
+
+ return NextResponse.json(response);
+
+ } catch (error) {
+ console.error('Bulk import error:', error);
+
+ if (error instanceof Error) {
+ return NextResponse.json(
+ { error: `Bulk import failed: ${error.message}` },
+ { status: 500 }
+ );
+ }
+
+ return NextResponse.json(
+ { error: 'Bulk import failed due to an unknown error' },
+ { status: 500 }
+ );
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/scrape/story/route.ts b/frontend/src/app/scrape/story/route.ts
new file mode 100644
index 0000000..000c69f
--- /dev/null
+++ b/frontend/src/app/scrape/story/route.ts
@@ -0,0 +1,85 @@
+import { NextRequest, NextResponse } from 'next/server';
+
+export async function POST(request: NextRequest) {
+ try {
+ const body = await request.json();
+ const { url } = body;
+
+ if (!url || typeof url !== 'string') {
+ return NextResponse.json(
+ { error: 'URL is required and must be a string' },
+ { status: 400 }
+ );
+ }
+
+ // Dynamic import to prevent client-side bundling
+ const { StoryScraper } = await import('@/lib/scraper/scraper');
+ const { ScraperError } = await import('@/lib/scraper/types');
+
+ const scraper = new StoryScraper();
+ const story = await scraper.scrapeStory(url);
+
+ // Debug logging
+ console.log('Scraped story data:', {
+ url: url,
+ title: story.title,
+ author: story.author,
+ summary: story.summary,
+ contentLength: story.content?.length || 0,
+ contentPreview: story.content?.substring(0, 200) + '...',
+ tags: story.tags,
+ coverImage: story.coverImage
+ });
+
+ return NextResponse.json(story);
+ } catch (error) {
+ console.error('Story scraping error:', error);
+
+ // Check if it's a ScraperError without importing at module level
+ if (error && typeof error === 'object' && error.constructor.name === 'ScraperError') {
+ return NextResponse.json(
+ {
+ error: (error as any).message,
+ url: (error as any).url
+ },
+ { status: 400 }
+ );
+ }
+
+ if (error instanceof Error) {
+ // Handle specific error types
+ if (error.message.includes('Invalid URL')) {
+ return NextResponse.json(
+ { error: 'Invalid URL provided' },
+ { status: 400 }
+ );
+ }
+
+ if (error.message.includes('Unsupported site')) {
+ return NextResponse.json(
+ { error: 'This website is not supported for scraping' },
+ { status: 400 }
+ );
+ }
+
+ if (error.message.includes('HTTP 404')) {
+ return NextResponse.json(
+ { error: 'Story not found at the provided URL' },
+ { status: 404 }
+ );
+ }
+
+ if (error.message.includes('timeout')) {
+ return NextResponse.json(
+ { error: 'Request timed out while fetching content' },
+ { status: 408 }
+ );
+ }
+ }
+
+ return NextResponse.json(
+ { error: 'Failed to scrape story. Please try again.' },
+ { status: 500 }
+ );
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/stories/import/bulk/page.tsx b/frontend/src/app/stories/import/bulk/page.tsx
new file mode 100644
index 0000000..c2272d0
--- /dev/null
+++ b/frontend/src/app/stories/import/bulk/page.tsx
@@ -0,0 +1,300 @@
+'use client';
+
+import { useState } from 'react';
+import { useRouter } from 'next/navigation';
+import Link from 'next/link';
+import { ArrowLeftIcon } from '@heroicons/react/24/outline';
+
+interface ImportResult {
+ url: string;
+ status: 'imported' | 'skipped' | 'error';
+ reason?: string;
+ title?: string;
+ author?: string;
+ error?: string;
+ storyId?: string;
+}
+
+interface BulkImportResponse {
+ results: ImportResult[];
+ summary: {
+ total: number;
+ imported: number;
+ skipped: number;
+ errors: number;
+ };
+}
+
+export default function BulkImportPage() {
+ const router = useRouter();
+ const [urls, setUrls] = useState('');
+ const [isLoading, setIsLoading] = useState(false);
+ const [results, setResults] = useState(null);
+ const [error, setError] = useState(null);
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+
+ if (!urls.trim()) {
+ setError('Please enter at least one URL');
+ return;
+ }
+
+ setIsLoading(true);
+ setError(null);
+ setResults(null);
+
+ try {
+ // Parse URLs from textarea (one per line)
+ const urlList = urls
+ .split('\n')
+ .map(url => url.trim())
+ .filter(url => url.length > 0);
+
+ if (urlList.length === 0) {
+ setError('Please enter at least one valid URL');
+ setIsLoading(false);
+ return;
+ }
+
+ if (urlList.length > 50) {
+ setError('Maximum 50 URLs allowed per bulk import');
+ setIsLoading(false);
+ return;
+ }
+
+ // Get auth token for server-side API calls
+ const token = localStorage.getItem('auth-token');
+
+ const response = await fetch('/scrape/bulk', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': token ? `Bearer ${token}` : '',
+ },
+ body: JSON.stringify({ urls: urlList }),
+ });
+
+ if (!response.ok) {
+ const errorData = await response.json();
+ throw new Error(errorData.error || 'Bulk import failed');
+ }
+
+ const data: BulkImportResponse = await response.json();
+ setResults(data);
+
+ } catch (err) {
+ console.error('Bulk import error:', err);
+ setError(err instanceof Error ? err.message : 'Failed to import stories');
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ const handleReset = () => {
+ setUrls('');
+ setResults(null);
+ setError(null);
+ };
+
+ const getStatusColor = (status: string) => {
+ switch (status) {
+ case 'imported': return 'text-green-700 bg-green-50 border-green-200';
+ case 'skipped': return 'text-yellow-700 bg-yellow-50 border-yellow-200';
+ case 'error': return 'text-red-700 bg-red-50 border-red-200';
+ default: return 'text-gray-700 bg-gray-50 border-gray-200';
+ }
+ };
+
+ const getStatusIcon = (status: string) => {
+ switch (status) {
+ case 'imported': return '✓';
+ case 'skipped': return 'âš ';
+ case 'error': return '✗';
+ default: return '';
+ }
+ };
+
+ return (
+
+
+ {/* Header */}
+
+
+
+
+ Back to Library
+
+
+
+
Bulk Import Stories
+
+ Import multiple stories at once by providing a list of URLs. Each URL will be scraped
+ and automatically added to your story collection.
+
+
+
+ {!results ? (
+ // Import Form
+
+ ) : (
+ // Results
+
+ {/* Summary */}
+
+
Import Summary
+
+
+
{results.summary.total}
+
Total URLs
+
+
+
{results.summary.imported}
+
Imported
+
+
+
{results.summary.skipped}
+
Skipped
+
+
+
{results.summary.errors}
+
Errors
+
+
+
+
+ {/* Detailed Results */}
+
+
+
Detailed Results
+
+
+ {results.results.map((result, index) => (
+
+
+
+
+
+ {getStatusIcon(result.status)} {result.status.charAt(0).toUpperCase() + result.status.slice(1)}
+
+
+
+
+ {result.url}
+
+
+ {result.title && result.author && (
+
+ "{result.title}" by {result.author}
+
+ )}
+
+ {result.reason && (
+
+ {result.reason}
+
+ )}
+
+ {result.error && (
+
+ Error: {result.error}
+
+ )}
+
+
+
+ ))}
+
+
+
+ {/* Actions */}
+
+
+
+
+ View Stories
+
+
+
+ )}
+
+
+ );
+}
\ No newline at end of file
diff --git a/frontend/src/components/layout/Header.tsx b/frontend/src/components/layout/Header.tsx
index 705cd23..9610043 100644
--- a/frontend/src/components/layout/Header.tsx
+++ b/frontend/src/components/layout/Header.tsx
@@ -7,6 +7,7 @@ import { useRouter } from 'next/navigation';
import { useAuth } from '../../contexts/AuthContext';
import { useTheme } from '../../lib/theme';
import Button from '../ui/Button';
+import Dropdown from '../ui/Dropdown';
export default function Header() {
const [isMenuOpen, setIsMenuOpen] = useState(false);
@@ -14,6 +15,24 @@ export default function Header() {
const { theme, toggleTheme } = useTheme();
const router = useRouter();
+ const addStoryItems = [
+ {
+ href: '/add-story',
+ label: 'Manual Entry',
+ description: 'Add a story by manually entering details'
+ },
+ {
+ href: '/stories/import',
+ label: 'Import from URL',
+ description: 'Import a single story from a website'
+ },
+ {
+ href: '/stories/import/bulk',
+ label: 'Bulk Import',
+ description: 'Import multiple stories from a list of URLs'
+ }
+ ];
+
const handleLogout = () => {
logout();
router.push('/login');
@@ -57,12 +76,10 @@ export default function Header() {
>
Authors
-
- Add Story
-
+
{/* Right side actions */}
@@ -131,13 +148,32 @@ export default function Header() {
>
Authors
- setIsMenuOpen(false)}
- >
- Add Story
-
+
+
Add Story
+
+ setIsMenuOpen(false)}
+ >
+ Manual Entry
+
+ setIsMenuOpen(false)}
+ >
+ Import from URL
+
+ setIsMenuOpen(false)}
+ >
+ Bulk Import
+
+
+
void;
+}
+
+export default function Dropdown({ trigger, items, className = '', onItemClick }: DropdownProps) {
+ const [isOpen, setIsOpen] = useState(false);
+ const dropdownRef = useRef(null);
+ const timeoutRef = useRef();
+
+ useEffect(() => {
+ const handleClickOutside = (event: MouseEvent) => {
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
+ setIsOpen(false);
+ }
+ };
+
+ if (isOpen) {
+ document.addEventListener('mousedown', handleClickOutside);
+ }
+
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ if (timeoutRef.current) {
+ clearTimeout(timeoutRef.current);
+ }
+ };
+ }, [isOpen]);
+
+ const handleMouseEnter = () => {
+ if (timeoutRef.current) {
+ clearTimeout(timeoutRef.current);
+ }
+ setIsOpen(true);
+ };
+
+ const handleMouseLeave = () => {
+ timeoutRef.current = setTimeout(() => {
+ setIsOpen(false);
+ }, 150);
+ };
+
+ const handleItemClick = () => {
+ setIsOpen(false);
+ onItemClick?.();
+ };
+
+ return (
+
+
+
+ {isOpen && (
+
+ {items.map((item, index) => (
+
+
{item.label}
+ {item.description && (
+
{item.description}
+ )}
+
+ ))}
+
+ )}
+
+ );
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/config/sites.json b/frontend/src/lib/scraper/config/sites.json
new file mode 100644
index 0000000..50f4104
--- /dev/null
+++ b/frontend/src/lib/scraper/config/sites.json
@@ -0,0 +1,334 @@
+{
+ "sites": {
+ "deviantart.com": {
+ "story": {
+ "title": "h1",
+ "titleFallback": "meta[property='og:title']",
+ "titleFallbackAttribute": "content",
+ "author": {
+ "strategy": "text-pattern",
+ "pattern": "by ([^\\s]+) on DeviantArt",
+ "searchAfter": "",
+ "searchBefore": ""
+ },
+ "content": {
+ "strategy": "text-blocks",
+ "minLength": 200,
+ "containerHints": ["journal", "literature", "story", "text", "content"],
+ "excludeSelectors": ["script", "style", "nav", "header", "footer", ".dev-page-sidebar"]
+ },
+ "summary": "meta[property='og:description']",
+ "summaryAttribute": "content",
+ "tags": "a[data-tagname]",
+ "tagsAttribute": "data-tagname",
+ "coverImage": "meta[property='og:image']",
+ "coverImageAttribute": "content"
+ },
+ "authorPage": {
+ "storyLinks": "a[data-hook='deviation_link']",
+ "filterStrategy": "dom-check",
+ "requiresChildElement": "div[class*='journal']"
+ }
+ },
+
+ "literotica.com": {
+ "story": {
+ "title": "h1",
+ "titleFallback": "meta[property='og:title']",
+ "titleFallbackAttribute": "content",
+ "author": {
+ "strategy": "link-with-path",
+ "pathContains": "/authors/",
+ "searchWithin": "header, .story-info, #story-meta"
+ },
+ "content": {
+ "strategy": "text-blocks",
+ "minLength": 500,
+ "containerHints": ["story", "content", "text"],
+ "excludeSelectors": ["script", "style", "nav", "header", "footer"]
+ },
+ "summary": "meta[name='description']",
+ "summaryAttribute": "content",
+ "multiPage": {
+ "enabled": true,
+ "strategy": "url-pattern",
+ "pageParam": "page",
+ "maxPages": 20
+ }
+ },
+ "authorPage": {
+ "storyLinks": {
+ "strategy": "href-pattern",
+ "pattern": "/s/[^/]+$",
+ "searchWithin": "main, #content, .stories-list"
+ }
+ }
+ },
+
+ "mcstories.com": {
+ "story": {
+ "title": "title",
+ "titleTransform": "remove-suffix: - MCStories.com",
+ "author": "meta[name='dcterms.creator']",
+ "authorAttribute": "content",
+ "content": "article#mcstories",
+ "summary": "meta[name='dcterms.description']",
+ "summaryAttribute": "content"
+ },
+ "authorPage": {
+ "storyLinks": "a[href$='.html']:not([href*='Authors'])",
+ "linkPrefix": "https://mcstories.com/"
+ }
+ },
+
+ "docs-lab.com": {
+ "story": {
+ "title": "title",
+ "titleTransform": "remove-suffix: - Doc's Lab",
+ "author": "a[href*='/profiles/'] strong",
+ "content": {
+ "strategy": "html-between",
+ "startMarker": "Story
",
+ "endMarker": "",
+ "includeStart": false
+ },
+ "tags": "span.label"
+ },
+ "authorPage": {
+ "storyLinks": "a[href*='/submissions/']",
+ "linkPrefix": "https://docs-lab.com"
+ }
+ },
+
+ "archiveofourown.org": {
+ "story": {
+ "title": "h2.title",
+ "author": "a[rel='author']",
+ "content": {
+ "strategy": "chapters",
+ "chapterSelector": "div.userstuff[role='article']",
+ "chaptersWrapper": "#chapters",
+ "singleChapter": "#workskin"
+ },
+ "summary": "div.summary blockquote.userstuff",
+ "tags": {
+ "strategy": "multiple-types",
+ "selectors": {
+ "fandom": "dd.fandom a.tag",
+ "warning": "dd.warning a.tag",
+ "category": "dd.category a.tag",
+ "relationship": "dd.relationship a.tag",
+ "character": "dd.character a.tag",
+ "freeform": "dd.freeform a.tag"
+ }
+ },
+ "multiPage": {
+ "enabled": true,
+ "strategy": "chapter-navigation",
+ "chapterListSelector": "#chapter_index option",
+ "urlPattern": "/chapters/{chapterId}"
+ }
+ },
+ "authorPage": {
+ "storyLinks": "h4.heading a[href*='/works/']",
+ "pagination": {
+ "enabled": true,
+ "nextPageSelector": "li.next a[rel='next']"
+ }
+ }
+ },
+
+ "fanfiction.net": {
+ "story": {
+ "title": "#profile_top b.xcontrast_txt",
+ "author": "#profile_top a[href*='/u/']",
+ "content": "#storytext",
+ "summary": "#profile_top div.xcontrast_txt",
+ "coverImage": {
+ "strategy": "lazy-loaded",
+ "selector": "img.cimage",
+ "attribute": "data-original"
+ },
+ "multiPage": {
+ "enabled": true,
+ "strategy": "chapter-dropdown",
+ "chapterSelector": "select#chap_select option",
+ "urlPattern": "{baseUrl}/{chapterNumber}"
+ }
+ },
+ "authorPage": {
+ "storyLinks": "div.z-list a.stitle",
+ "metadata": {
+ "strategy": "sibling-text",
+ "metadataSelector": "div.z-padtop2",
+ "parsePattern": "Rated: ([^-]+) - .+ - Chapters: (\\d+)"
+ }
+ }
+ },
+
+ "royalroad.com": {
+ "story": {
+ "title": "h1[property='name']",
+ "author": "h4[property='author'] a",
+ "content": {
+ "strategy": "chapter-content",
+ "selector": "div.chapter-content",
+ "cleanupSelectors": [".portlet", ".ads-holder", "div[style*='display:none']"]
+ },
+ "summary": "div.description div.hidden-content",
+ "tags": "span.tags a.fiction-tag",
+ "coverImage": "img.thumbnail",
+ "coverImageAttribute": "src",
+ "multiPage": {
+ "enabled": true,
+ "strategy": "table-of-contents",
+ "tocSelector": "table#chapters tbody tr a[href*='/chapter/']",
+ "requiresAuth": false
+ }
+ },
+ "authorPage": {
+ "storyLinks": "div.fiction-list-item h2.fiction-title a",
+ "additionalInfo": {
+ "strategy": "data-attributes",
+ "statsSelector": "div.stats",
+ "extractStats": ["pages", "followers", "views"]
+ }
+ }
+ },
+
+ "wattpad.com": {
+ "story": {
+ "title": "h1",
+ "author": {
+ "strategy": "schema-org",
+ "schemaType": "Person",
+ "property": "name",
+ "fallbackSelector": "a[href*='/user/']"
+ },
+ "content": {
+ "strategy": "react-content",
+ "contentClass": "pre-wrap",
+ "paragraphSelector": "p[data-p-id]",
+ "requiresJavaScript": true
+ },
+ "summary": "h2.description",
+ "tags": "div.tag-items a.tag",
+ "coverImage": {
+ "strategy": "responsive-image",
+ "selector": "img[alt*='cover']",
+ "srcsetAttribute": "srcset",
+ "selectLargest": true
+ },
+ "multiPage": {
+ "enabled": true,
+ "strategy": "api-based",
+ "apiPattern": "/v4/parts/{partId}/text",
+ "tocApiPattern": "/v5/stories/{storyId}/parts",
+ "requiresAuth": true
+ }
+ },
+ "authorPage": {
+ "storyLinks": {
+ "strategy": "infinite-scroll",
+ "initialSelector": "a[href*='/story/']",
+ "apiEndpoint": "/v4/users/{userId}/stories",
+ "requiresJavaScript": true
+ }
+ }
+ }
+ },
+
+ "strategies": {
+ "text-blocks": {
+ "description": "Find content by looking for large text blocks",
+ "implementation": "Find all text nodes, group by parent, select parent with most text"
+ },
+ "link-with-path": {
+ "description": "Find links containing specific path patterns",
+ "implementation": "querySelector with href*= or iterate and check .href property"
+ },
+ "href-pattern": {
+ "description": "Match links by regex pattern",
+ "implementation": "Array.from(links).filter(a => pattern.test(a.href))"
+ },
+ "text-pattern": {
+ "description": "Extract text using regex from raw HTML",
+ "implementation": "Use regex on .html() with proper groups"
+ },
+ "html-between": {
+ "description": "Extract HTML between markers",
+ "implementation": "indexOf() to find positions, substring to extract"
+ },
+ "chapters": {
+ "description": "Extract story content that may be in chapters",
+ "implementation": "Check for multiple chapters or single chapter format"
+ },
+ "multiple-types": {
+ "description": "Extract different categories of tags",
+ "implementation": "Map over selector types and extract each category"
+ },
+ "chapter-navigation": {
+ "description": "Navigate through chapters using chapter index",
+ "implementation": "Extract chapter IDs and construct URLs"
+ },
+ "lazy-loaded": {
+ "description": "Extract images that are lazy-loaded",
+ "implementation": "Check data-* attributes for actual image source"
+ },
+ "chapter-dropdown": {
+ "description": "Handle stories with chapter selection dropdown",
+ "implementation": "Parse dropdown options and construct chapter URLs"
+ },
+ "table-of-contents": {
+ "description": "Extract chapters from a table of contents",
+ "implementation": "Find all chapter links in TOC structure"
+ },
+ "schema-org": {
+ "description": "Extract data from schema.org structured data",
+ "implementation": "Parse JSON-LD or microdata for specific properties"
+ },
+ "react-content": {
+ "description": "Extract content from React-rendered pages",
+ "implementation": "May require JavaScript execution or API access"
+ },
+ "responsive-image": {
+ "description": "Select best quality from responsive images",
+ "implementation": "Parse srcset and select highest resolution"
+ },
+ "api-based": {
+ "description": "Use API endpoints instead of HTML scraping",
+ "implementation": "Detect API patterns and make direct API calls"
+ },
+ "infinite-scroll": {
+ "description": "Handle pages with infinite scroll",
+ "implementation": "Detect scroll API endpoints or pagination"
+ }
+ },
+
+ "globalOptions": {
+ "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
+ "timeout": 30000,
+ "retryAttempts": 3,
+ "rateLimitMs": 1000,
+ "cacheDuration": 300000,
+ "javascriptTimeout": 10000
+ },
+
+ "siteNotes": {
+ "wattpad.com": {
+ "warning": "Wattpad has aggressive anti-scraping measures. Consider using their API if available.",
+ "requiresAuth": "Some stories may require login to access full content"
+ },
+ "royalroad.com": {
+ "note": "Very scraper-friendly with good HTML structure"
+ },
+ "archiveofourown.org": {
+ "note": "Respects robots.txt, has good semantic HTML",
+ "rateLimit": "Be extra respectful of rate limits"
+ },
+ "fanfiction.net": {
+ "note": "Older site with simpler HTML structure",
+ "warning": "Known to block IPs for aggressive scraping"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/scraper.ts b/frontend/src/lib/scraper/scraper.ts
new file mode 100644
index 0000000..7b2d406
--- /dev/null
+++ b/frontend/src/lib/scraper/scraper.ts
@@ -0,0 +1,379 @@
+import 'server-only';
+
+// Note: cheerio import is done dynamically to avoid client-side bundling issues
+// Using any type for CheerioAPI to prevent bundling issues
+import {
+ SitesConfig,
+ SiteConfig,
+ ScrapedStory,
+ ScrapedAuthorStory,
+ SelectorStrategy,
+ MultiPageConfig,
+ ScraperError
+} from './types';
+import { RateLimiter } from './utils/rateLimit';
+import { ScraperCache } from './utils/cache';
+import { UrlParser } from './utils/urlParser';
+import {
+ extractByTextPattern,
+ extractTextBlocks,
+ extractHtmlBetween,
+ extractLinkText,
+ extractLinkWithPath,
+ extractHrefPattern,
+ extractFirstImage,
+ extractResponsiveImage,
+ extractLazyLoadedImage,
+ extractChapters,
+ extractChapterContent,
+ extractMultipleTypes,
+ extractSchemaOrg,
+ extractReactContent,
+ cleanHtml,
+ extractAttribute
+} from './strategies';
+import sitesConfig from './config/sites.json';
+
+export class StoryScraper {
+ private config: SitesConfig;
+ private cache: ScraperCache;
+ private rateLimiter: RateLimiter;
+
+ constructor() {
+ this.config = sitesConfig as SitesConfig;
+ this.cache = new ScraperCache(this.config.globalOptions.cacheDuration);
+ this.rateLimiter = new RateLimiter(this.config.globalOptions.rateLimitMs);
+ }
+
+ async scrapeStory(url: string): Promise {
+ try {
+ if (!UrlParser.validateUrl(url)) {
+ throw new Error(`Invalid URL: ${url}`);
+ }
+
+ const domain = UrlParser.getDomain(url);
+ const siteConfig = this.config.sites[domain];
+
+ if (!siteConfig) {
+ throw new Error(`Unsupported site: ${domain}`);
+ }
+
+ const html = await this.fetchWithCache(url);
+ const cheerio = await import('cheerio');
+ const $ = cheerio.load(html);
+
+ const story: ScrapedStory = {
+ title: await this.extractFieldWithFallback($, siteConfig.story, 'title', html),
+ author: await this.extractFieldWithFallback($, siteConfig.story, 'author', html),
+ content: await this.extractContent($, siteConfig.story, url, html),
+ sourceUrl: url
+ };
+
+ // Extract optional fields
+ if (siteConfig.story.summary) {
+ story.summary = await this.extractField($, siteConfig.story.summary, html, siteConfig.story.summaryAttribute);
+ }
+
+ if (siteConfig.story.coverImage) {
+ story.coverImage = await this.extractField($, siteConfig.story.coverImage, html, siteConfig.story.coverImageAttribute);
+ }
+
+ if (siteConfig.story.tags) {
+ const tagsResult = await this.extractTags($, siteConfig.story.tags, html, siteConfig.story.tagsAttribute);
+ if (Array.isArray(tagsResult)) {
+ story.tags = tagsResult;
+ } else if (typeof tagsResult === 'string' && tagsResult) {
+ story.tags = [tagsResult];
+ }
+ }
+
+ // Apply post-processing
+ story.title = this.applyTransforms(story.title, siteConfig.story.titleTransform);
+ story.content = await cleanHtml(story.content);
+
+ return story;
+ } catch (error) {
+ if (error instanceof Error) {
+ throw new ScraperError(
+ `Failed to scrape ${url}: ${error.message}`,
+ url,
+ error
+ );
+ }
+ throw error;
+ }
+ }
+
+ async scrapeAuthorPage(url: string): Promise {
+ try {
+ if (!UrlParser.validateUrl(url)) {
+ throw new Error(`Invalid URL: ${url}`);
+ }
+
+ const domain = UrlParser.getDomain(url);
+ const siteConfig = this.config.sites[domain];
+
+ if (!siteConfig || !siteConfig.authorPage) {
+ throw new Error(`Author page scraping not supported for: ${domain}`);
+ }
+
+ const html = await this.fetchWithCache(url);
+ const cheerio = await import('cheerio');
+ const $ = cheerio.load(html);
+
+ const storyLinks = await this.extractField($, siteConfig.authorPage.storyLinks, html);
+ const stories: ScrapedAuthorStory[] = [];
+
+ if (Array.isArray(storyLinks)) {
+ for (const link of storyLinks) {
+ const storyUrl = UrlParser.normalizeUrl(link, url);
+ try {
+ const scrapedStory = await this.scrapeStory(storyUrl);
+ stories.push({
+ url: storyUrl,
+ title: scrapedStory.title,
+ author: scrapedStory.author,
+ summary: scrapedStory.summary
+ });
+ } catch (error) {
+ console.warn(`Failed to scrape story ${storyUrl}:`, error);
+ }
+ }
+ }
+
+ return stories;
+ } catch (error) {
+ if (error instanceof Error) {
+ throw new ScraperError(
+ `Failed to scrape author page ${url}: ${error.message}`,
+ url,
+ error
+ );
+ }
+ throw error;
+ }
+ }
+
+ private async extractFieldWithFallback(
+ $: any,
+ config: any,
+ fieldName: string,
+ html: string
+ ): Promise {
+ const primarySelector = config[fieldName];
+ const fallbackSelector = config[`${fieldName}Fallback`];
+ const attribute = config[`${fieldName}Attribute`];
+ const fallbackAttribute = config[`${fieldName}FallbackAttribute`];
+
+ // Try primary selector first
+ if (primarySelector) {
+ const result = await this.extractField($, primarySelector, html, attribute);
+ if (result && result.trim()) {
+ return result.trim();
+ }
+ }
+
+ // Try fallback selector if primary failed
+ if (fallbackSelector) {
+ const result = await this.extractField($, fallbackSelector, html, fallbackAttribute);
+ if (result && result.trim()) {
+ return result.trim();
+ }
+ }
+
+ return '';
+ }
+
+ private async extractField(
+ $: any,
+ selector: string | SelectorStrategy,
+ html: string,
+ attribute?: string
+ ): Promise {
+ if (typeof selector === 'string') {
+ // Simple CSS selector - always return single value (first element)
+ const element = $(selector).first();
+ if (attribute) {
+ // Extract specific attribute instead of text
+ return element.attr(attribute) || '';
+ }
+ return element.text().trim();
+ }
+
+ // Strategy-based extraction
+ return await this.executeStrategy($, selector, html);
+ }
+
+ private async extractTags(
+ $: any,
+ selector: string | SelectorStrategy,
+ html: string,
+ attribute?: string
+ ): Promise {
+ if (typeof selector === 'string') {
+ // Simple CSS selector - collect ALL matching elements for tags
+ const elements = $(selector);
+
+ if (elements.length === 0) {
+ return [];
+ }
+
+ const results: string[] = [];
+ elements.each((_: any, elem: any) => {
+ const $elem = $(elem);
+ const value = attribute ? $elem.attr(attribute) : $elem.text().trim();
+ if (value) {
+ results.push(value);
+ }
+ });
+
+ return results;
+ }
+
+ // Strategy-based extraction for tags
+ return await this.executeStrategy($, selector, html);
+ }
+
+ private async executeStrategy(
+ $: any,
+ strategy: SelectorStrategy,
+ html: string
+ ): Promise {
+ switch (strategy.strategy) {
+ case 'text-pattern':
+ return extractByTextPattern(html, strategy as any);
+ case 'link-with-path':
+ return extractLinkWithPath($, strategy as any);
+ case 'text-blocks':
+ return extractTextBlocks($, strategy as any);
+ case 'href-pattern':
+ return extractHrefPattern($, strategy as any);
+ case 'html-between':
+ return extractHtmlBetween(html, strategy as any);
+ case 'link-text':
+ return extractLinkText($, strategy as any);
+ case 'first-image':
+ return extractFirstImage($, strategy as any);
+ case 'responsive-image':
+ return extractResponsiveImage($, strategy as any);
+ case 'lazy-loaded':
+ return extractLazyLoadedImage($, strategy as any);
+ case 'chapters':
+ return extractChapters($, strategy as any);
+ case 'chapter-content':
+ return extractChapterContent($, strategy as any);
+ case 'multiple-types':
+ return extractMultipleTypes($, strategy as any);
+ case 'schema-org':
+ return extractSchemaOrg($, strategy as any);
+ case 'react-content':
+ return extractReactContent($, strategy as any);
+ default:
+ throw new Error(`Unknown strategy: ${strategy.strategy}`);
+ }
+ }
+
+ private async extractContent(
+ $: any,
+ storyConfig: any,
+ url: string,
+ html: string
+ ): Promise {
+ let content = await this.extractField($, storyConfig.content, html);
+
+ if (storyConfig.multiPage?.enabled) {
+ const additionalPages = await this.fetchAdditionalPages(
+ $,
+ url,
+ storyConfig.multiPage
+ );
+
+ for (const pageHtml of additionalPages) {
+ const cheerioPage = await import('cheerio');
+ const $page = cheerioPage.load(pageHtml);
+ const pageContent = await this.extractField(
+ $page,
+ storyConfig.content,
+ pageHtml
+ );
+ content += '\n\n' + pageContent;
+ }
+ }
+
+ return content;
+ }
+
+ private async fetchAdditionalPages(
+ $: any,
+ baseUrl: string,
+ config: MultiPageConfig
+ ): Promise {
+ const pages: string[] = [];
+ let currentUrl = baseUrl;
+ let pageNum = 2;
+
+ while (pageNum <= (config.maxPages || 20)) {
+ let nextUrl: string | null = null;
+
+ if (config.strategy === 'url-pattern') {
+ nextUrl = UrlParser.buildPageUrl(baseUrl, pageNum, config);
+ } else if (config.nextPageSelector) {
+ const nextLink = $(config.nextPageSelector).attr('href');
+ if (nextLink) {
+ nextUrl = UrlParser.normalizeUrl(nextLink, currentUrl);
+ }
+ }
+
+ if (!nextUrl) break;
+
+ try {
+ await this.rateLimiter.throttle();
+ const html = await this.fetchWithCache(nextUrl);
+ pages.push(html);
+ currentUrl = nextUrl;
+ pageNum++;
+ } catch (error) {
+ console.error(`Failed to fetch page ${pageNum}:`, error);
+ break;
+ }
+ }
+
+ return pages;
+ }
+
+ private async fetchWithCache(url: string): Promise {
+ const cached = this.cache.get(url);
+ if (cached) {
+ return cached;
+ }
+
+ await this.rateLimiter.throttle();
+
+ const response = await fetch(url, {
+ headers: {
+ 'User-Agent': this.config.globalOptions.userAgent,
+ },
+ signal: AbortSignal.timeout(this.config.globalOptions.timeout)
+ });
+
+ if (!response.ok) {
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
+ }
+
+ const html = await response.text();
+ this.cache.set(url, html);
+
+ return html;
+ }
+
+ private applyTransforms(text: string, transform?: string): string {
+ if (!transform) return text;
+
+ if (transform.startsWith('remove-suffix:')) {
+ const suffix = transform.substring('remove-suffix:'.length).trim();
+ return text.replace(new RegExp(`${suffix}$`, 'i'), '').trim();
+ }
+
+ return text;
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/strategies/contentCleaner.ts b/frontend/src/lib/scraper/strategies/contentCleaner.ts
new file mode 100644
index 0000000..c41aaf0
--- /dev/null
+++ b/frontend/src/lib/scraper/strategies/contentCleaner.ts
@@ -0,0 +1,164 @@
+// Dynamic cheerio import used to avoid client-side bundling issues
+// Using any type for CheerioAPI to prevent bundling issues
+import {
+ ChaptersStrategy,
+ ChapterContentStrategy,
+ MultipleTypesStrategy,
+ SchemaOrgStrategy,
+ ReactContentStrategy
+} from '../types';
+
+export function extractChapters(
+ $: any,
+ config: ChaptersStrategy
+): string {
+ // Check for multiple chapters first
+ if (config.chaptersWrapper) {
+ const chaptersWrapper = $(config.chaptersWrapper);
+ if (chaptersWrapper.length > 0) {
+ const chapters = chaptersWrapper.find(config.chapterSelector);
+ if (chapters.length > 1) {
+ // Multiple chapters - combine them
+ let content = '';
+ chapters.each((_: any, elem: any) => {
+ content += $(elem).html() + '\n\n';
+ });
+ return content.trim();
+ }
+ }
+ }
+
+ // Single chapter fallback
+ if (config.singleChapter) {
+ const singleChapter = $(config.singleChapter);
+ if (singleChapter.length > 0) {
+ return singleChapter.html() || '';
+ }
+ }
+
+ // Direct chapter selector fallback
+ const chapter = $(config.chapterSelector).first();
+ return chapter.html() || '';
+}
+
+export function extractChapterContent(
+ $: any,
+ config: ChapterContentStrategy
+): string {
+ const content = $(config.selector);
+
+ // Remove cleanup selectors
+ if (config.cleanupSelectors) {
+ config.cleanupSelectors.forEach(selector => {
+ content.find(selector).remove();
+ });
+ }
+
+ return content.html() || '';
+}
+
+export function extractMultipleTypes(
+ $: any,
+ config: MultipleTypesStrategy
+): string[] {
+ const tags: string[] = [];
+
+ Object.entries(config.selectors).forEach(([type, selector]) => {
+ $(selector).each((_: any, elem: any) => {
+ const tag = $(elem).text().trim();
+ if (tag) {
+ tags.push(`${type}: ${tag}`);
+ }
+ });
+ });
+
+ return tags;
+}
+
+export function extractSchemaOrg(
+ $: any,
+ config: SchemaOrgStrategy
+): string {
+ // Look for JSON-LD first
+ $('script[type="application/ld+json"]').each((_: any, elem: any) => {
+ try {
+ const data = JSON.parse($(elem).html() || '');
+ if (data['@type'] === config.schemaType ||
+ (Array.isArray(data) && data.some(item => item['@type'] === config.schemaType))) {
+ const item = Array.isArray(data) ?
+ data.find(item => item['@type'] === config.schemaType) : data;
+ if (item && item[config.property]) {
+ return item[config.property];
+ }
+ }
+ } catch (e) {
+ // Invalid JSON, continue
+ }
+ });
+
+ // Fallback to selector
+ if (config.fallbackSelector) {
+ return $(config.fallbackSelector).first().text().trim();
+ }
+
+ return '';
+}
+
+export function extractReactContent(
+ $: any,
+ config: ReactContentStrategy
+): string {
+ // This is a simplified version - full React content extraction
+ // would require JavaScript execution or API access
+
+ const contentElements = $(config.paragraphSelector);
+ let content = '';
+
+ contentElements.each((_: any, elem: any) => {
+ const $elem = $(elem);
+ if ($elem.hasClass(config.contentClass)) {
+ content += $elem.html() + '\n\n';
+ }
+ });
+
+ return content.trim();
+}
+
+export async function cleanHtml(html: string): Promise {
+ // Basic HTML cleaning - remove scripts, styles, and dangerous elements
+ const cheerio = await import('cheerio');
+ const $ = cheerio.load(html, {
+ // Preserve self-closing tags like
+ xmlMode: false,
+ decodeEntities: false
+ });
+
+ // Remove dangerous elements
+ $('script, style, iframe, embed, object').remove();
+
+ // Remove empty paragraphs and divs (but preserve
tags)
+ $('p:empty, div:empty').not(':has(br)').remove();
+
+ // Clean up excessive whitespace in text nodes only, preserve
tags
+ $('*').each((_, elem) => {
+ const $elem = $(elem);
+ if (elem.type === 'text') {
+ const text = $elem.text();
+ if (text && text.trim() !== text) {
+ $elem.replaceWith(text.trim());
+ }
+ }
+ });
+
+ // Return HTML with proper self-closing tag format
+ return $.html() || '';
+}
+
+export function extractAttribute(
+ $: any,
+ selector: string,
+ attribute: string
+): string {
+ const element = $(selector).first();
+ return element.attr(attribute) || '';
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/strategies/index.ts b/frontend/src/lib/scraper/strategies/index.ts
new file mode 100644
index 0000000..33e32d6
--- /dev/null
+++ b/frontend/src/lib/scraper/strategies/index.ts
@@ -0,0 +1,3 @@
+export * from './textExtractor';
+export * from './linkExtractor';
+export * from './contentCleaner';
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/strategies/linkExtractor.ts b/frontend/src/lib/scraper/strategies/linkExtractor.ts
new file mode 100644
index 0000000..b8117b3
--- /dev/null
+++ b/frontend/src/lib/scraper/strategies/linkExtractor.ts
@@ -0,0 +1,98 @@
+// Dynamic cheerio import used to avoid client-side bundling issues
+// Using any type for CheerioAPI to prevent bundling issues
+import {
+ LinkWithPathStrategy,
+ HrefPatternStrategy,
+ FirstImageStrategy,
+ ResponsiveImageStrategy,
+ LazyLoadedStrategy
+} from '../types';
+
+export function extractLinkWithPath(
+ $: any,
+ config: LinkWithPathStrategy
+): string {
+ let searchScope = config.searchWithin ? $(config.searchWithin) : $('body');
+
+ const links = searchScope.find('a');
+
+ for (let i = 0; i < links.length; i++) {
+ const link = links.eq(i);
+ const href = link.attr('href');
+
+ if (href && href.includes(config.pathContains)) {
+ return link.text().trim();
+ }
+ }
+
+ return '';
+}
+
+export function extractHrefPattern(
+ $: any,
+ config: HrefPatternStrategy
+): string[] {
+ let searchScope = config.searchWithin ? $(config.searchWithin) : $('body');
+
+ const pattern = new RegExp(config.pattern);
+ const links: string[] = [];
+
+ searchScope.find('a').each((_: any, elem: any) => {
+ const href = $(elem).attr('href');
+ if (href && pattern.test(href)) {
+ links.push(href);
+ }
+ });
+
+ return links;
+}
+
+export function extractFirstImage(
+ $: any,
+ config: FirstImageStrategy
+): string {
+ let searchScope = config.searchWithin ? $(config.searchWithin) : $('body');
+
+ const img = searchScope.find('img').first();
+ return img.attr(config.attribute) || '';
+}
+
+export function extractResponsiveImage(
+ $: any,
+ config: ResponsiveImageStrategy
+): string {
+ const img = $(config.selector).first();
+
+ if (config.selectLargest && config.srcsetAttribute) {
+ const srcset = img.attr(config.srcsetAttribute);
+ if (srcset) {
+ // Parse srcset and return the largest image
+ const sources = srcset.split(',').map((src: string) => {
+ const parts = src.trim().split(' ');
+ const url = parts[0];
+ const descriptor = parts[1] || '1x';
+ const width = descriptor.includes('w') ?
+ parseInt(descriptor.replace('w', '')) :
+ descriptor.includes('x') ?
+ parseInt(descriptor.replace('x', '')) * 100 : 100;
+ return { url, width };
+ });
+
+ const largest = sources.reduce((prev: any, current: any) =>
+ prev.width > current.width ? prev : current
+ );
+
+ return largest.url;
+ }
+ }
+
+ return img.attr('src') || '';
+}
+
+export function extractLazyLoadedImage(
+ $: any,
+ config: LazyLoadedStrategy
+): string {
+ const img = $(config.selector).first();
+ return img.attr(config.attribute) || img.attr('src') || '';
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/strategies/textExtractor.ts b/frontend/src/lib/scraper/strategies/textExtractor.ts
new file mode 100644
index 0000000..0113197
--- /dev/null
+++ b/frontend/src/lib/scraper/strategies/textExtractor.ts
@@ -0,0 +1,144 @@
+import 'server-only';
+
+// Dynamic cheerio import used to avoid client-side bundling issues
+// Using any type for CheerioAPI to prevent bundling issues
+import {
+ TextPatternStrategy,
+ TextBlockStrategy,
+ HtmlBetweenStrategy,
+ LinkTextStrategy
+} from '../types';
+
+export function extractByTextPattern(
+ html: string,
+ config: TextPatternStrategy
+): string {
+ let searchContent = html;
+
+ // Limit search scope if specified
+ if (config.searchAfter) {
+ const afterIndex = html.indexOf(config.searchAfter);
+ if (afterIndex !== -1) {
+ searchContent = html.substring(afterIndex);
+ }
+ }
+
+ if (config.searchBefore) {
+ const beforeIndex = searchContent.indexOf(config.searchBefore);
+ if (beforeIndex !== -1) {
+ searchContent = searchContent.substring(0, beforeIndex);
+ }
+ }
+
+ const regex = new RegExp(config.pattern, 'i');
+ const match = searchContent.match(regex);
+ return match ? match[config.group || 1].trim() : '';
+}
+
+export function extractTextBlocks(
+ $: any,
+ config: TextBlockStrategy
+): string {
+ const blocks: Array<{element: any, text: string}> = [];
+
+ // Remove excluded elements first
+ if (config.excludeSelectors) {
+ config.excludeSelectors.forEach(selector => {
+ $(selector).remove();
+ });
+ }
+
+ $('*').each((_: any, elem: any) => {
+ const $elem = $(elem);
+ const text = $elem.clone().children().remove().end().text().trim();
+
+ if (text.length >= (config.minLength || 500)) {
+ blocks.push({ element: elem, text });
+ }
+ });
+
+ // Find the block that likely contains story content
+ const storyBlock = blocks.find(block => {
+ if (config.containerHints && config.containerHints.length > 0) {
+ const hasHints = config.containerHints.some(hint =>
+ $(block.element).attr('class')?.includes(hint) ||
+ $(block.element).attr('id')?.includes(hint)
+ );
+ return hasHints;
+ }
+ return blocks.length === 1;
+ });
+
+ if (storyBlock) {
+ return $(storyBlock.element).html() || '';
+ }
+
+ // Fallback to largest block
+ const largestBlock = blocks.reduce((prev, current) =>
+ prev.text.length > current.text.length ? prev : current
+ );
+
+ return largestBlock ? $(largestBlock.element).html() || '' : '';
+}
+
+export function extractHtmlBetween(
+ html: string,
+ config: HtmlBetweenStrategy
+): string {
+ const startIndex = html.indexOf(config.startMarker);
+ if (startIndex === -1) return '';
+
+ const contentStart = config.includeStart ?
+ startIndex :
+ startIndex + config.startMarker.length;
+
+ const endIndex = html.indexOf(config.endMarker, contentStart);
+ if (endIndex === -1) {
+ return html.substring(contentStart);
+ }
+
+ return html.substring(contentStart, endIndex).trim();
+}
+
+export function extractLinkText(
+ $: any,
+ config: LinkTextStrategy
+): string {
+ let searchScope = config.searchWithin ? $(config.searchWithin) : $('body');
+
+ // Look for links near the specified text patterns
+ let foundText = '';
+
+ config.nearText.forEach(text => {
+ if (foundText) return; // Already found
+
+ searchScope.find('*').each((_: any, elem: any) => {
+ const $elem = $(elem);
+ const elemText = $elem.text().toLowerCase();
+
+ if (elemText.includes(text.toLowerCase())) {
+ // Look for nearby links
+ const $link = $elem.find('a').first();
+ if ($link.length) {
+ foundText = $link.text().trim();
+ return false; // Break out of each
+ }
+
+ // Check if the element itself is a link
+ if ($elem.is('a')) {
+ foundText = $elem.text().trim();
+ return false;
+ }
+
+ // Look for links in the next few siblings
+ const $siblings = $elem.nextAll().slice(0, 3);
+ $siblings.find('a').first().each((_: any, link: any) => {
+ foundText = $(link).text().trim();
+ return false;
+ });
+ }
+ });
+ });
+
+ return foundText;
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/types.ts b/frontend/src/lib/scraper/types.ts
new file mode 100644
index 0000000..538ed09
--- /dev/null
+++ b/frontend/src/lib/scraper/types.ts
@@ -0,0 +1,248 @@
+export interface SiteConfig {
+ story: StorySelectors;
+ authorPage: AuthorPageSelectors;
+}
+
+export interface StorySelectors {
+ title: string | SelectorStrategy;
+ author: string | SelectorStrategy;
+ content: string | SelectorStrategy;
+ summary?: string | SelectorStrategy;
+ coverImage?: string | SelectorStrategy;
+ tags?: string | SelectorStrategy;
+ multiPage?: MultiPageConfig;
+ titleFallback?: string;
+ titleFallbackAttribute?: string;
+ titleTransform?: string;
+ summaryAttribute?: string;
+ coverImageAttribute?: string;
+ tagsAttribute?: string;
+}
+
+export interface AuthorPageSelectors {
+ storyLinks: string | SelectorStrategy;
+ pagination?: PaginationConfig;
+ linkPrefix?: string;
+ filterStrategy?: string;
+ requiresChildElement?: string;
+ requiresNavigation?: NavigationConfig;
+ metadata?: MetadataConfig;
+ additionalInfo?: AdditionalInfoConfig;
+}
+
+export interface SelectorStrategy {
+ strategy: string;
+ [key: string]: any;
+}
+
+export interface MultiPageConfig {
+ enabled: boolean;
+ strategy: 'url-pattern' | 'next-link' | 'chapter-navigation' | 'chapter-dropdown' | 'table-of-contents' | 'api-based';
+ nextPageSelector?: string;
+ pageParam?: string;
+ maxPages?: number;
+ chapterListSelector?: string;
+ chapterSelector?: string;
+ urlPattern?: string;
+ tocSelector?: string;
+ requiresAuth?: boolean;
+ apiPattern?: string;
+ tocApiPattern?: string;
+}
+
+export interface PaginationConfig {
+ enabled: boolean;
+ nextPageSelector: string;
+}
+
+export interface NavigationConfig {
+ enabled: boolean;
+ clickText: string;
+ waitMs: number;
+}
+
+export interface MetadataConfig {
+ strategy: string;
+ metadataSelector: string;
+ parsePattern: string;
+}
+
+export interface AdditionalInfoConfig {
+ strategy: string;
+ statsSelector: string;
+ extractStats: string[];
+}
+
+export interface ScrapedStory {
+ title: string;
+ author: string;
+ content: string;
+ summary?: string;
+ coverImage?: string;
+ tags?: string[];
+ sourceUrl: string;
+}
+
+export interface ScrapedAuthorStory {
+ url: string;
+ title: string;
+ author: string;
+ summary?: string;
+}
+
+export interface SitesConfig {
+ sites: Record;
+ strategies: Record;
+ globalOptions: GlobalOptions;
+ siteNotes?: Record;
+}
+
+export interface StrategyDescription {
+ description: string;
+ implementation: string;
+}
+
+export interface GlobalOptions {
+ userAgent: string;
+ timeout: number;
+ retryAttempts: number;
+ rateLimitMs: number;
+ cacheDuration?: number;
+ javascriptTimeout?: number;
+}
+
+export interface SiteNotes {
+ warning?: string;
+ note?: string;
+ rateLimit?: string;
+ requiresAuth?: string;
+}
+
+// Strategy-specific interfaces
+export interface TextPatternStrategy extends SelectorStrategy {
+ strategy: 'text-pattern';
+ pattern: string;
+ group?: number;
+ searchAfter?: string;
+ searchBefore?: string;
+}
+
+export interface LinkWithPathStrategy extends SelectorStrategy {
+ strategy: 'link-with-path';
+ pathContains: string;
+ searchWithin?: string;
+}
+
+export interface TextBlockStrategy extends SelectorStrategy {
+ strategy: 'text-blocks';
+ minLength?: number;
+ containerHints?: string[];
+ excludeSelectors?: string[];
+}
+
+export interface HrefPatternStrategy extends SelectorStrategy {
+ strategy: 'href-pattern';
+ pattern: string;
+ searchWithin?: string;
+}
+
+export interface HtmlBetweenStrategy extends SelectorStrategy {
+ strategy: 'html-between';
+ startMarker: string;
+ endMarker: string;
+ includeStart?: boolean;
+}
+
+export interface ChaptersStrategy extends SelectorStrategy {
+ strategy: 'chapters';
+ chapterSelector: string;
+ chaptersWrapper?: string;
+ singleChapter?: string;
+}
+
+export interface MultipleTypesStrategy extends SelectorStrategy {
+ strategy: 'multiple-types';
+ selectors: Record;
+}
+
+export interface LinkTextStrategy extends SelectorStrategy {
+ strategy: 'link-text';
+ nearText: string[];
+ searchWithin?: string;
+}
+
+export interface FirstImageStrategy extends SelectorStrategy {
+ strategy: 'first-image';
+ searchWithin: string;
+ attribute: string;
+}
+
+export interface SchemaOrgStrategy extends SelectorStrategy {
+ strategy: 'schema-org';
+ schemaType: string;
+ property: string;
+ fallbackSelector?: string;
+}
+
+export interface ReactContentStrategy extends SelectorStrategy {
+ strategy: 'react-content';
+ contentClass: string;
+ paragraphSelector: string;
+ requiresJavaScript: boolean;
+}
+
+export interface ResponsiveImageStrategy extends SelectorStrategy {
+ strategy: 'responsive-image';
+ selector: string;
+ srcsetAttribute: string;
+ selectLargest: boolean;
+}
+
+export interface LazyLoadedStrategy extends SelectorStrategy {
+ strategy: 'lazy-loaded';
+ selector: string;
+ attribute: string;
+}
+
+export interface ChapterContentStrategy extends SelectorStrategy {
+ strategy: 'chapter-content';
+ selector: string;
+ cleanupSelectors?: string[];
+}
+
+export interface DataAttributesStrategy extends SelectorStrategy {
+ strategy: 'data-attributes';
+ statsSelector: string;
+ extractStats: string[];
+}
+
+export interface SiblingTextStrategy extends SelectorStrategy {
+ strategy: 'sibling-text';
+ metadataSelector: string;
+ parsePattern: string;
+}
+
+export interface ApiBasedStrategy extends SelectorStrategy {
+ strategy: 'api-based';
+ apiPattern: string;
+ tocApiPattern?: string;
+ requiresAuth: boolean;
+}
+
+export interface InfiniteScrollStrategy extends SelectorStrategy {
+ strategy: 'infinite-scroll';
+ initialSelector: string;
+ apiEndpoint: string;
+ requiresJavaScript: boolean;
+}
+
+export class ScraperError extends Error {
+ constructor(
+ message: string,
+ public url: string,
+ public originalError?: Error
+ ) {
+ super(message);
+ this.name = 'ScraperError';
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/utils/cache.ts b/frontend/src/lib/scraper/utils/cache.ts
new file mode 100644
index 0000000..6eccc85
--- /dev/null
+++ b/frontend/src/lib/scraper/utils/cache.ts
@@ -0,0 +1,35 @@
+export class ScraperCache {
+ private cache: Map = new Map();
+ private ttl: number;
+
+ constructor(ttlMs: number = 300000) { // 5 minutes default
+ this.ttl = ttlMs;
+ }
+
+ get(key: string): any | null {
+ const entry = this.cache.get(key);
+ if (!entry) return null;
+
+ if (Date.now() - entry.timestamp > this.ttl) {
+ this.cache.delete(key);
+ return null;
+ }
+
+ return entry.data;
+ }
+
+ set(key: string, data: any): void {
+ this.cache.set(key, {
+ data,
+ timestamp: Date.now()
+ });
+ }
+
+ clear(): void {
+ this.cache.clear();
+ }
+
+ size(): number {
+ return this.cache.size;
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/utils/rateLimit.ts b/frontend/src/lib/scraper/utils/rateLimit.ts
new file mode 100644
index 0000000..e1d95a3
--- /dev/null
+++ b/frontend/src/lib/scraper/utils/rateLimit.ts
@@ -0,0 +1,23 @@
+export class RateLimiter {
+ private lastRequest: number = 0;
+ private minDelay: number;
+
+ constructor(minDelayMs: number = 1000) {
+ this.minDelay = minDelayMs;
+ }
+
+ async throttle(): Promise {
+ const now = Date.now();
+ const timeSinceLastRequest = now - this.lastRequest;
+
+ if (timeSinceLastRequest < this.minDelay) {
+ await this.delay(this.minDelay - timeSinceLastRequest);
+ }
+
+ this.lastRequest = Date.now();
+ }
+
+ private delay(ms: number): Promise {
+ return new Promise(resolve => setTimeout(resolve, ms));
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/lib/scraper/utils/urlParser.ts b/frontend/src/lib/scraper/utils/urlParser.ts
new file mode 100644
index 0000000..f0c8ed4
--- /dev/null
+++ b/frontend/src/lib/scraper/utils/urlParser.ts
@@ -0,0 +1,61 @@
+export class UrlParser {
+ static getDomain(url: string): string {
+ try {
+ const urlObj = new URL(url);
+ return urlObj.hostname.replace(/^www\./, '');
+ } catch (error) {
+ throw new Error(`Invalid URL: ${url}`);
+ }
+ }
+
+ static validateUrl(url: string): boolean {
+ try {
+ const urlObj = new URL(url);
+ return urlObj.protocol === 'http:' || urlObj.protocol === 'https:';
+ } catch {
+ return false;
+ }
+ }
+
+ static buildPageUrl(baseUrl: string, pageNum: number, config: any): string {
+ try {
+ const urlObj = new URL(baseUrl);
+ if (config.pageParam) {
+ urlObj.searchParams.set(config.pageParam, pageNum.toString());
+ } else if (config.urlPattern) {
+ // Replace {page} or similar patterns in URL
+ return config.urlPattern.replace(/\{page\}/g, pageNum.toString());
+ }
+ return urlObj.toString();
+ } catch (error) {
+ throw new Error(`Failed to build page URL: ${error}`);
+ }
+ }
+
+ static normalizeUrl(url: string, baseUrl?: string): string {
+ try {
+ if (url.startsWith('http://') || url.startsWith('https://')) {
+ return url;
+ }
+
+ if (baseUrl) {
+ return new URL(url, baseUrl).toString();
+ }
+
+ return url;
+ } catch (error) {
+ throw new Error(`Failed to normalize URL: ${url}`);
+ }
+ }
+
+ static extractDomainConfig(url: string, sitesConfig: any): any {
+ const domain = this.getDomain(url);
+ const config = sitesConfig.sites[domain];
+
+ if (!config) {
+ throw new Error(`Unsupported site: ${domain}`);
+ }
+
+ return config;
+ }
+}
\ No newline at end of file
diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo
index fb6c431..edaf359 100644
--- a/frontend/tsconfig.tsbuildinfo
+++ b/frontend/tsconfig.tsbuildinfo
@@ -1 +1 @@
-{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/static-generation-bailout.d.ts","./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.d.ts","./node_modules/next/dist/client/components/searchparams-bailout-proxy.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-path.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-tag.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/axios/index.d.ts","./src/types/api.ts","./src/lib/api.ts","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/dompurify/dist/purify.es.d.mts","./src/lib/sanitization.ts","./src/lib/settings.ts","./src/lib/theme.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/contexts/authcontext.tsx","./src/app/layout.tsx","./src/components/ui/loadingspinner.tsx","./src/app/page.tsx","./src/components/ui/button.tsx","./src/components/layout/header.tsx","./src/components/layout/protectedroute.tsx","./src/components/layout/applayout.tsx","./src/components/ui/input.tsx","./src/components/stories/taginput.tsx","./src/components/stories/richtexteditor.tsx","./node_modules/file-selector/dist/file.d.ts","./node_modules/file-selector/dist/file-selector.d.ts","./node_modules/file-selector/dist/index.d.ts","./node_modules/react-dropzone/typings/react-dropzone.d.ts","./src/components/ui/imageupload.tsx","./src/app/add-story/page.tsx","./src/app/authors/page.tsx","./src/components/stories/storycard.tsx","./src/app/authors/[id]/page.tsx","./src/app/authors/[id]/edit/page.tsx","./src/components/collections/collectioncard.tsx","./src/components/collections/collectiongrid.tsx","./src/components/stories/tagfilter.tsx","./src/app/collections/page.tsx","./src/components/collections/storyreorderlist.tsx","./src/components/collections/addtocollectionmodal.tsx","./src/components/collections/collectiondetailview.tsx","./src/app/collections/[id]/page.tsx","./src/components/collections/collectionform.tsx","./src/app/collections/[id]/edit/page.tsx","./src/components/collections/collectionreadingview.tsx","./src/app/collections/[id]/read/[storyid]/page.tsx","./src/app/collections/new/page.tsx","./src/components/stories/storyselectiontoolbar.tsx","./src/components/stories/storymultiselect.tsx","./src/app/library/page.tsx","./src/app/login/page.tsx","./src/app/settings/page.tsx","./src/components/stories/storyrating.tsx","./src/app/stories/[id]/page.tsx","./src/app/stories/[id]/detail/page.tsx","./src/app/stories/[id]/edit/page.tsx","./.next/types/app/page.ts","./.next/types/app/add-story/page.ts","./.next/types/app/authors/page.ts","./.next/types/app/authors/[id]/page.ts","./.next/types/app/authors/[id]/edit/page.ts","./.next/types/app/collections/page.ts","./.next/types/app/collections/[id]/page.ts","./.next/types/app/collections/[id]/edit/page.ts","./.next/types/app/collections/[id]/read/[storyid]/page.ts","./.next/types/app/collections/new/page.ts","./.next/types/app/library/page.ts","./.next/types/app/login/page.ts","./.next/types/app/settings/page.ts","./.next/types/app/stories/[id]/page.ts","./.next/types/app/stories/[id]/detail/page.ts","./.next/types/app/stories/[id]/edit/page.ts","./node_modules/@types/trusted-types/index.d.ts","./node_modules/@types/dompurify/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[64,106,304,378],[64,106,304,382],[64,106,304,381],[64,106,304,379],[64,106,304,392],[64,106,304,390],[64,106,304,394],[64,106,304,395],[64,106,304,386],[64,106,304,398],[64,106,304,399],[64,106,304,365],[64,106,304,400],[64,106,304,403],[64,106,304,404],[64,106,304,402],[64,106,348,349],[64,106],[64,106,421],[64,103,106],[64,105,106],[106],[64,106,111,140],[64,106,107,112,118,119,126,137,148],[64,106,107,108,118,126],[59,60,61,64,106],[64,106,109,149],[64,106,110,111,119,127],[64,106,111,137,145],[64,106,112,114,118,126],[64,105,106,113],[64,106,114,115],[64,106,116,118],[64,105,106,118],[64,106,118,119,120,137,148],[64,106,118,119,120,133,137,140],[64,101,106],[64,106,114,118,121,126,137,148],[64,106,118,119,121,122,126,137,145,148],[64,106,121,123,137,145,148],[62,63,64,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[64,106,118,124],[64,106,125,148,153],[64,106,114,118,126,137],[64,106,127],[64,106,128],[64,105,106,129],[64,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[64,106,131],[64,106,132],[64,106,118,133,134],[64,106,133,135,149,151],[64,106,118,137,138,140],[64,106,139,140],[64,106,137,138],[64,106,140],[64,106,141],[64,103,106,137,142],[64,106,118,143,144],[64,106,143,144],[64,106,111,126,137,145],[64,106,146],[64,106,126,147],[64,106,121,132,148],[64,106,111,149],[64,106,137,150],[64,106,125,151],[64,106,152],[64,106,118,120,129,137,140,148,151,153],[64,106,137,154],[52,64,106,159,160,161],[52,64,106,159,160],[52,64,106],[52,56,64,106,158,305,344],[52,56,64,106,157,305,344],[49,50,51,64,106],[64,106,354],[64,106,373],[64,106,373,374],[57,64,106],[64,106,309],[64,106,311,312,313,314],[64,106,316],[64,106,164,173,180,305],[64,106,164,171,175,182],[64,106,173,282],[64,106,230,240,253,347],[64,106,261],[64,106,164,173,179,217,227,280,347],[64,106,179,347],[64,106,173,227,228,347],[64,106,173,179,217,347],[64,106,347],[64,106,179,180,347],[64,105,106,155],[52,64,106,241,242,258],[52,64,106,158],[52,64,106,241,256],[64,106,237,259,332,333],[64,106,194],[64,105,106,155,194,231,232,233],[52,64,106,256,259],[64,106,256,258],[52,64,106,256,257,259],[64,105,106,155,174,187,188],[52,64,106,165,326],[52,64,106,148,155],[52,64,106,179,215],[52,64,106,179],[64,106,213,218],[52,64,106,214,308],[64,106,359],[52,56,64,106,121,155,157,158,305,342,343],[64,106,163],[64,106,298,299,300,301,302,303],[64,106,300],[52,64,106,306,308],[52,64,106,308],[64,106,121,155,174,308],[64,106,121,155,172,189,190,205,234,235,255,256],[64,106,188,189,234,243,244,245,246,247,248,249,250,251,252,347],[52,64,106,132,155,173,187,205,207,209,255,305,347],[64,106,121,155,174,175,194,195,231],[64,106,121,155,173,175],[64,106,121,137,155,172,174,175],[64,106,121,132,148,155,163,165,172,173,174,175,179,182,184,186,187,190,191,199,201,204,205,207,208,209,256,264,266,269,271,272,273,305],[64,106,121,137,155],[64,106,164,165,166,172,305,308,347],[64,106,173],[64,106,121,137,148,155,169,281,283,284,347],[64,106,132,148,155,169,172,174,187,198,199,201,202,203,207,269,274,276,294,295],[64,106,173,177,187],[64,106,172,173],[64,106,191,270],[64,106,270],[64,106,168,169],[64,106,168,210],[64,106,168],[64,106,170,191,268],[64,106,267],[64,106,169,170],[64,106,170,265],[64,106,169],[64,106,255],[64,106,121,155,172,190,206,225,230,236,239,254,256],[64,106,219,220,221,222,223,224,237,238,259,306],[64,106,263],[64,106,121,155,172,190,206,211,260,262,264,305,308],[64,106,121,148,155,165,172,173,186],[64,106,229],[64,106,121,155,287,293],[64,106,184,186,308],[64,106,288,294,297],[64,106,121,177,287,289],[64,106,164,173,184,208,291],[64,106,121,155,173,179,208,277,285,286,290,291,292],[64,106,156,205,206,305,308],[64,106,121,132,148,155,170,172,174,177,181,182,184,186,187,190,198,199,201,202,203,204,207,266,274,275,308],[64,106,121,155,172,173,177,276,296],[64,106,121,155,182,189],[52,64,106,121,132,155,163,165,172,175,190,204,205,207,209,263,305,308],[64,106,121,132,148,155,167,170,171,174],[64,106,185],[64,106,121,155,182,190],[64,106,121,155,173,191],[64,106,121,155],[64,106,193],[64,106,195],[64,106,173,192,194,198],[64,106,173,192,194],[64,106,121,155,167,173,174,195,196,197],[52,64,106,256,257,258],[64,106,226],[52,64,106,165],[52,64,106,201],[52,64,106,156,204,209,305,308],[64,106,165,326,327],[52,64,106,218],[52,64,106,132,148,155,163,212,214,216,217,308],[64,106,174,179,201],[64,106,132,155],[64,106,200],[52,64,106,119,121,132,155,163,218,227,305,306,307],[48,52,53,54,55,64,106,157,158,305,344],[64,106,111],[64,106,278,279],[64,106,278],[64,106,318],[64,106,320],[64,106,322],[64,106,360],[64,106,324],[64,106,328],[56,58,64,106,305,310,315,317,319,321,323,325,329,331,335,336,338,345,346,347],[64,106,330],[64,106,334],[64,106,214],[64,106,337],[64,105,106,195,196,197,198,339,340,341,344],[64,106,155],[52,56,64,106,121,123,132,155,157,158,159,161,163,175,297,304,308,344],[52,64,106,375],[64,73,77,106,148],[64,73,106,137,148],[64,68,106],[64,70,73,106,145,148],[64,106,126,145],[64,68,106,155],[64,70,73,106,126,148],[64,65,66,69,72,106,118,137,148],[64,73,80,106],[64,65,71,106],[64,73,94,95,106],[64,69,73,106,140,148,155],[64,94,106,155],[64,67,68,106,155],[64,73,106],[64,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,106],[64,73,88,106],[64,73,80,81,106],[64,71,73,81,82,106],[64,72,106],[64,65,68,73,106],[64,73,77,81,82,106],[64,77,106],[64,71,73,76,106,148],[64,65,70,73,80,106],[64,106,137],[64,68,73,94,106,153,155],[52,64,106,335,353,362,366,369,370,371,372,377],[52,64,106,329,335,352,353,364,366,369,370,377],[52,64,106,329,331,335,352,353,364,366,369,380],[52,64,106,329,331,352,353,364,366,369,370],[52,64,106,335,352,353,364,369,391],[52,64,106,335,352,353,364,369,389],[52,64,106,335,352,353,364,369,393],[52,64,106,335,352,353,369,391],[52,64,106,352,353,364,366,369,370,384,385],[64,106,348,361,362],[52,64,106,352,353,364,366,369,370,385,397],[52,64,106,329,335,358,362,366,370],[52,64,106,335,362,364],[52,64,106,353,358,366,369],[52,64,106,329,331,335,352,353,357,364,366,369],[52,64,106,335,352,353,364,366,369,370,371,372,377],[52,64,106,331,335,352,353,356,364,366,401],[52,64,106,352,353,364,366,370],[64,106,331,352,353],[52,64,106,331,335,352,353,364,366,387,388],[64,106,352,383],[64,106,331,352,366],[52,64,106,331,352,353,366],[64,106,367,368],[52,64,106,329,331,335,358,362,366],[52,64,106,356,366,370],[52,64,106,329,331,352,353,366],[52,64,106,352,380,396],[52,64,106,352,353,364,366],[64,106,352],[52,64,106,353],[52,64,106,331,364],[52,64,106,329,376],[52,64,106,335,353,356],[64,106,351,352],[64,106,353,355]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"472f5aab7edc498a0a761096e8e254c5bc3323d07a1e7f5f8b8ec0d6395b60a0","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0dbcebe2126d03936c70545e96a6e41007cf065be38a1ce4d32a39fcedefead4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"3609e455ffcba8176c8ce0aa57f8258fe10cf03987e27f1fab68f702b4426521","impliedFormat":1},{"version":"d1bd4e51810d159899aad1660ccb859da54e27e08b8c9862b40cd36c1d9ff00f","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"3b8f725c3d5ffb64bf876c87409686875102c6f7450b268d8f5188b6920f7c25","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"37f7b8e560025858aae5195ca74a3e95ecd55591e2babc0acd57bc1dab4ea8ea","impliedFormat":1},{"version":"e2d5483c9a79900ba9d6012135f18b662b3ca1d33fde4f5e39b71f74e47d6331","impliedFormat":1},{"version":"22b9fab85e85b95f6378b5a2bd43c9d2e15106d760e0e58111c416fe224cc76f","impliedFormat":1},{"version":"fc46f093d1b754a8e3e34a071a1dd402f42003927676757a9a10c6f1d195a35b","impliedFormat":1},{"version":"b7b3258e8d47333721f9d4c287361d773f8fa88e52d1148812485d9fc06d2577","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"49e567e0aa388ab416eeb7a7de9bce5045a7b628bad18d1f6fa9d3eacee7bc3f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"87eaecac33864ecec8972b1773c5d897f0f589deb7ac8fe0dcdf4b721b06e28d","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"4c91cc1ab59b55d880877ccf1999ded0bb2ebc8e3a597c622962d65bf0e76be8","impliedFormat":1},{"version":"fa1ea09d3e073252eccff2f6630a4ce5633cc2ff963ba672dd8fd6783108ea83","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"309816cd6e597f4d4b080bc5e36215c6b78196f744d578adf61589bee5fd7eea","impliedFormat":1},{"version":"bdb44eca306ff5b62bcf2b4e70e96a40987e018029d95565e2f234aad80830cf","impliedFormat":1},{"version":"edaa0bbf2891b17f904a67aef7f9d53371c993fe3ff6dec708c2aff6083b01af","impliedFormat":1},{"version":"89aece12f9cd6d736ae7c350800f257a2363f6322ae8f998da73153fb405d8af","impliedFormat":1},{"version":"d23518a5f155f1a3e07214baf0295687507122ae2e6e9bd5e772551ebd4b3157","impliedFormat":1},{"version":"aa9a92be255ec97f669ea89678fafcbd35d165f65b68ff22685263f6eaeb3c9c","impliedFormat":1},{"version":"fa8b514302736759e491d3df074a61f54ed1a6a69b4aadee05dbcdda53f881c3","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"c9d71f340f1a4576cd2a572f73a54dc7212161fa172dfe3dea64ac627c8fcb50","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"6c66f6f7d9ff019a644ff50dd013e6bf59be4bf389092948437efa6b77dc8f9a","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"ef2d1bd01d144d426b72db3744e7a6b6bb518a639d5c9c8d86438fb75a3b1934","impliedFormat":1},{"version":"b9750fe7235da7d8bf75cb171bf067b7350380c74271d3f80f49aea7466b55b5","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"f79e0681538ef94c273a46bb1a073b4fe9fdc93ef7f40cc2c3abd683b85f51fc","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"17ace83a5bea3f1da7e0aef7aab0f52bca22619e243537a83a89352a611b837d","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"6cf2d240d4e449ccfee82aff7ce0fd1890c1b6d4f144ec003aa51f7f70f68935","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1dc574e42493e8bf9bb37be44d9e38c5bd7bbc04f884e5e58b4d69636cb192b3","impliedFormat":1},{"version":"9deab571c42ed535c17054f35da5b735d93dc454d83c9a5330ecc7a4fb184e9e","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b8e8c0331a0c2e9fb53b8b0d346e44a8db8c788dae727a2c52f4cf3bd857f0d","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"8945919709e0c6069c32ca26a675a0de90fd2ad70d5bc3ba281c628729a0c39d","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"763ee3998716d599321e34b7f7e93a8e57bef751206325226ebf088bf75ea460","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"606e6f841ba9667de5d83ca458449f0ed8c511ba635f753eaa731e532dea98c7","impliedFormat":1},{"version":"7c0d4fc71fe32cedb758c7e3c08715235a51e5a22d184306a59dae10a9c7ffaa","impliedFormat":1},{"version":"ce8a0b21e80cf5f10adc9336b46ffc666696d1373a763b170baf69a722f85d67","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"baeffe1b7d836196d497eb755699718deb729a2033078a018f037a14ecaeb9a7","impliedFormat":1},{"version":"39da0a8478aede3a55308089e231c5966b2196e7201494280b1e19f8ec8e24d4","impliedFormat":1},{"version":"90be1a7f573bad71331ff10deeadce25b09034d3d27011c2155bcb9cb9800b7f","impliedFormat":1},{"version":"bc7221c9a8dc71587ff784120f7707985627282dad0a99439e893a1588651ef0","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"ad444a874f011d3a797f1a41579dbfcc6b246623f49c20009f60e211dbd5315e","impliedFormat":1},{"version":"1124613ba0669e7ea5fb785ede1c3f254ed1968335468b048b8fc35c172393de","impliedFormat":1},{"version":"5fa139523e35fd907f3dd6c2e38ef2066687b27ed88e2680783e05662355ac04","impliedFormat":1},{"version":"9c250db4bab4f78fad08be7f4e43e962cc143e0f78763831653549ceb477344a","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"db7c948e2e69559324be7628cb63296ec8986d60f26173f9e324aeb8a2fe23d8","impliedFormat":1},{"version":"9c2353ef1fb353a1c8f30af2cf104f0bc64ebc2fcdb98c2834d451bd654664ab","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"7fda4c0e3f50513286029633c458ee82cee563cd6af20b92e43b4425c969c146","impliedFormat":1},{"version":"cda4052f66b1e6cb7cf1fdfd96335d1627aa24a3b8b82ba4a9f873ec3a7bcde8","impliedFormat":1},{"version":"703733dde084b7e856f5940f9c3c12007ca62858accb9482c2b65e030877702d","impliedFormat":1},{"version":"413cb597cc5933562ec064bfb1c3a9164ef5d2f09e5f6b7bd19f483d5352449e","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"6cc79183c88040697e1552ba81c5245b0c701b965623774587c4b9d1e7497278","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"82c27d4cf380b0e6cd62628f069b850298d20051f0b7b0a1904fdb38c53fa7a6","impliedFormat":1},{"version":"c97b9278c8ce212c1bdf4fae9c77d58c15565d4ebf663d761a9deb924b6ca8b3","impliedFormat":1},{"version":"8bb6e7ce91ec84336203e87010b1198514548c2e44789752c1741eaac02f2431","impliedFormat":1},{"version":"b33ac7d8d7d1bfc8cc06c75d1ee186d21577ab2026f482e29babe32b10b26512","impliedFormat":1},{"version":"24f8f342c14c911eedfee43074c6a0d0a5ebb5ec984353bffaeadddb3f6a6b1c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"03d4a10c21ac451b682246f3261b769247baf774c4878551c02256ae98299b1c","impliedFormat":1},{"version":"2d9b710fee8c3d7eabee626af8fd6ec2cf6f71e6b7429b307b8f67d70b1707c5","impliedFormat":1},{"version":"652a4bbefba6aa309bfc3063f59ed1a2e739c1d802273b0e6e0aa7082659f3b3","impliedFormat":1},{"version":"d7ca19bfb1ba4c3ef59d43bd7cd3719d8c5ffb60a9b6f402dee4e229f4d921aa","impliedFormat":1},{"version":"0c0a85a19b60f2ec18a32ff051bb1423860977a16b645dbf159baa7202bc633b","impliedFormat":1},{"version":"fc5bdc1d13667041055811568043956c75150923d8b9a32b989ac7588418ce47","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"d3b290cc3c08cbde2b463df2616b948fb32733dafe3ac29b9e6ded26baee5489","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"9558d365d0e72b6d9bd8c1742fe1185f983965c6d2eff88a117a59b9f51d3c5f","impliedFormat":1},{"version":"6cc2961fbe8d32e34fd4c7f1b7045353016fff50df98bc31af7c7d1b4b6eb552","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"a2e1f7010ae5f746b937621840cb87dee9eeb69188d32880bd9752029084212c","impliedFormat":1},{"version":"dd30eb34b5c4597a568de0efb8b34e328c224648c258759ac541beb16256ffb6","impliedFormat":1},{"version":"6129bd7098131a0e346352901bc8d461a76d0568686bb0e1f8499df91fde8a1f","impliedFormat":1},{"version":"7cd7923a36835c1194a92b808068a524c4e7c0ff7bdc8712865800e6963d75da","impliedFormat":1},{"version":"82200d39d66c91f502f74c85db8c7a8d56cfc361c20d7da6d7b68a4eeaaefbf4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"a1c8542ed1189091dd39e732e4390882a9bcd15c0ca093f6e9483eba4e37573f","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"76264a4df0b7c78b7b12dfaedc05d9f1016f27be1f3d0836417686ff6757f659","impliedFormat":1},{"version":"c0fabd699e6e0b6bfc1728c048e52737b73fb6609eeeae0f7f4775ff14ff2df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"4dd4f6e28afc1ee30ce76ffc659d19e14dff29cb19b7747610ada3535b7409af","impliedFormat":1},{"version":"1640728521f6ab040fc4a85edd2557193839d0cd0e41c02004fc8d415363d4e2","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"ec9fd890d681789cb0aa9efbc50b1e0afe76fbf3c49c3ac50ff80e90e29c6bcb","impliedFormat":1},{"version":"5fbd292aa08208ae99bf06d5da63321fdc768ee43a7a104980963100a3841752","impliedFormat":1},{"version":"9eac5a6beea91cfb119688bf44a5688b129b804ede186e5e2413572a534c21bb","impliedFormat":1},{"version":"e81bf06c0600517d8f04cc5de398c28738bfdf04c91fb42ad835bfe6b0d63a23","impliedFormat":1},{"version":"363996fe13c513a7793aa28ffb05b5d0230db2b3d21b7bfaf21f79e4cde54b4e","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"7f6c48cacd08c1b1e29737b8221b7661e6b855767f8778f9a181fa2f74c09d21","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"15959543f93f27e8e2b1a012fe28e14b682034757e2d7a6c1f02f87107fc731e","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"4e828bf688597c32905215785730cbdb603b54e284d472a23fc0195c6d4aeee8","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"4da80db9ed5a1a20fd5bfce863dd178b8928bcaf4a3d75e8657bcae32e572ede","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"f72ee46ae3f73e6c5ff0da682177251d80500dd423bfd50286124cd0ca11e160","impliedFormat":1},{"version":"898b714aad9cfd0e546d1ad2c031571de7622bd0f9606a499bee193cf5e7cf0c","impliedFormat":1},{"version":"d707fb7ca32930495019a4c85500385f6850c785ee0987a1b6bcad6ade95235e","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"5d26aae738fa3efc87c24f6e5ec07c54694e6bcf431cc38d3da7576d6bb35bd6","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"e0aa1079d58134e55ad2f73508ad1be565a975f2247245d76c64c1ca9e5e5b26","impliedFormat":1},{"version":"cd0c5af42811a4a56a0f77856cfa6c170278e9522888db715b11f176df3ff1f2","impliedFormat":1},{"version":"68f81dad9e8d7b7aa15f35607a70c8b68798cf579ac44bd85325b8e2f1fb3600","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"94fd3ce628bd94a2caf431e8d85901dbe3a64ab52c0bd1dbe498f63ca18789f7","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"2470a2412a59c6177cd4408dd7edb099ca7ace68c0187f54187dfee56dc9c5aa","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"ec61ebac4d71c4698318673efbb5c481a6c4d374da8d285f6557541a5bd318d0","impliedFormat":99},{"version":"16fd66ae997b2f01c972531239da90fbf8ab4022bb145b9587ef746f6cecde5a","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc8fbee8f73bf5ffd6ba08ba1c554d6f714c49cae5b5e984afd545ab1b7abe06","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"521fc35a732f1a19f5d52024c2c22e257aa63258554968f7806a823be2f82b03","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf",{"version":"1d7ee0c4eb734d59b6d962bc9151f6330895067cd3058ce6a3cd95347ef5c6e8","impliedFormat":99},{"version":"58becb10c8747d40e4716adaa4ea30444e10826c639373dab40aef05d49abeeb","signature":"91d9269b68b9268d7303cd74e8d80ed44c4be6854a81a13c941db7a43f2331bf"},{"version":"820b0098d74d30089fe0eeed6dac316b765bd62589bb37edfe8777d39a4855cb","signature":"dd6b2afce46d81d7dc20959260b4f140de04d1c7a5f1bacb258481e9ffb16ffa"},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"42979633ab57d6cc7837b15be8c44c2087a264d5f2ca976afed684bee0925468","impliedFormat":99},"9f21236c0b7bca1030c4ebdd706e66344edd24e22d7427296632240a812f2197",{"version":"b58b573f4e231c54bd58d92276f1ab5ea522d57a91e5872851d605f75f36d00b","signature":"9233c6a47fb6a1b96a6ad7adde996db020aa4cdb0dd702cb3408b5794d440631"},"0fce8a9bd25cb14b8c3e3577883596593a377c3ec2cc775040b625f442b35e38",{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"1b61d562dbf8295515b0f1016ea7b719e46847621988f7420785e5c8668ca790","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"f2611056758a00c757050a56348333c8cb7a72adee9ca6a24eb6231169e04203","signature":"1979a1b474a16ec9545a912d5636fef5ad057f55749ed87855738780dd93030f"},"8bf5182f42ea17acad008ff41e3c0943185e67966fb08da0d96851dbd992aa6e","ee46c526e4a0119c3e8e4edc5f2281d4180b8f1ba0cc01c840f7aff9592b299e","8eda331cd98719945603ff749b1fc960c5e75c7b14850c2c6387405e0f6ea3ce","f08c967d1e8618060baaa840dd0e1c8a31cdc682416af116d32fda7d78b76ace","d9a447af0a0c2dcc0d447b4a263cd8781f87cd4393de3498575ae1bbba0194dd","53fb9b3a127f1f5851727985e87e0a78cd05ce331fd219d04f61597a1fe61ecc","a3ae331b28da7fed70f45e76ac849a9a96590bfe887d0b2a5e3b290640b84f62","22172a7dd2af03e315c9397e405bb131ce102e20df29459a4f7102c2ecbf1936","f504cf4209a269abe867e196d17643a8ad2486b6e81aa445b798f207df9e4754",{"version":"30e9f4bbda4e6dc2deaff7634b85433af8f73a0b66bd64c4402b7623e33a542c","signature":"cf85930a406437cf5f43865cf804fba3fe15f8712f6342d80bf2785c1eb073d6"},{"version":"882b28abe64dae4932c83ebb71e4155da340929fe08a2055f3e573ef17f70fc3","impliedFormat":1},{"version":"4a3e425808751200a7709671667ad3d7e7cbfd0a06d469cab42adf06c2601f4a","impliedFormat":1},{"version":"401da46338f5b4f97c2a5f8a0faaace045c51aabd751d2dc704159f64feafe89","impliedFormat":1},{"version":"4e6da006f3a74377f1801ef8cbd771f82ead12d4326d4429661524aca2e21493","impliedFormat":1},"aa8271711822ca11b2a93dadcc5388e76cc831f36ec6f667a4adfe6b8d96ef15",{"version":"a9160251c261e1aded3374e61a655ae2475797db22dc949e8e60c5a407c224aa","signature":"f2ffcc0424acf94a1fc97f1598da823de80320c699e56961963be2935112d53a"},"905fc8871e2777097ac966549dc2abb62abb7e4715b2b8dbd7b056f4f8ec139c","8796862bba098d3a4120163d6695ec756c1ecc891b6fbb3deedc1653dacb810e",{"version":"0eb7c579cf9e5634148d1322df3032cde9e0fa0d49cb9f8e77f9acb417e21607","signature":"848b40484aa84b6f442590925df6792606fe7f851663b37deaa869857148a32a"},"b5f5daf704528815db849b993b3ca723a6fe91d3a622caddebf640d0b725334c","6e8ecf14ccc7032c3024d52862d796acb51d1aef5d5499e30350496d8ed97836","e8dcc1d02c46e68db2537c75f31de0d6893045e663278b92ec4f300e6ff0b5d9","55f9abb9cc177f10ded2daefd5d8ef00a56549dbe315d70707bd114dc6472198","6019f5fdd540c6b10925458425eaacdc57a602df5da2e5af8d322bdea68511c8","94a1851a21857fd7df68313dde72484afcbfa76a2277abb42fc8951f7acab932","28cdb028c1451b92b128be3abcb6414e4302c3143cc73144d3e7f4b4e932333c","a5db1437b4f7c24065819bd5d3eac25f2b88950ea184bb35d868cfc03d18cd7c","60d7b2eeda9ac3b810b446a552079af4a75633ac8039fbfc790eb1ba272a2b4b","4f78aca9208c29aae34fe0bfe9e0f3e40cd7dea0ba8d7bc3e7943326d8fcaa25","805f2ed4a67c52219dcfe754ea9f11f8299da92691dd464d292e018209142d38","0e9ab15aa99b4f29a4b1250d3453d40f3bf9010e49602454e85e62251d350eac","43c7fdd9a2363dc964a6644339ea16f4f598ce5621bc68a5d168b3dbdb571132","748f71f7b70f100c70bc89ef2a1d7d0e6b95068b107a0b2732fe5c0905a53699","325fcba7ecb747f598d12939e0b4730c9500d83f9107d2cc581460d5e48fd34d","9c856fd5df2e0ce2e26bd6eff46fd153ede87e267d2e9f059ca896cb585c8e5d",{"version":"b2ad9360109f81b86c2f36993406efc8d6cd48b5225514d78028ac6b548267c0","signature":"d303560f025fea5aabba06f1a3cabbec22c43e45a0bf445df0312d235dcf3eff"},"bf520bf187e4f515feaa449892b92f8a7ec52fa60b5b634fd1ea0f3a987561e8",{"version":"22ede1a8ea28ec9f5d7dbc5e5aa4fbee18315404979b8e28643d74631cfd53f0","signature":"3a8523bfa20e149df671c3166d3c2e0c8e5b9f015b121a6855deedf209096b5e"},"3cdd575aba8e4aad238f5c4becd78ef51c58c9e2872522f349a1e809b0125f77","4600c33799909539aaf6af168167145819ef7b0b76188f0cb2a1fc3ecdde8780",{"version":"ead7428a36960cf8ea8611159e663bbf27c5cb8917eb81ed0e2f154d3f86185c","signature":"86d8f27a54413ad4759c68ea2c203813869261973b810cf1e906487ecd9edb4b"},"83fd5d02f3beb56e62b955dab641cf34e0fbde042f9f6adbef2cb71862e00c35","355d9dff15db3a79ec0c45ea76b1de9e0d4157e1b55a8600881104b64b28733d","c99fc024354c5310842b4307a08655ce0c71324bcab427d55cfa408cbe3c3c94","67a8865f741684f6cca5b82109c7916853911d54da54c6685b02009758fca361","d6760d17aa2478693521f479589882a25c5f365422c5c3feaf5b865d872b3055","057acaab282685a38525e410474322ab101d536fcebd7c7450bbbe255d69e248","b2c960af00b6c7fbf198e4f47223b47ad765f6f4b0df592d877fdb4a544c0a01","66b2f924bbe2132d16ab582ff7afc7eebc0e74c63fa2ab593ad7f1a105ce9fb5","43c81b5e7c15aa91c1d945675fa7eaf2a7cf0d75d6cb645ba5515a1e92843d79","dd275e887f3c3c852f3a7a48887fbde4cd0d14af614bead90cfee9a64777ee56","4db7b3903b70f1376f0db61d9d91eed5fa0a16d5beb8f36df349add009e84f0e","0fb708d110b0095ff26fbb40e96ad8a3f31c0e710662d78d811a33af6abae765","6c2312a765e695b10d55dd50368dfa0d793965b59a9c08c8df915aa16e140a9c","b1ef0f3c639214285f6d4aa93c4640476b014fc9e73e1214682ae5f306ea1399","a197e281c2c17b5d7e64ed8d39a562567b71f097bade3aeb4a0f34db81161ada","b6291a851de1e48b8c1061f18799135a32881f5de1677a74ceb1cdd07daad223","2d921fd41043786d1b60f7b6eac6127d86559b90a42e3c68393e98a00f71b045",{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ecec8f82ddf42db544c8320eddf7f09a9a788723f7473e82e903401a3d14d488","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[350,352,353,[356,358],[362,372],[377,420]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":1},"referencedMap":[[406,1],[409,2],[408,3],[407,4],[412,5],[411,6],[413,7],[414,8],[410,9],[415,10],[416,11],[405,12],[417,13],[419,14],[420,15],[418,16],[350,17],[307,18],[422,19],[423,18],[103,20],[104,20],[105,21],[64,22],[106,23],[107,24],[108,25],[59,18],[62,26],[60,18],[61,18],[109,27],[110,28],[111,29],[112,30],[113,31],[114,32],[115,32],[117,18],[116,33],[118,34],[119,35],[120,36],[102,37],[63,18],[121,38],[122,39],[123,40],[155,41],[124,42],[125,43],[126,44],[127,45],[128,46],[129,47],[130,48],[131,49],[132,50],[133,51],[134,51],[135,52],[136,18],[137,53],[139,54],[138,55],[140,56],[141,57],[142,58],[143,59],[144,60],[145,61],[146,62],[147,63],[148,64],[149,65],[150,66],[151,67],[152,68],[153,69],[154,70],[51,18],[160,71],[161,72],[159,73],[157,74],[158,75],[49,18],[52,76],[421,77],[354,18],[351,18],[50,18],[355,77],[374,78],[373,18],[375,79],[58,80],[310,81],[315,82],[317,83],[179,84],[184,85],[283,86],[254,87],[262,88],[281,89],[180,90],[228,18],[229,91],[282,92],[205,93],[181,94],[209,93],[199,93],[166,93],[246,95],[171,18],[243,96],[241,97],[188,18],[244,98],[334,99],[252,73],[333,18],[332,100],[245,73],[234,101],[242,102],[257,103],[258,104],[249,18],[189,105],[247,18],[248,73],[327,106],[330,107],[216,108],[215,109],[214,110],[337,73],[213,111],[193,18],[340,18],[360,112],[359,18],[343,18],[342,73],[344,113],[162,18],[277,18],[164,114],[298,18],[299,18],[301,18],[304,115],[300,18],[302,116],[303,116],[183,18],[309,111],[318,117],[322,118],[175,119],[236,120],[235,18],[253,121],[250,18],[251,18],[256,122],[232,123],[174,124],[203,125],[274,126],[167,127],[173,128],[163,129],[285,130],[296,131],[284,18],[295,132],[204,18],[191,133],[271,134],[270,18],[273,135],[272,135],[225,136],[210,136],[265,137],[211,137],[169,138],[168,18],[269,139],[268,140],[267,141],[266,142],[170,143],[240,144],[255,145],[239,146],[261,147],[263,148],[260,146],[206,143],[156,18],[275,149],[230,150],[294,151],[187,152],[289,153],[182,18],[290,154],[292,155],[293,156],[288,18],[287,127],[207,157],[276,158],[297,159],[176,18],[178,18],[190,160],[264,161],[172,162],[177,18],[186,163],[185,164],[192,165],[233,166],[231,100],[194,167],[196,168],[341,18],[195,169],[197,170],[312,18],[313,18],[311,18],[314,18],[339,18],[198,171],[238,73],[57,18],[259,172],[217,18],[227,173],[320,73],[326,174],[224,73],[324,73],[223,175],[306,176],[222,174],[165,18],[328,177],[220,73],[221,73],[212,18],[226,18],[219,178],[218,179],[208,180],[202,181],[291,18],[201,182],[200,18],[316,18],[237,73],[308,183],[48,18],[56,184],[53,73],[54,18],[55,18],[286,185],[280,186],[278,18],[279,187],[319,188],[321,189],[323,190],[361,191],[325,192],[349,193],[329,193],[348,194],[331,195],[335,196],[336,197],[338,198],[345,199],[347,18],[346,200],[305,201],[376,202],[46,18],[47,18],[8,18],[9,18],[11,18],[10,18],[2,18],[12,18],[13,18],[14,18],[15,18],[16,18],[17,18],[18,18],[19,18],[3,18],[20,18],[21,18],[4,18],[22,18],[26,18],[23,18],[24,18],[25,18],[27,18],[28,18],[29,18],[5,18],[30,18],[31,18],[32,18],[33,18],[6,18],[37,18],[34,18],[35,18],[36,18],[38,18],[7,18],[39,18],[44,18],[45,18],[40,18],[41,18],[42,18],[43,18],[1,18],[80,203],[90,204],[79,203],[100,205],[71,206],[70,207],[99,200],[93,208],[98,209],[73,210],[87,211],[72,212],[96,213],[68,214],[67,200],[97,215],[69,216],[74,217],[75,18],[78,217],[65,18],[101,218],[91,219],[82,220],[83,221],[85,222],[81,223],[84,224],[94,200],[76,225],[77,226],[86,227],[66,228],[89,219],[88,217],[92,18],[95,229],[378,230],[382,231],[381,232],[379,233],[392,234],[390,235],[394,236],[395,237],[386,238],[363,239],[398,240],[399,241],[365,242],[400,243],[403,244],[404,245],[402,246],[388,247],[383,248],[389,249],[391,247],[384,250],[393,251],[387,252],[369,253],[367,254],[368,242],[372,255],[380,256],[397,257],[401,73],[396,258],[385,259],[371,260],[366,261],[377,262],[370,73],[364,18],[362,263],[353,264],[356,265],[357,18],[358,73],[352,18]],"affectedFilesPendingEmit":[406,409,408,407,412,411,413,414,410,415,416,405,417,419,420,418,378,382,381,379,392,390,394,395,386,363,398,399,365,400,403,404,402,388,383,389,391,384,393,387,369,367,368,372,380,397,401,396,385,371,366,377,370,364,362,353,356,357,358,352],"version":"5.8.3"}
\ No newline at end of file
+{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/static-generation-bailout.d.ts","./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.d.ts","./node_modules/next/dist/client/components/searchparams-bailout-proxy.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-path.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-tag.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./src/lib/scraper/types.ts","./src/lib/scraper/utils/ratelimit.ts","./src/lib/scraper/utils/cache.ts","./src/lib/scraper/utils/urlparser.ts","./src/lib/scraper/strategies/textextractor.ts","./src/lib/scraper/strategies/linkextractor.ts","./node_modules/domelementtype/lib/esm/index.d.ts","./node_modules/domhandler/lib/esm/node.d.ts","./node_modules/domhandler/lib/esm/index.d.ts","./node_modules/htmlparser2/lib/esm/tokenizer.d.ts","./node_modules/htmlparser2/lib/esm/parser.d.ts","./node_modules/dom-serializer/lib/esm/index.d.ts","./node_modules/domutils/lib/esm/stringify.d.ts","./node_modules/domutils/lib/esm/traversal.d.ts","./node_modules/domutils/lib/esm/manipulation.d.ts","./node_modules/domutils/lib/esm/querying.d.ts","./node_modules/domutils/lib/esm/legacy.d.ts","./node_modules/domutils/lib/esm/helpers.d.ts","./node_modules/domutils/lib/esm/feeds.d.ts","./node_modules/domutils/lib/esm/index.d.ts","./node_modules/htmlparser2/lib/esm/index.d.ts","./node_modules/css-what/lib/es/types.d.ts","./node_modules/css-what/lib/es/parse.d.ts","./node_modules/css-what/lib/es/stringify.d.ts","./node_modules/css-what/lib/es/index.d.ts","./node_modules/css-select/lib/esm/types.d.ts","./node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts","./node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts","./node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts","./node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts","./node_modules/css-select/lib/esm/index.d.ts","./node_modules/cheerio-select/lib/esm/index.d.ts","./node_modules/cheerio/lib/esm/options.d.ts","./node_modules/cheerio/lib/esm/types.d.ts","./node_modules/cheerio/lib/esm/api/attributes.d.ts","./node_modules/cheerio/lib/esm/api/traversing.d.ts","./node_modules/cheerio/lib/esm/api/manipulation.d.ts","./node_modules/cheerio/lib/esm/api/css.d.ts","./node_modules/cheerio/lib/esm/api/forms.d.ts","./node_modules/cheerio/lib/esm/cheerio.d.ts","./node_modules/cheerio/lib/esm/static.d.ts","./node_modules/cheerio/lib/esm/load.d.ts","./node_modules/cheerio/lib/esm/index.d.ts","./src/lib/scraper/strategies/contentcleaner.ts","./src/lib/scraper/strategies/index.ts","./src/lib/scraper/config/sites.json","./src/lib/scraper/scraper.ts","./src/app/scrape/author/route.ts","./node_modules/axios/index.d.ts","./src/types/api.ts","./src/lib/api.ts","./src/app/scrape/bulk/route.ts","./src/app/scrape/story/route.ts","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/dompurify/dist/purify.es.d.mts","./src/lib/sanitization.ts","./src/lib/settings.ts","./src/lib/theme.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/contexts/authcontext.tsx","./src/app/layout.tsx","./src/components/ui/loadingspinner.tsx","./src/app/page.tsx","./src/components/ui/button.tsx","./node_modules/@heroicons/react/24/outline/academiccapicon.d.ts","./node_modules/@heroicons/react/24/outline/adjustmentshorizontalicon.d.ts","./node_modules/@heroicons/react/24/outline/adjustmentsverticalicon.d.ts","./node_modules/@heroicons/react/24/outline/archiveboxarrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/archiveboxxmarkicon.d.ts","./node_modules/@heroicons/react/24/outline/archiveboxicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdowncircleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdownlefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdownonsquarestackicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdownonsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdownrighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdowntrayicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowleftcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowleftendonrectangleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowleftonrectangleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowleftstartonrectangleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowlefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowlongdownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowlonglefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowlongrighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowlongupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowpathroundedsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowpathicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowrightcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowrightendonrectangleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowrightonrectangleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowrightstartonrectangleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowrighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowsmalldownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowsmalllefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowsmallrighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowsmallupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowtoprightonsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowtrendingdownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowtrendingupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturndownlefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturndownrighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturnleftdownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturnleftupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturnrightdownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturnrightupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturnuplefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowturnuprighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowupcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuplefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuponsquarestackicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuponsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuprighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuptrayicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuturndownicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuturnlefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuturnrighticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowuturnupicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowspointinginicon.d.ts","./node_modules/@heroicons/react/24/outline/arrowspointingouticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowsrightlefticon.d.ts","./node_modules/@heroicons/react/24/outline/arrowsupdownicon.d.ts","./node_modules/@heroicons/react/24/outline/atsymbolicon.d.ts","./node_modules/@heroicons/react/24/outline/backspaceicon.d.ts","./node_modules/@heroicons/react/24/outline/backwardicon.d.ts","./node_modules/@heroicons/react/24/outline/banknotesicon.d.ts","./node_modules/@heroicons/react/24/outline/bars2icon.d.ts","./node_modules/@heroicons/react/24/outline/bars3bottomlefticon.d.ts","./node_modules/@heroicons/react/24/outline/bars3bottomrighticon.d.ts","./node_modules/@heroicons/react/24/outline/bars3centerlefticon.d.ts","./node_modules/@heroicons/react/24/outline/bars3icon.d.ts","./node_modules/@heroicons/react/24/outline/bars4icon.d.ts","./node_modules/@heroicons/react/24/outline/barsarrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/barsarrowupicon.d.ts","./node_modules/@heroicons/react/24/outline/battery0icon.d.ts","./node_modules/@heroicons/react/24/outline/battery100icon.d.ts","./node_modules/@heroicons/react/24/outline/battery50icon.d.ts","./node_modules/@heroicons/react/24/outline/beakericon.d.ts","./node_modules/@heroicons/react/24/outline/bellalerticon.d.ts","./node_modules/@heroicons/react/24/outline/bellslashicon.d.ts","./node_modules/@heroicons/react/24/outline/bellsnoozeicon.d.ts","./node_modules/@heroicons/react/24/outline/bellicon.d.ts","./node_modules/@heroicons/react/24/outline/boldicon.d.ts","./node_modules/@heroicons/react/24/outline/boltslashicon.d.ts","./node_modules/@heroicons/react/24/outline/bolticon.d.ts","./node_modules/@heroicons/react/24/outline/bookopenicon.d.ts","./node_modules/@heroicons/react/24/outline/bookmarkslashicon.d.ts","./node_modules/@heroicons/react/24/outline/bookmarksquareicon.d.ts","./node_modules/@heroicons/react/24/outline/bookmarkicon.d.ts","./node_modules/@heroicons/react/24/outline/briefcaseicon.d.ts","./node_modules/@heroicons/react/24/outline/buganticon.d.ts","./node_modules/@heroicons/react/24/outline/buildinglibraryicon.d.ts","./node_modules/@heroicons/react/24/outline/buildingoffice2icon.d.ts","./node_modules/@heroicons/react/24/outline/buildingofficeicon.d.ts","./node_modules/@heroicons/react/24/outline/buildingstorefronticon.d.ts","./node_modules/@heroicons/react/24/outline/cakeicon.d.ts","./node_modules/@heroicons/react/24/outline/calculatoricon.d.ts","./node_modules/@heroicons/react/24/outline/calendardaterangeicon.d.ts","./node_modules/@heroicons/react/24/outline/calendardaysicon.d.ts","./node_modules/@heroicons/react/24/outline/calendaricon.d.ts","./node_modules/@heroicons/react/24/outline/cameraicon.d.ts","./node_modules/@heroicons/react/24/outline/chartbarsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/chartbaricon.d.ts","./node_modules/@heroicons/react/24/outline/chartpieicon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubblebottomcentertexticon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubblebottomcentericon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubbleleftellipsisicon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubbleleftrighticon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubblelefticon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubbleovalleftellipsisicon.d.ts","./node_modules/@heroicons/react/24/outline/chatbubbleovallefticon.d.ts","./node_modules/@heroicons/react/24/outline/checkbadgeicon.d.ts","./node_modules/@heroicons/react/24/outline/checkcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/checkicon.d.ts","./node_modules/@heroicons/react/24/outline/chevrondoubledownicon.d.ts","./node_modules/@heroicons/react/24/outline/chevrondoublelefticon.d.ts","./node_modules/@heroicons/react/24/outline/chevrondoublerighticon.d.ts","./node_modules/@heroicons/react/24/outline/chevrondoubleupicon.d.ts","./node_modules/@heroicons/react/24/outline/chevrondownicon.d.ts","./node_modules/@heroicons/react/24/outline/chevronlefticon.d.ts","./node_modules/@heroicons/react/24/outline/chevronrighticon.d.ts","./node_modules/@heroicons/react/24/outline/chevronupdownicon.d.ts","./node_modules/@heroicons/react/24/outline/chevronupicon.d.ts","./node_modules/@heroicons/react/24/outline/circlestackicon.d.ts","./node_modules/@heroicons/react/24/outline/clipboarddocumentcheckicon.d.ts","./node_modules/@heroicons/react/24/outline/clipboarddocumentlisticon.d.ts","./node_modules/@heroicons/react/24/outline/clipboarddocumenticon.d.ts","./node_modules/@heroicons/react/24/outline/clipboardicon.d.ts","./node_modules/@heroicons/react/24/outline/clockicon.d.ts","./node_modules/@heroicons/react/24/outline/cloudarrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/cloudarrowupicon.d.ts","./node_modules/@heroicons/react/24/outline/cloudicon.d.ts","./node_modules/@heroicons/react/24/outline/codebracketsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/codebracketicon.d.ts","./node_modules/@heroicons/react/24/outline/cog6toothicon.d.ts","./node_modules/@heroicons/react/24/outline/cog8toothicon.d.ts","./node_modules/@heroicons/react/24/outline/cogicon.d.ts","./node_modules/@heroicons/react/24/outline/commandlineicon.d.ts","./node_modules/@heroicons/react/24/outline/computerdesktopicon.d.ts","./node_modules/@heroicons/react/24/outline/cpuchipicon.d.ts","./node_modules/@heroicons/react/24/outline/creditcardicon.d.ts","./node_modules/@heroicons/react/24/outline/cubetransparenticon.d.ts","./node_modules/@heroicons/react/24/outline/cubeicon.d.ts","./node_modules/@heroicons/react/24/outline/currencybangladeshiicon.d.ts","./node_modules/@heroicons/react/24/outline/currencydollaricon.d.ts","./node_modules/@heroicons/react/24/outline/currencyeuroicon.d.ts","./node_modules/@heroicons/react/24/outline/currencypoundicon.d.ts","./node_modules/@heroicons/react/24/outline/currencyrupeeicon.d.ts","./node_modules/@heroicons/react/24/outline/currencyyenicon.d.ts","./node_modules/@heroicons/react/24/outline/cursorarrowraysicon.d.ts","./node_modules/@heroicons/react/24/outline/cursorarrowrippleicon.d.ts","./node_modules/@heroicons/react/24/outline/devicephonemobileicon.d.ts","./node_modules/@heroicons/react/24/outline/devicetableticon.d.ts","./node_modules/@heroicons/react/24/outline/divideicon.d.ts","./node_modules/@heroicons/react/24/outline/documentarrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/documentarrowupicon.d.ts","./node_modules/@heroicons/react/24/outline/documentchartbaricon.d.ts","./node_modules/@heroicons/react/24/outline/documentcheckicon.d.ts","./node_modules/@heroicons/react/24/outline/documentcurrencybangladeshiicon.d.ts","./node_modules/@heroicons/react/24/outline/documentcurrencydollaricon.d.ts","./node_modules/@heroicons/react/24/outline/documentcurrencyeuroicon.d.ts","./node_modules/@heroicons/react/24/outline/documentcurrencypoundicon.d.ts","./node_modules/@heroicons/react/24/outline/documentcurrencyrupeeicon.d.ts","./node_modules/@heroicons/react/24/outline/documentcurrencyyenicon.d.ts","./node_modules/@heroicons/react/24/outline/documentduplicateicon.d.ts","./node_modules/@heroicons/react/24/outline/documentmagnifyingglassicon.d.ts","./node_modules/@heroicons/react/24/outline/documentminusicon.d.ts","./node_modules/@heroicons/react/24/outline/documentplusicon.d.ts","./node_modules/@heroicons/react/24/outline/documenttexticon.d.ts","./node_modules/@heroicons/react/24/outline/documenticon.d.ts","./node_modules/@heroicons/react/24/outline/ellipsishorizontalcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/ellipsishorizontalicon.d.ts","./node_modules/@heroicons/react/24/outline/ellipsisverticalicon.d.ts","./node_modules/@heroicons/react/24/outline/envelopeopenicon.d.ts","./node_modules/@heroicons/react/24/outline/envelopeicon.d.ts","./node_modules/@heroicons/react/24/outline/equalsicon.d.ts","./node_modules/@heroicons/react/24/outline/exclamationcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/exclamationtriangleicon.d.ts","./node_modules/@heroicons/react/24/outline/eyedroppericon.d.ts","./node_modules/@heroicons/react/24/outline/eyeslashicon.d.ts","./node_modules/@heroicons/react/24/outline/eyeicon.d.ts","./node_modules/@heroicons/react/24/outline/facefrownicon.d.ts","./node_modules/@heroicons/react/24/outline/facesmileicon.d.ts","./node_modules/@heroicons/react/24/outline/filmicon.d.ts","./node_modules/@heroicons/react/24/outline/fingerprinticon.d.ts","./node_modules/@heroicons/react/24/outline/fireicon.d.ts","./node_modules/@heroicons/react/24/outline/flagicon.d.ts","./node_modules/@heroicons/react/24/outline/folderarrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/folderminusicon.d.ts","./node_modules/@heroicons/react/24/outline/folderopenicon.d.ts","./node_modules/@heroicons/react/24/outline/folderplusicon.d.ts","./node_modules/@heroicons/react/24/outline/foldericon.d.ts","./node_modules/@heroicons/react/24/outline/forwardicon.d.ts","./node_modules/@heroicons/react/24/outline/funnelicon.d.ts","./node_modules/@heroicons/react/24/outline/gificon.d.ts","./node_modules/@heroicons/react/24/outline/gifttopicon.d.ts","./node_modules/@heroicons/react/24/outline/gifticon.d.ts","./node_modules/@heroicons/react/24/outline/globealticon.d.ts","./node_modules/@heroicons/react/24/outline/globeamericasicon.d.ts","./node_modules/@heroicons/react/24/outline/globeasiaaustraliaicon.d.ts","./node_modules/@heroicons/react/24/outline/globeeuropeafricaicon.d.ts","./node_modules/@heroicons/react/24/outline/h1icon.d.ts","./node_modules/@heroicons/react/24/outline/h2icon.d.ts","./node_modules/@heroicons/react/24/outline/h3icon.d.ts","./node_modules/@heroicons/react/24/outline/handraisedicon.d.ts","./node_modules/@heroicons/react/24/outline/handthumbdownicon.d.ts","./node_modules/@heroicons/react/24/outline/handthumbupicon.d.ts","./node_modules/@heroicons/react/24/outline/hashtagicon.d.ts","./node_modules/@heroicons/react/24/outline/hearticon.d.ts","./node_modules/@heroicons/react/24/outline/homemodernicon.d.ts","./node_modules/@heroicons/react/24/outline/homeicon.d.ts","./node_modules/@heroicons/react/24/outline/identificationicon.d.ts","./node_modules/@heroicons/react/24/outline/inboxarrowdownicon.d.ts","./node_modules/@heroicons/react/24/outline/inboxstackicon.d.ts","./node_modules/@heroicons/react/24/outline/inboxicon.d.ts","./node_modules/@heroicons/react/24/outline/informationcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/italicicon.d.ts","./node_modules/@heroicons/react/24/outline/keyicon.d.ts","./node_modules/@heroicons/react/24/outline/languageicon.d.ts","./node_modules/@heroicons/react/24/outline/lifebuoyicon.d.ts","./node_modules/@heroicons/react/24/outline/lightbulbicon.d.ts","./node_modules/@heroicons/react/24/outline/linkslashicon.d.ts","./node_modules/@heroicons/react/24/outline/linkicon.d.ts","./node_modules/@heroicons/react/24/outline/listbulleticon.d.ts","./node_modules/@heroicons/react/24/outline/lockclosedicon.d.ts","./node_modules/@heroicons/react/24/outline/lockopenicon.d.ts","./node_modules/@heroicons/react/24/outline/magnifyingglasscircleicon.d.ts","./node_modules/@heroicons/react/24/outline/magnifyingglassminusicon.d.ts","./node_modules/@heroicons/react/24/outline/magnifyingglassplusicon.d.ts","./node_modules/@heroicons/react/24/outline/magnifyingglassicon.d.ts","./node_modules/@heroicons/react/24/outline/mappinicon.d.ts","./node_modules/@heroicons/react/24/outline/mapicon.d.ts","./node_modules/@heroicons/react/24/outline/megaphoneicon.d.ts","./node_modules/@heroicons/react/24/outline/microphoneicon.d.ts","./node_modules/@heroicons/react/24/outline/minuscircleicon.d.ts","./node_modules/@heroicons/react/24/outline/minussmallicon.d.ts","./node_modules/@heroicons/react/24/outline/minusicon.d.ts","./node_modules/@heroicons/react/24/outline/moonicon.d.ts","./node_modules/@heroicons/react/24/outline/musicalnoteicon.d.ts","./node_modules/@heroicons/react/24/outline/newspapericon.d.ts","./node_modules/@heroicons/react/24/outline/nosymbolicon.d.ts","./node_modules/@heroicons/react/24/outline/numberedlisticon.d.ts","./node_modules/@heroicons/react/24/outline/paintbrushicon.d.ts","./node_modules/@heroicons/react/24/outline/paperairplaneicon.d.ts","./node_modules/@heroicons/react/24/outline/paperclipicon.d.ts","./node_modules/@heroicons/react/24/outline/pausecircleicon.d.ts","./node_modules/@heroicons/react/24/outline/pauseicon.d.ts","./node_modules/@heroicons/react/24/outline/pencilsquareicon.d.ts","./node_modules/@heroicons/react/24/outline/pencilicon.d.ts","./node_modules/@heroicons/react/24/outline/percentbadgeicon.d.ts","./node_modules/@heroicons/react/24/outline/phonearrowdownlefticon.d.ts","./node_modules/@heroicons/react/24/outline/phonearrowuprighticon.d.ts","./node_modules/@heroicons/react/24/outline/phonexmarkicon.d.ts","./node_modules/@heroicons/react/24/outline/phoneicon.d.ts","./node_modules/@heroicons/react/24/outline/photoicon.d.ts","./node_modules/@heroicons/react/24/outline/playcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/playpauseicon.d.ts","./node_modules/@heroicons/react/24/outline/playicon.d.ts","./node_modules/@heroicons/react/24/outline/pluscircleicon.d.ts","./node_modules/@heroicons/react/24/outline/plussmallicon.d.ts","./node_modules/@heroicons/react/24/outline/plusicon.d.ts","./node_modules/@heroicons/react/24/outline/powericon.d.ts","./node_modules/@heroicons/react/24/outline/presentationchartbaricon.d.ts","./node_modules/@heroicons/react/24/outline/presentationchartlineicon.d.ts","./node_modules/@heroicons/react/24/outline/printericon.d.ts","./node_modules/@heroicons/react/24/outline/puzzlepieceicon.d.ts","./node_modules/@heroicons/react/24/outline/qrcodeicon.d.ts","./node_modules/@heroicons/react/24/outline/questionmarkcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/queuelisticon.d.ts","./node_modules/@heroicons/react/24/outline/radioicon.d.ts","./node_modules/@heroicons/react/24/outline/receiptpercenticon.d.ts","./node_modules/@heroicons/react/24/outline/receiptrefundicon.d.ts","./node_modules/@heroicons/react/24/outline/rectanglegroupicon.d.ts","./node_modules/@heroicons/react/24/outline/rectanglestackicon.d.ts","./node_modules/@heroicons/react/24/outline/rocketlaunchicon.d.ts","./node_modules/@heroicons/react/24/outline/rssicon.d.ts","./node_modules/@heroicons/react/24/outline/scaleicon.d.ts","./node_modules/@heroicons/react/24/outline/scissorsicon.d.ts","./node_modules/@heroicons/react/24/outline/serverstackicon.d.ts","./node_modules/@heroicons/react/24/outline/servericon.d.ts","./node_modules/@heroicons/react/24/outline/shareicon.d.ts","./node_modules/@heroicons/react/24/outline/shieldcheckicon.d.ts","./node_modules/@heroicons/react/24/outline/shieldexclamationicon.d.ts","./node_modules/@heroicons/react/24/outline/shoppingbagicon.d.ts","./node_modules/@heroicons/react/24/outline/shoppingcarticon.d.ts","./node_modules/@heroicons/react/24/outline/signalslashicon.d.ts","./node_modules/@heroicons/react/24/outline/signalicon.d.ts","./node_modules/@heroicons/react/24/outline/slashicon.d.ts","./node_modules/@heroicons/react/24/outline/sparklesicon.d.ts","./node_modules/@heroicons/react/24/outline/speakerwaveicon.d.ts","./node_modules/@heroicons/react/24/outline/speakerxmarkicon.d.ts","./node_modules/@heroicons/react/24/outline/square2stackicon.d.ts","./node_modules/@heroicons/react/24/outline/square3stack3dicon.d.ts","./node_modules/@heroicons/react/24/outline/squares2x2icon.d.ts","./node_modules/@heroicons/react/24/outline/squaresplusicon.d.ts","./node_modules/@heroicons/react/24/outline/staricon.d.ts","./node_modules/@heroicons/react/24/outline/stopcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/stopicon.d.ts","./node_modules/@heroicons/react/24/outline/strikethroughicon.d.ts","./node_modules/@heroicons/react/24/outline/sunicon.d.ts","./node_modules/@heroicons/react/24/outline/swatchicon.d.ts","./node_modules/@heroicons/react/24/outline/tablecellsicon.d.ts","./node_modules/@heroicons/react/24/outline/tagicon.d.ts","./node_modules/@heroicons/react/24/outline/ticketicon.d.ts","./node_modules/@heroicons/react/24/outline/trashicon.d.ts","./node_modules/@heroicons/react/24/outline/trophyicon.d.ts","./node_modules/@heroicons/react/24/outline/truckicon.d.ts","./node_modules/@heroicons/react/24/outline/tvicon.d.ts","./node_modules/@heroicons/react/24/outline/underlineicon.d.ts","./node_modules/@heroicons/react/24/outline/usercircleicon.d.ts","./node_modules/@heroicons/react/24/outline/usergroupicon.d.ts","./node_modules/@heroicons/react/24/outline/userminusicon.d.ts","./node_modules/@heroicons/react/24/outline/userplusicon.d.ts","./node_modules/@heroicons/react/24/outline/usericon.d.ts","./node_modules/@heroicons/react/24/outline/usersicon.d.ts","./node_modules/@heroicons/react/24/outline/variableicon.d.ts","./node_modules/@heroicons/react/24/outline/videocameraslashicon.d.ts","./node_modules/@heroicons/react/24/outline/videocameraicon.d.ts","./node_modules/@heroicons/react/24/outline/viewcolumnsicon.d.ts","./node_modules/@heroicons/react/24/outline/viewfindercircleicon.d.ts","./node_modules/@heroicons/react/24/outline/walleticon.d.ts","./node_modules/@heroicons/react/24/outline/wifiicon.d.ts","./node_modules/@heroicons/react/24/outline/windowicon.d.ts","./node_modules/@heroicons/react/24/outline/wrenchscrewdrivericon.d.ts","./node_modules/@heroicons/react/24/outline/wrenchicon.d.ts","./node_modules/@heroicons/react/24/outline/xcircleicon.d.ts","./node_modules/@heroicons/react/24/outline/xmarkicon.d.ts","./node_modules/@heroicons/react/24/outline/index.d.ts","./src/components/ui/dropdown.tsx","./src/components/layout/header.tsx","./src/components/layout/protectedroute.tsx","./src/components/layout/applayout.tsx","./src/components/ui/input.tsx","./src/components/stories/taginput.tsx","./src/components/stories/richtexteditor.tsx","./node_modules/file-selector/dist/file.d.ts","./node_modules/file-selector/dist/file-selector.d.ts","./node_modules/file-selector/dist/index.d.ts","./node_modules/react-dropzone/typings/react-dropzone.d.ts","./src/components/ui/imageupload.tsx","./src/app/add-story/page.tsx","./src/app/authors/page.tsx","./src/components/stories/storycard.tsx","./src/app/authors/[id]/page.tsx","./src/app/authors/[id]/edit/page.tsx","./src/components/collections/collectioncard.tsx","./src/components/collections/collectiongrid.tsx","./src/components/stories/tagfilter.tsx","./src/app/collections/page.tsx","./src/components/collections/storyreorderlist.tsx","./src/components/collections/addtocollectionmodal.tsx","./src/components/collections/collectiondetailview.tsx","./src/app/collections/[id]/page.tsx","./src/components/collections/collectionform.tsx","./src/app/collections/[id]/edit/page.tsx","./src/components/collections/collectionreadingview.tsx","./src/app/collections/[id]/read/[storyid]/page.tsx","./src/app/collections/new/page.tsx","./src/components/stories/storyselectiontoolbar.tsx","./src/components/stories/storymultiselect.tsx","./src/app/library/page.tsx","./src/app/login/page.tsx","./src/app/settings/page.tsx","./src/components/stories/storyrating.tsx","./src/app/stories/[id]/page.tsx","./src/app/stories/[id]/detail/page.tsx","./src/app/stories/[id]/edit/page.tsx","./src/app/stories/import/bulk/page.tsx","./.next/types/app/page.ts","./.next/types/app/add-story/page.ts","./.next/types/app/authors/page.ts","./.next/types/app/authors/[id]/page.ts","./.next/types/app/authors/[id]/edit/page.ts","./.next/types/app/collections/page.ts","./.next/types/app/collections/[id]/page.ts","./.next/types/app/collections/[id]/edit/page.ts","./.next/types/app/collections/[id]/read/[storyid]/page.ts","./.next/types/app/collections/new/page.ts","./.next/types/app/library/page.ts","./.next/types/app/login/page.ts","./.next/types/app/scrape/author/route.ts","./.next/types/app/scrape/bulk/route.ts","./.next/types/app/scrape/story/route.ts","./.next/types/app/settings/page.ts","./.next/types/app/stories/[id]/page.ts","./.next/types/app/stories/[id]/detail/page.ts","./.next/types/app/stories/[id]/edit/page.ts","./.next/types/app/stories/import/bulk/page.ts","./node_modules/@types/trusted-types/index.d.ts","./node_modules/@types/dompurify/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[64,106,304,754],[64,106,304,758],[64,106,304,757],[64,106,304,755],[64,106,304,768],[64,106,304,766],[64,106,304,770],[64,106,304,771],[64,106,304,762],[64,106,304,774],[64,106,304,775],[64,106,304,415],[64,106,345,398],[64,106,345,402],[64,106,345,403],[64,106,304,776],[64,106,304,779],[64,106,304,780],[64,106,304,778],[64,106,304,781],[64,106,348,349],[52,64,106],[64,106,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740],[64,106],[64,106,802],[64,103,106],[64,105,106],[106],[64,106,111,140],[64,106,107,112,118,119,126,137,148],[64,106,107,108,118,126],[59,60,61,64,106],[64,106,109,149],[64,106,110,111,119,127],[64,106,111,137,145],[64,106,112,114,118,126],[64,105,106,113],[64,106,114,115],[64,106,116,118],[64,105,106,118],[64,106,118,119,120,137,148],[64,106,118,119,120,133,137,140],[64,101,106],[64,106,114,118,121,126,137,148],[64,106,118,119,121,122,126,137,145,148],[64,106,121,123,137,145,148],[62,63,64,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[64,106,118,124],[64,106,125,148,153],[64,106,114,118,126,137],[64,106,127],[64,106,128],[64,105,106,129],[64,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[64,106,131],[64,106,132],[64,106,118,133,134],[64,106,133,135,149,151],[64,106,118,137,138,140],[64,106,139,140],[64,106,137,138],[64,106,140],[64,106,141],[64,103,106,137,142],[64,106,118,143,144],[64,106,143,144],[64,106,111,126,137,145],[64,106,146],[64,106,126,147],[64,106,121,132,148],[64,106,111,149],[64,106,137,150],[64,106,125,151],[64,106,152],[64,106,118,120,129,137,140,148,151,153],[64,106,137,154],[52,64,106,159,160,161],[52,64,106,159,160],[52,56,64,106,158,305,344],[52,56,64,106,157,305,344],[49,50,51,64,106],[64,106,404],[64,106,359,381],[64,106,359,390],[64,106,359,384,390],[64,106,155,359,383,384,385,386,387,388,389],[64,106,155,359,383,384,390,391,392],[64,106,155,359,383,384,390,391],[64,106,155,359,371,382],[64,106,359,383,384,393],[64,106,375,376,380],[64,106,376],[64,106,375,376,377,378,379],[64,106,375,376],[64,106,375],[64,106,372,373,374],[64,106,372],[64,106,359],[64,106,358],[64,106,357],[64,106,359,363,364,365,366,367,368,369],[64,106,357,359],[64,106,359,362],[64,106,749],[64,106,749,750],[64,106,357,359,360,361,370],[64,106,360],[57,64,106],[64,106,309],[64,106,311,312,313,314],[64,106,316],[64,106,164,173,180,305],[64,106,164,171,175,182],[64,106,173,282],[64,106,230,240,253,347],[64,106,261],[64,106,164,173,179,217,227,280,347],[64,106,179,347],[64,106,173,227,228,347],[64,106,173,179,217,347],[64,106,347],[64,106,179,180,347],[64,105,106,155],[52,64,106,241,242,258],[52,64,106,158],[52,64,106,241,256],[64,106,237,259,332,333],[64,106,194],[64,105,106,155,194,231,232,233],[52,64,106,256,259],[64,106,256,258],[52,64,106,256,257,259],[64,105,106,155,174,187,188],[52,64,106,165,326],[52,64,106,148,155],[52,64,106,179,215],[52,64,106,179],[64,106,213,218],[52,64,106,214,308],[64,106,409],[52,56,64,106,121,155,157,158,305,342,343],[64,106,163],[64,106,298,299,300,301,302,303],[64,106,300],[52,64,106,306,308],[52,64,106,308],[64,106,121,155,174,308],[64,106,121,155,172,189,190,205,234,235,255,256],[64,106,188,189,234,243,244,245,246,247,248,249,250,251,252,347],[52,64,106,132,155,173,187,205,207,209,255,305,347],[64,106,121,155,174,175,194,195,231],[64,106,121,155,173,175],[64,106,121,137,155,172,174,175],[64,106,121,132,148,155,163,165,172,173,174,175,179,182,184,186,187,190,191,199,201,204,205,207,208,209,256,264,266,269,271,272,273,305],[64,106,121,137,155],[64,106,164,165,166,172,305,308,347],[64,106,173],[64,106,121,137,148,155,169,281,283,284,347],[64,106,132,148,155,169,172,174,187,198,199,201,202,203,207,269,274,276,294,295],[64,106,173,177,187],[64,106,172,173],[64,106,191,270],[64,106,270],[64,106,168,169],[64,106,168,210],[64,106,168],[64,106,170,191,268],[64,106,267],[64,106,169,170],[64,106,170,265],[64,106,169],[64,106,255],[64,106,121,155,172,190,206,225,230,236,239,254,256],[64,106,219,220,221,222,223,224,237,238,259,306],[64,106,263],[64,106,121,155,172,190,206,211,260,262,264,305,308],[64,106,121,148,155,165,172,173,186],[64,106,229],[64,106,121,155,287,293],[64,106,184,186,308],[64,106,288,294,297],[64,106,121,177,287,289],[64,106,164,173,184,208,291],[64,106,121,155,173,179,208,277,285,286,290,291,292],[64,106,156,205,206,305,308],[64,106,121,132,148,155,170,172,174,177,181,182,184,186,187,190,198,199,201,202,203,204,207,266,274,275,308],[64,106,121,155,172,173,177,276,296],[64,106,121,155,182,189],[52,64,106,121,132,155,163,165,172,175,190,204,205,207,209,263,305,308],[64,106,121,132,148,155,167,170,171,174],[64,106,185],[64,106,121,155,182,190],[64,106,121,155,173,191],[64,106,121,155],[64,106,193],[64,106,195],[64,106,173,192,194,198],[64,106,173,192,194],[64,106,121,155,167,173,174,195,196,197],[52,64,106,256,257,258],[64,106,226],[52,64,106,165],[52,64,106,201],[52,64,106,156,204,209,305,308],[64,106,165,326,327],[52,64,106,218],[52,64,106,132,148,155,163,212,214,216,217,308],[64,106,174,179,201],[64,106,132,155],[64,106,200],[52,64,106,119,121,132,155,163,218,227,305,306,307],[48,52,53,54,55,64,106,157,158,305,344],[64,106,111],[64,106,278,279],[64,106,278],[64,106,318],[64,106,320],[64,106,322],[64,106,410],[64,106,324],[64,106,328],[56,58,64,106,305,310,315,317,319,321,323,325,329,331,335,336,338,345,346,347],[64,106,330],[64,106,334],[64,106,214],[64,106,337],[64,105,106,195,196,197,198,339,340,341,344],[64,106,155],[52,56,64,106,121,123,132,155,157,158,159,161,163,175,297,304,308,344],[52,64,106,751],[64,73,77,106,148],[64,73,106,137,148],[64,68,106],[64,70,73,106,145,148],[64,106,126,145],[64,68,106,155],[64,70,73,106,126,148],[64,65,66,69,72,106,118,137,148],[64,73,80,106],[64,65,71,106],[64,73,94,95,106],[64,69,73,106,140,148,155],[64,94,106,155],[64,67,68,106,155],[64,73,106],[64,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,106],[64,73,88,106],[64,73,80,81,106],[64,71,73,81,82,106],[64,72,106],[64,65,68,73,106],[64,73,77,81,82,106],[64,77,106],[64,71,73,76,106,148],[64,65,70,73,80,106],[64,106,137],[64,68,73,94,106,153,155],[52,64,106,335,401,412,416,745,746,747,748,753],[52,64,106,329,335,400,401,414,416,745,746,753],[52,64,106,329,331,335,400,401,414,416,745,756],[52,64,106,329,331,400,401,414,416,745,746],[52,64,106,335,400,401,414,745,767],[52,64,106,335,400,401,414,745,765],[52,64,106,335,400,401,414,745,769],[52,64,106,335,400,401,745,767],[52,64,106,400,401,414,416,745,746,760,761],[64,106,348,411,412],[52,64,106,400,401,414,416,745,746,761,773],[52,64,106,329,335,408,412,416,746],[52,64,106,335,412,414],[64,106,345,397],[64,106,345,397,401],[64,106,345,351,397],[52,64,106,401,408,416,745],[52,64,106,329,331,335,400,401,407,414,416,745],[52,64,106,335,400,401,414,416,745,746,747,748,753],[52,64,106,331,335,400,401,406,414,416,777],[52,64,106,331,335,741],[52,64,106,400,401,414,416,746],[64,106,331,400,401],[52,64,106,331,335,400,401,414,416,763,764],[64,106,400,759],[64,106,331,400,416],[52,64,106,331,400,401,416],[64,106,743,744],[52,64,106,329,331,335,408,412,416,742],[52,64,106,406,416,746],[52,64,106,329,331,400,401,416],[52,64,106,400,756,772],[52,64,106,400,401,414,416],[64,106,400],[52,64,106,401],[52,64,106,331,414],[52,64,106,331,741],[52,64,106,329,752],[52,64,106,335,401,406],[64,106,399,400],[64,106,401,405],[64,106,351,352,353,354,393,395,396],[64,106,351,393],[64,106,355,356,394],[64,106,351]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"472f5aab7edc498a0a761096e8e254c5bc3323d07a1e7f5f8b8ec0d6395b60a0","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0dbcebe2126d03936c70545e96a6e41007cf065be38a1ce4d32a39fcedefead4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"3609e455ffcba8176c8ce0aa57f8258fe10cf03987e27f1fab68f702b4426521","impliedFormat":1},{"version":"d1bd4e51810d159899aad1660ccb859da54e27e08b8c9862b40cd36c1d9ff00f","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"3b8f725c3d5ffb64bf876c87409686875102c6f7450b268d8f5188b6920f7c25","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"37f7b8e560025858aae5195ca74a3e95ecd55591e2babc0acd57bc1dab4ea8ea","impliedFormat":1},{"version":"e2d5483c9a79900ba9d6012135f18b662b3ca1d33fde4f5e39b71f74e47d6331","impliedFormat":1},{"version":"22b9fab85e85b95f6378b5a2bd43c9d2e15106d760e0e58111c416fe224cc76f","impliedFormat":1},{"version":"fc46f093d1b754a8e3e34a071a1dd402f42003927676757a9a10c6f1d195a35b","impliedFormat":1},{"version":"b7b3258e8d47333721f9d4c287361d773f8fa88e52d1148812485d9fc06d2577","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"49e567e0aa388ab416eeb7a7de9bce5045a7b628bad18d1f6fa9d3eacee7bc3f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"87eaecac33864ecec8972b1773c5d897f0f589deb7ac8fe0dcdf4b721b06e28d","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"4c91cc1ab59b55d880877ccf1999ded0bb2ebc8e3a597c622962d65bf0e76be8","impliedFormat":1},{"version":"fa1ea09d3e073252eccff2f6630a4ce5633cc2ff963ba672dd8fd6783108ea83","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"309816cd6e597f4d4b080bc5e36215c6b78196f744d578adf61589bee5fd7eea","impliedFormat":1},{"version":"bdb44eca306ff5b62bcf2b4e70e96a40987e018029d95565e2f234aad80830cf","impliedFormat":1},{"version":"edaa0bbf2891b17f904a67aef7f9d53371c993fe3ff6dec708c2aff6083b01af","impliedFormat":1},{"version":"89aece12f9cd6d736ae7c350800f257a2363f6322ae8f998da73153fb405d8af","impliedFormat":1},{"version":"d23518a5f155f1a3e07214baf0295687507122ae2e6e9bd5e772551ebd4b3157","impliedFormat":1},{"version":"aa9a92be255ec97f669ea89678fafcbd35d165f65b68ff22685263f6eaeb3c9c","impliedFormat":1},{"version":"fa8b514302736759e491d3df074a61f54ed1a6a69b4aadee05dbcdda53f881c3","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"c9d71f340f1a4576cd2a572f73a54dc7212161fa172dfe3dea64ac627c8fcb50","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"6c66f6f7d9ff019a644ff50dd013e6bf59be4bf389092948437efa6b77dc8f9a","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"ef2d1bd01d144d426b72db3744e7a6b6bb518a639d5c9c8d86438fb75a3b1934","impliedFormat":1},{"version":"b9750fe7235da7d8bf75cb171bf067b7350380c74271d3f80f49aea7466b55b5","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"f79e0681538ef94c273a46bb1a073b4fe9fdc93ef7f40cc2c3abd683b85f51fc","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"17ace83a5bea3f1da7e0aef7aab0f52bca22619e243537a83a89352a611b837d","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"6cf2d240d4e449ccfee82aff7ce0fd1890c1b6d4f144ec003aa51f7f70f68935","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1dc574e42493e8bf9bb37be44d9e38c5bd7bbc04f884e5e58b4d69636cb192b3","impliedFormat":1},{"version":"9deab571c42ed535c17054f35da5b735d93dc454d83c9a5330ecc7a4fb184e9e","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b8e8c0331a0c2e9fb53b8b0d346e44a8db8c788dae727a2c52f4cf3bd857f0d","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"8945919709e0c6069c32ca26a675a0de90fd2ad70d5bc3ba281c628729a0c39d","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"763ee3998716d599321e34b7f7e93a8e57bef751206325226ebf088bf75ea460","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"606e6f841ba9667de5d83ca458449f0ed8c511ba635f753eaa731e532dea98c7","impliedFormat":1},{"version":"7c0d4fc71fe32cedb758c7e3c08715235a51e5a22d184306a59dae10a9c7ffaa","impliedFormat":1},{"version":"ce8a0b21e80cf5f10adc9336b46ffc666696d1373a763b170baf69a722f85d67","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"baeffe1b7d836196d497eb755699718deb729a2033078a018f037a14ecaeb9a7","impliedFormat":1},{"version":"39da0a8478aede3a55308089e231c5966b2196e7201494280b1e19f8ec8e24d4","impliedFormat":1},{"version":"90be1a7f573bad71331ff10deeadce25b09034d3d27011c2155bcb9cb9800b7f","impliedFormat":1},{"version":"bc7221c9a8dc71587ff784120f7707985627282dad0a99439e893a1588651ef0","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"ad444a874f011d3a797f1a41579dbfcc6b246623f49c20009f60e211dbd5315e","impliedFormat":1},{"version":"1124613ba0669e7ea5fb785ede1c3f254ed1968335468b048b8fc35c172393de","impliedFormat":1},{"version":"5fa139523e35fd907f3dd6c2e38ef2066687b27ed88e2680783e05662355ac04","impliedFormat":1},{"version":"9c250db4bab4f78fad08be7f4e43e962cc143e0f78763831653549ceb477344a","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"db7c948e2e69559324be7628cb63296ec8986d60f26173f9e324aeb8a2fe23d8","impliedFormat":1},{"version":"9c2353ef1fb353a1c8f30af2cf104f0bc64ebc2fcdb98c2834d451bd654664ab","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"7fda4c0e3f50513286029633c458ee82cee563cd6af20b92e43b4425c969c146","impliedFormat":1},{"version":"cda4052f66b1e6cb7cf1fdfd96335d1627aa24a3b8b82ba4a9f873ec3a7bcde8","impliedFormat":1},{"version":"703733dde084b7e856f5940f9c3c12007ca62858accb9482c2b65e030877702d","impliedFormat":1},{"version":"413cb597cc5933562ec064bfb1c3a9164ef5d2f09e5f6b7bd19f483d5352449e","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"6cc79183c88040697e1552ba81c5245b0c701b965623774587c4b9d1e7497278","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"82c27d4cf380b0e6cd62628f069b850298d20051f0b7b0a1904fdb38c53fa7a6","impliedFormat":1},{"version":"c97b9278c8ce212c1bdf4fae9c77d58c15565d4ebf663d761a9deb924b6ca8b3","impliedFormat":1},{"version":"8bb6e7ce91ec84336203e87010b1198514548c2e44789752c1741eaac02f2431","impliedFormat":1},{"version":"b33ac7d8d7d1bfc8cc06c75d1ee186d21577ab2026f482e29babe32b10b26512","impliedFormat":1},{"version":"24f8f342c14c911eedfee43074c6a0d0a5ebb5ec984353bffaeadddb3f6a6b1c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"03d4a10c21ac451b682246f3261b769247baf774c4878551c02256ae98299b1c","impliedFormat":1},{"version":"2d9b710fee8c3d7eabee626af8fd6ec2cf6f71e6b7429b307b8f67d70b1707c5","impliedFormat":1},{"version":"652a4bbefba6aa309bfc3063f59ed1a2e739c1d802273b0e6e0aa7082659f3b3","impliedFormat":1},{"version":"d7ca19bfb1ba4c3ef59d43bd7cd3719d8c5ffb60a9b6f402dee4e229f4d921aa","impliedFormat":1},{"version":"0c0a85a19b60f2ec18a32ff051bb1423860977a16b645dbf159baa7202bc633b","impliedFormat":1},{"version":"fc5bdc1d13667041055811568043956c75150923d8b9a32b989ac7588418ce47","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"d3b290cc3c08cbde2b463df2616b948fb32733dafe3ac29b9e6ded26baee5489","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"9558d365d0e72b6d9bd8c1742fe1185f983965c6d2eff88a117a59b9f51d3c5f","impliedFormat":1},{"version":"6cc2961fbe8d32e34fd4c7f1b7045353016fff50df98bc31af7c7d1b4b6eb552","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"a2e1f7010ae5f746b937621840cb87dee9eeb69188d32880bd9752029084212c","impliedFormat":1},{"version":"dd30eb34b5c4597a568de0efb8b34e328c224648c258759ac541beb16256ffb6","impliedFormat":1},{"version":"6129bd7098131a0e346352901bc8d461a76d0568686bb0e1f8499df91fde8a1f","impliedFormat":1},{"version":"7cd7923a36835c1194a92b808068a524c4e7c0ff7bdc8712865800e6963d75da","impliedFormat":1},{"version":"82200d39d66c91f502f74c85db8c7a8d56cfc361c20d7da6d7b68a4eeaaefbf4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"a1c8542ed1189091dd39e732e4390882a9bcd15c0ca093f6e9483eba4e37573f","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"76264a4df0b7c78b7b12dfaedc05d9f1016f27be1f3d0836417686ff6757f659","impliedFormat":1},{"version":"c0fabd699e6e0b6bfc1728c048e52737b73fb6609eeeae0f7f4775ff14ff2df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"4dd4f6e28afc1ee30ce76ffc659d19e14dff29cb19b7747610ada3535b7409af","impliedFormat":1},{"version":"1640728521f6ab040fc4a85edd2557193839d0cd0e41c02004fc8d415363d4e2","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"ec9fd890d681789cb0aa9efbc50b1e0afe76fbf3c49c3ac50ff80e90e29c6bcb","impliedFormat":1},{"version":"5fbd292aa08208ae99bf06d5da63321fdc768ee43a7a104980963100a3841752","impliedFormat":1},{"version":"9eac5a6beea91cfb119688bf44a5688b129b804ede186e5e2413572a534c21bb","impliedFormat":1},{"version":"e81bf06c0600517d8f04cc5de398c28738bfdf04c91fb42ad835bfe6b0d63a23","impliedFormat":1},{"version":"363996fe13c513a7793aa28ffb05b5d0230db2b3d21b7bfaf21f79e4cde54b4e","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"7f6c48cacd08c1b1e29737b8221b7661e6b855767f8778f9a181fa2f74c09d21","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"15959543f93f27e8e2b1a012fe28e14b682034757e2d7a6c1f02f87107fc731e","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"4e828bf688597c32905215785730cbdb603b54e284d472a23fc0195c6d4aeee8","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"4da80db9ed5a1a20fd5bfce863dd178b8928bcaf4a3d75e8657bcae32e572ede","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"f72ee46ae3f73e6c5ff0da682177251d80500dd423bfd50286124cd0ca11e160","impliedFormat":1},{"version":"898b714aad9cfd0e546d1ad2c031571de7622bd0f9606a499bee193cf5e7cf0c","impliedFormat":1},{"version":"d707fb7ca32930495019a4c85500385f6850c785ee0987a1b6bcad6ade95235e","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"5d26aae738fa3efc87c24f6e5ec07c54694e6bcf431cc38d3da7576d6bb35bd6","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"e0aa1079d58134e55ad2f73508ad1be565a975f2247245d76c64c1ca9e5e5b26","impliedFormat":1},{"version":"cd0c5af42811a4a56a0f77856cfa6c170278e9522888db715b11f176df3ff1f2","impliedFormat":1},{"version":"68f81dad9e8d7b7aa15f35607a70c8b68798cf579ac44bd85325b8e2f1fb3600","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"94fd3ce628bd94a2caf431e8d85901dbe3a64ab52c0bd1dbe498f63ca18789f7","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"2470a2412a59c6177cd4408dd7edb099ca7ace68c0187f54187dfee56dc9c5aa","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"ec61ebac4d71c4698318673efbb5c481a6c4d374da8d285f6557541a5bd318d0","impliedFormat":99},{"version":"16fd66ae997b2f01c972531239da90fbf8ab4022bb145b9587ef746f6cecde5a","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc8fbee8f73bf5ffd6ba08ba1c554d6f714c49cae5b5e984afd545ab1b7abe06","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"521fc35a732f1a19f5d52024c2c22e257aa63258554968f7806a823be2f82b03","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf",{"version":"8abe4bd306b0193f69b6c79623d980cf50065eb4df13910bf78c91b84c11f81e","signature":"376b42c2b8b27686d5a8b4ad21f02a5eb0980c401728550fd339a346b4c09486"},{"version":"75572a14d49d5857e480f2a397c3df9624eaa05ba25e5c75ad0a364ead3f3e52","signature":"e6add220edf9e992868695f8d297ba60d29bfcb10ef148c779a6869186feb0a3"},{"version":"cdd8855391d2cefcfbd7d8cf0cf21fc5fa96f73dedf37ef5083c1504d1f6dfda","signature":"009c713bef2c53ab9257fb5e0a3c6c4447426898364849d4be633de0fad8888d"},{"version":"110902392738bd83f6a49bd474805210a5d5befaccfcba05c146da212c9c7e59","signature":"e4cec98f1ba49c4a6be95a07070daadcf64898a0409396762b8a6006bea02bee"},{"version":"a40a69e938ffa4a5c54cc75f0cdbbdb968bdf6f9609c64f43fd387e511ba00d8","signature":"29d094320f6861e442ffe0212fb2ba7e4bce1cf1681a2f4e121a85c599f1046a"},{"version":"ac440b33cb8ccb3d9b2c776d90645b3ae16631d5431cdff4d7f918e92d9c6097","signature":"f4e3f014a94776db30786b918fcd5b3053d070cbd786dd1549cf3e2f578686e3"},{"version":"2556e7e8bb7e6f0bb3fe25f3da990d1812cb91f8c9b389354b6a0c8a6d687590","impliedFormat":99},{"version":"ad1c91ca536e0962dcbfcdff40073e3dd18da839e0baad3fe990cf0d10c93065","impliedFormat":99},{"version":"19cf605ba2a4e8fba017edebdddbbc45aea897ddc58b4aae4c55f382b570ff53","impliedFormat":99},{"version":"f1cb3052f76b6d3a0bbe97e87a7e8ffa15661ac8ff496079daef778a60acf9ce","impliedFormat":99},{"version":"18852bc9e6c3dfe183573ab1e15f983d8172213969e7c1f51fa5f277ed41dab6","impliedFormat":99},{"version":"7618d2cb769e2093acd4623d645b683ab9fea78c262b3aa354aba9f5afdcaaee","impliedFormat":99},{"version":"029f1ce606891c3f57f4c0c60b8a46c8ced53e719d27a7c9693817f2fe37690b","impliedFormat":99},{"version":"83596c963e276a9c5911412fba37ae7c1fe280f2d77329928828eed5a3bfa9a6","impliedFormat":99},{"version":"81acfd3a01767770e559bc57d32684756989475be6ea32e2fe6255472c3ea116","impliedFormat":99},{"version":"88d0c3eae81868b4749ba5b88f9b6d564ee748321ce19a2f4269a4e9dd46020a","impliedFormat":99},{"version":"8266b39a828bfb2695cabfa403e7c1226d7d94599f21bea9f760e35f4ca7a576","impliedFormat":99},{"version":"c1c1e740195c882a776cf084acbaf963907785ee39e723c6375fec9a59bf2387","impliedFormat":99},{"version":"137f96b78e477e08876f6372072c3b6f1767672bf182013f84f8ae53d987ff86","impliedFormat":99},{"version":"29896c61d09880ff39f8a86873bf72ce4deb910158d3a496122781e29904c615","impliedFormat":99},{"version":"dc1d7cc525fd825a3172b066489eaa2048e8e40ce2a56a6f1372ad05236bc049","impliedFormat":99},{"version":"ed9ce8e6dd5b2d00ab95efc44e4ad9d0eba77362e01619cb21dedfdedbad51b8","impliedFormat":1},{"version":"5520611f997f2b8e62a6e191da45b07813ac2e758304690606604a64ac0ca976","impliedFormat":1},{"version":"00b469cba48c9d772a4555216d21ba41cdb5a732af797ccb57267344f4fc6c3d","impliedFormat":1},{"version":"2766bf77766c85c25ec31586823fefb48344e64556faad7e75a3363e517814f6","impliedFormat":1},{"version":"b7d1eaffd8003e8dc0ec275e58bd24c7b9a4dbae2a2d0d83cf248c88237262ce","impliedFormat":99},{"version":"7a8b08c0521c3a9e1db3c8b14f37e59d838fdc32389f1193b96630b435a8e64e","impliedFormat":99},{"version":"2e54848617fae9eb73654d9cf4295d99dab4b9c759934e5b82e2e57e6aaaef20","impliedFormat":99},{"version":"ae056b7c3f727d492166d4c1169d5905ddd194128a014b5d2d621248ed94b49c","impliedFormat":99},{"version":"edc5d99a04130f066f6e8d31c7c3f9ba4749496356470279408833b4faee3554","impliedFormat":99},{"version":"2f502ac2473a2bbf0d6217f9660e9d5bf40165a2f91067596323898c53dab87c","impliedFormat":99},{"version":"21f27a0c8bc8d9a4e2cf6d9c60140f8b071d0e1ffddb4b7dcf6bbf74d0e8d470","impliedFormat":99},{"version":"deb3f73972ef3525308c943cfe417840e64ccfc3a3e3cebaaed4ad51c241e6b4","impliedFormat":99},{"version":"09f1b5d09fd74c119863dd4fea0c13cac164a5b35d9efa4f0ee6c407310fc1e6","impliedFormat":99},{"version":"49ef40d7a022a3c9060581d2d1783e9a0b6eb398330cf950cf4713214892c5a5","impliedFormat":99},{"version":"5256f5cf585954c773ee01a0272df9e13e0fec1d32ae196619c9a14dd4dcfdc3","impliedFormat":99},{"version":"9cbca8447baaa98288175320c3eaa02135d5370881ee2ca2a1c91cf549b34d81","impliedFormat":99},{"version":"1d6ad75caac5c783a41789d1f9ece0da982b4af600d2ae6a7f2dd025d12aa212","impliedFormat":99},{"version":"7cb7ca9e74d896aa6f51557df37c249605ce93cf855c075a91fabaac331d4a80","impliedFormat":99},{"version":"4274ed938e85b119581cd6c65c7242555567eb55906af839a931f0acf6023982","impliedFormat":99},{"version":"8151f274499e464ac8459cbbaae63e2537d112ca41761f5067a05fb0e98e9291","impliedFormat":99},{"version":"825103c182891d61d14191b0bf64b0666663d4fd1b1468a30c203208297f253a","impliedFormat":99},{"version":"5889044020ca262dfc82a80357d75d715a0b9aa6dc3673f58220aefa36818f87","impliedFormat":99},{"version":"4a14e39855699bd4c5b4057d3f0ccf0b2b05cadff1b6942a4afcfb676635bf1d","signature":"452eba5b14dc43642ea83ea84995fae1b43b6c144eb61a344ccd1aa874386cd8"},"bca619a199547e560027f57284812eb1e37475b591a11bdb4425120c030d7a70",{"version":"536073d3aa99dad906e9050cfb09b6fe42a032d5e39348b59c9d4d931ce588fe","signature":"44573f15baf3bc52c1c9f98c4e2e86a79fb252765a117c45c14ce9cf9049c339"},{"version":"d6ee313717e64d979490f406707ba22fdb0be264e7e1751953e733fc8c90f3cd","signature":"83d4c49c71cd59195fb0c1dc1f717e3c58b8b0e14ba1905a7271b2519f2faf55"},{"version":"8cb888e04a0093d373958adee1782753ac05cfd9ba2e13d7dfa93f13c0b47e25","signature":"68dadc9a08e020935a0bdd1ca054ecfb0099a51fdd003dfcfbed966c81923c04"},{"version":"1d7ee0c4eb734d59b6d962bc9151f6330895067cd3058ce6a3cd95347ef5c6e8","impliedFormat":99},{"version":"58becb10c8747d40e4716adaa4ea30444e10826c639373dab40aef05d49abeeb","signature":"91d9269b68b9268d7303cd74e8d80ed44c4be6854a81a13c941db7a43f2331bf"},{"version":"820b0098d74d30089fe0eeed6dac316b765bd62589bb37edfe8777d39a4855cb","signature":"dd6b2afce46d81d7dc20959260b4f140de04d1c7a5f1bacb258481e9ffb16ffa"},{"version":"4ea4e8dadfb80e0c067b823c450d2d10539cf6d64707c0f411765ab30d43a807","signature":"0b3736abc37d24bd8783f35ff5f29658d51460f6d186283a815ea87199936b27"},{"version":"1dc9da51d09b2b70542a3ea3767af7b97d73380b7ff6869b1ee45bc818de1ece","signature":"ce97cdad50cd9d6562ffec0a5535ab3c3f45f9ab0a3046e5a46542716f69cede"},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"42979633ab57d6cc7837b15be8c44c2087a264d5f2ca976afed684bee0925468","impliedFormat":99},"9f21236c0b7bca1030c4ebdd706e66344edd24e22d7427296632240a812f2197",{"version":"b58b573f4e231c54bd58d92276f1ab5ea522d57a91e5872851d605f75f36d00b","signature":"9233c6a47fb6a1b96a6ad7adde996db020aa4cdb0dd702cb3408b5794d440631"},"0fce8a9bd25cb14b8c3e3577883596593a377c3ec2cc775040b625f442b35e38",{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"1b61d562dbf8295515b0f1016ea7b719e46847621988f7420785e5c8668ca790","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"f2611056758a00c757050a56348333c8cb7a72adee9ca6a24eb6231169e04203","signature":"1979a1b474a16ec9545a912d5636fef5ad057f55749ed87855738780dd93030f"},"8bf5182f42ea17acad008ff41e3c0943185e67966fb08da0d96851dbd992aa6e","ee46c526e4a0119c3e8e4edc5f2281d4180b8f1ba0cc01c840f7aff9592b299e","8eda331cd98719945603ff749b1fc960c5e75c7b14850c2c6387405e0f6ea3ce","f08c967d1e8618060baaa840dd0e1c8a31cdc682416af116d32fda7d78b76ace",{"version":"c8e857b6224783e90301f09988fb3c237fe24f4ebf04778d0cbe8147a26fffe7","impliedFormat":1},{"version":"df33f22efcbdd885a1ea377b014e0c1dfbe2e42d184d85b26ea38db8ee7834c4","impliedFormat":1},{"version":"f400febd2140549f95c47b2b9a45841c495dfeb51cc1639950fa307cd06a7213","impliedFormat":1},{"version":"7048016c91c6203433420b9e16db56eec9c3f5d5a1301398e9907ac1fed63b58","impliedFormat":1},{"version":"a4234645829a455706bf2d7b85642ee3c96bfe1cfddc9918e25bac9ce2062465","impliedFormat":1},{"version":"9ff2d17592dec933b2b9e423fab8b8bc20feed486f16d35c75edd77c061de6e3","impliedFormat":1},{"version":"fe9fc5b80b53a1982fe8fc0f14a002941b471213717536987d0cf4093a0c90a0","impliedFormat":1},{"version":"4921f21de15ba1e7d1d5c83cf17466d30d4371bc9acf0c2c98015ebc646702ef","impliedFormat":1},{"version":"f728f13a2965aacfb75807a27837509c2ab20a4bb7b0c9242e9b5ca2e5576d22","impliedFormat":1},{"version":"c340ac804b0c549d62956f78a877dda3b150e79954be0673e1fc55f4a415f118","impliedFormat":1},{"version":"2bfe95f5f0ea1a7928d7495c4f3df92cdc7b24872f50b4584e90350255181839","impliedFormat":1},{"version":"9dfe677f6d3a486eebe1101b4cf6d4ec1c4f9ee24cc5b5391f27b1a519c926f7","impliedFormat":1},{"version":"2766c9a60df883b515c418a938f3c8fd932241c89aba12aedf418e02a73017ce","impliedFormat":1},{"version":"394967bc5f7707312a95cd7da0e5b30b736b7ab2f25817a8fea2d73b9398d102","impliedFormat":1},{"version":"014a4afcc1674f40c7d77ca215e68bb3b0a254c2c925bcaa9932b6fb8f1ccd4e","impliedFormat":1},{"version":"f816538db9388ac17bd354cf38d52da6c01d9a83f0589b3ff579af80cff0c8c6","impliedFormat":1},{"version":"d2e0c04dce50f51b98ee32fd461dfa6e416a4b703c3d6d7e7fb7e68eca57a8de","impliedFormat":1},{"version":"a8995e0a2eae0cdcd287dca4cf468ea640a270967ed32678d6fbf89e9f56d76d","impliedFormat":1},{"version":"b151ad192b8e11b5ca8234d589abd2ae9c3fc229cdbe2651e9599f104fe5aa6b","impliedFormat":1},{"version":"c37f352ab276b3cd4117f29e4cc70ed8ac911f3d63758ca45202a1a052fa9d00","impliedFormat":1},{"version":"c97ffd10ec4e8d2ae3da391ca8a7ff71b745594588acc5d5bdef9c6da3e221bc","impliedFormat":1},{"version":"74c373c562b48a0bde3ee68ac563403883b81cabe15c5ada4642a559cbd5d04e","impliedFormat":1},{"version":"d42fe36f52e0ae09274753ed0fdedb32c42c2ad6ad247c81e6bd9982d1762004","impliedFormat":1},{"version":"87f162804c7a5615d3ea9bdb2c828cd1d1f8378d5e2a9c3be1bd45c12f1fc1a5","impliedFormat":1},{"version":"ccb92f285e2f3a3462262945fa59506aebe6ec569e9fec223d45d41c7c6cd447","impliedFormat":1},{"version":"04e45000cf1381e6a84196aa01ca811ab192ca0a09debacc9e75dcfc6777bae1","impliedFormat":1},{"version":"566007f48fa4cc7d29e4cb5cce9c315ccd52b72300d2d45ab0c639889e42d455","impliedFormat":1},{"version":"4c2f8fb8a8f4afce6e05b9c554c012eb50147084933d78f7d218108740afd803","impliedFormat":1},{"version":"6f72b3ebad0276cfcc7291fd2aefd1fbbd229487ec1acbbad03e798e8760e02e","impliedFormat":1},{"version":"096681898d7131c1183f164ccfec478d99a9efa3744a1b6617116bc6713ed7be","impliedFormat":1},{"version":"2c9626288e967ebb03ec2bc27ea504f6f829b1686f65b86fd5074d53e0160d70","impliedFormat":1},{"version":"4de35fb3800a92324c59c1d2ed28a4dc1284d507d27ef2eed680c2f9ebb32cd2","impliedFormat":1},{"version":"4c3cccf01f76ca4292746b6dfebd6df4382eb7a05315724116feacecf952f106","impliedFormat":1},{"version":"492d1d21f79a8fa084e9dfd8fab89247301a49f1a0c12765b99c30a0ad8629ff","impliedFormat":1},{"version":"69872cabf40dd4399939184cd7c5e47da62a9df811d3f56d193a437817a85b21","impliedFormat":1},{"version":"19d00382e69115eeb1214d9b865030b61ec14f1bd5e91fb6e2b75acf5a6bef80","impliedFormat":1},{"version":"3c3045d2661ef44458559f6bd48ebb47ccdfcbc513d859dc60c5e18e0544ac87","impliedFormat":1},{"version":"e1de43a7fb0dda59dd9ed398fa306abdcb99da16b54edd3c7dc5e1a45d7e91df","impliedFormat":1},{"version":"8301449ecbf03d5f893c298863fb66d97f1becb31f157276bdba7c708174a5be","impliedFormat":1},{"version":"a556bdee2de2416a026022aeb260b5d684da34e322b5a95c7503143e51787b4f","impliedFormat":1},{"version":"e8bc04f55c1b3da172412955b2785de54f2e1f2c9cb8949c0748ff143525310e","impliedFormat":1},{"version":"683ad3639d8a96cfc782d672c44797d13c735ca9792d6c57e2fa5ada89e18e0c","impliedFormat":1},{"version":"25b171a82c55909032e85448d89f8409e045a24a2b0458080bf304845b29b6ba","impliedFormat":1},{"version":"ce25751e5374e1f13100276ecf2e2e8aac4d4c7229f762b3dc206639640954b8","impliedFormat":1},{"version":"2f0a5a8ef5c6f5866d3caf04151422d05e64765ee250a7e9defc62908cfe73af","impliedFormat":1},{"version":"79726fbe0854724f5bc3f16d4e40c0b320bbaa7a6296d1d782d70909f3b3a2eb","impliedFormat":1},{"version":"6d391889910947acbe7d110271463ef74e7f65ae372d355756b1a6b0a987168d","impliedFormat":1},{"version":"b3dadc705ad865a3acd5b40561ac0dcbce38fa28872ecb903eb586bd64cfa8b6","impliedFormat":1},{"version":"8181adc6c7145eb6b2596249f3a2e1ff2fa7ebc604e73fe583f98c4b40916d6a","impliedFormat":1},{"version":"dc84bb520982504eb30b09b870b32be8eccff2cd9beb963efd6a78971ae104b6","impliedFormat":1},{"version":"bafdca74b47f54e116a9f2d589d39f1c677c777198b96a677a2d2f628b43c8f5","impliedFormat":1},{"version":"9ccc168fc7cb696b5f60f216c72881db1f6c2d8e39eadd6c68130711f8eddd19","impliedFormat":1},{"version":"6187a2dae6a9d910f272bfae324625437343f43a6ff48a28a5c5dd5e9cfc2d5f","impliedFormat":1},{"version":"f063f87a44b1e92948bd5ef6db5b8cadef75218126e75ff02df83196e2b43c4b","impliedFormat":1},{"version":"333df4996910e46b00aa9b7c8be938f6c5c99bfbf3a306596e56af9fff485acb","impliedFormat":1},{"version":"deaf2e9bfb510a40e9413d5e940f96bf5a98a144b4e09a0e512efe12bfe10e9b","impliedFormat":1},{"version":"de2395fb1d7aa90b75e52395ca02441e3a5ec66aa4283fb9ced22e05c8591159","impliedFormat":1},{"version":"64be79c9e846ee074b3a6fb3becdbb7ac2b0386e1e1c680e43984ec8e2c2bbb9","impliedFormat":1},{"version":"9c09e723f7747efc123e19f0ced5f3e144bbc3f40a6e1644a8c23437c4e3527f","impliedFormat":1},{"version":"36fc129c8e3ad288656ea0e9ba0112728c7ec9507c75c6a3bce6d66f821a31d5","impliedFormat":1},{"version":"3771470dde36546305e0431b0f107e2175d94e11f09b116611156f134364127e","impliedFormat":1},{"version":"18c6715ca6b4304a314ff9adb864bd9266fc73813efd33d2992a7c6a8c6e7f73","impliedFormat":1},{"version":"90cde8ac2173d2008c51996e52db2113e7a277718689f59cd3507f934ced2ac2","impliedFormat":1},{"version":"69d01aac664fe15d1f3135885cd9652cca6d7d3591787124ae88c6264140f4b1","impliedFormat":1},{"version":"55ab3dd3c8452b12f9097653247c83d49530b7ea5fe2cb9ef887434e366aee8c","impliedFormat":1},{"version":"abd2ce77050bfd6da9017f3e4d7661e11f5dc1c5323b780587829c49fcac0d26","impliedFormat":1},{"version":"d9dfcbbd2f1229ce6216cb36c23d106487a66f44d72e68fd9b6cb21186b360cd","impliedFormat":1},{"version":"244abd05ca8a96a813bf46ddb76c46675427dd3a13434d06d55e477021a876ef","impliedFormat":1},{"version":"5298f6656d93b1e49cf9c7828306b8aefc0aa39ac56c0a1226f1d4fba50a2019","impliedFormat":1},{"version":"93268ed85b0177943983c9e62986795dcb4db5226732883e43c6008a24078d7f","impliedFormat":1},{"version":"843fa59ad0b6b285865b336b2cbc71cdc471e0076a43d773d580cb8ba2d7030d","impliedFormat":1},{"version":"aa2d452401748a5b296bf6c362b9788418b0ab09ee35f87a89ba6b3daa929872","impliedFormat":1},{"version":"a4ef3c3f6f0aadacac6b21320d0d5d77236360e755183802e307afd38f1cbcc9","impliedFormat":1},{"version":"853b1daed2861381ddda861a0450ce031c280d04caec035cc7433872643871c6","impliedFormat":1},{"version":"1058ed9becf0c63ba0a5f56caaafbfd0bf79edf2159c2f2f2fe39a423ae548ae","impliedFormat":1},{"version":"8b6eab9a4a523909ee1c698a10d332c544aa1fb363f482fe60f79c4d59ca2662","impliedFormat":1},{"version":"f2b2c244b10a8e87192b8730ed5b413623bf9ea59f2bf7322545da5ae6eae54b","impliedFormat":1},{"version":"92bbeada67d476b858679032b2c7b260b65dbccc42a27d0084953767d1a8cf46","impliedFormat":1},{"version":"545afad55926e207ac8bdd9b44bb68f0bbffc5314e1f3889d4a9ad020ea10445","impliedFormat":1},{"version":"4c8ef63125ed4d1eef8154ec9da0b6b7ca9effdf4fa5a53ab74a9d73c9754ff5","impliedFormat":1},{"version":"e76a7e0b4f2f08e2bef00eacc036515b176020ab6b0313380dd7a5bd557a17f0","impliedFormat":1},{"version":"fabd983e4148e2dce2a817c8c5cdbbc9cf7540445c2126a88f4bf9c3e29562b2","impliedFormat":1},{"version":"a80c5c5bab0eb6cc1b3276ac276e5b618ead5de62ec8b0e419ea5259af0a9355","impliedFormat":1},{"version":"d8cf5ded7dd2d5ce6c4e77f4e72e3e1d74bb953940a93d3291fb79158e1afc6e","impliedFormat":1},{"version":"bdb10c13a7ababaae91932d0957ef01cd8a789979cd0b606a2106d198848b16c","impliedFormat":1},{"version":"0fd3f9fed4dd35b1b07c18b4c3f612b7542c91835ad8a26e0e83d905709543dc","impliedFormat":1},{"version":"441b5f5ac4619df9dbf436ecdb9f0bbaacf8696e6fdb2f81c6f5b1db76f5a1c0","impliedFormat":1},{"version":"5d2284728400ee7b4fd1acd69e48d649d4056916cc70950a0000e5d70a32a750","impliedFormat":1},{"version":"27ef186120f9e7ee90686aa7ad5163eb5c7f4cdeb19bb87850c4a5fe4b8e05e8","impliedFormat":1},{"version":"4f1f9e056e0c9d23031367b4c7e7eedffb3e1ed58e64befc90749ca4dd9363ee","impliedFormat":1},{"version":"2b0ccf76bcf10f61612135f951a74327ea0a2d5a80f397b767e0e0b08cdac265","impliedFormat":1},{"version":"4e42e643f05a7fa69581a1a697a1cf967d9b2657dd9dd66e59d90500ec053ba0","impliedFormat":1},{"version":"0ea8485dc0bb7d2a258a93b16305e17fb5be9f877a9df88de7023a9821c537ab","impliedFormat":1},{"version":"5c221ba5333b775cef94d4a30076cc30730cceba649e9d30c5a7224a698c8825","impliedFormat":1},{"version":"cb61ba4d5b5e39ecafe74ad7d88dc8e67defcffe15fb9216addee0fa06d5df38","impliedFormat":1},{"version":"d83e8f0c10477fb4a7729a51aaad853cee81e0e332581dd2244da09e5526b5ff","impliedFormat":1},{"version":"c8933a5b693306696e78315dca1fa57f6f5493fed44cd90aa2d4a4d354dd6516","impliedFormat":1},{"version":"af8e2bf3df20cd2e6b8d744dd83499e174609d0c88864af3f30cd43671e719f5","impliedFormat":1},{"version":"4186fd8b51535399c7ad1edc08f9c4ebb2a9e8e327b131cc1f950c5dfbb0c358","impliedFormat":1},{"version":"b92965f503f55830702062f9e0832fabfbded49ff28728686a6fd84aa32f454d","impliedFormat":1},{"version":"172dbc7933ff46ba3b2efe8b5c7828fd4f0d45c08755df8200213b6055d57f2e","impliedFormat":1},{"version":"89e2ec7ed42725f89fa537c38f20144782bec6c5710e467a46a647647c8255cf","impliedFormat":1},{"version":"5165882999957fa041e423a4fb64627dcb310bf50183af70a6ee8e10a584b0c3","impliedFormat":1},{"version":"390997d64e1e5721fa807aa9e05c97086f58627170d9a7ed84b127126a3e5202","impliedFormat":1},{"version":"00cf8ed9b47860a5f8cc0a65d7a41f85a7026f68162057728abc9249943a8629","impliedFormat":1},{"version":"fc8b086c99f6d721eae8125a96833e0ba1762d00b80aad1d55c7a8b59d007466","impliedFormat":1},{"version":"ff72c74ccdc5570c4a75a93e605a5586596444d96048d52c72f322da183c556d","impliedFormat":1},{"version":"b8755448066177191edcd0b7e19e7fe44d69ed6dc97b16a420b7aa9070e2b850","impliedFormat":1},{"version":"822a0c843f492ad2dc815080f24d4ddac4817a9df0de8cd35830e88fbbafbbe4","impliedFormat":1},{"version":"467865324b9f66a1b8f68d9350c5aa0e749eec499e4863fe017b16ea8bcaccdf","impliedFormat":1},{"version":"863bd77d5546877e19594759a901cc7b75da8d27336d4351e54413ec12032d09","impliedFormat":1},{"version":"a17a62c94da321c0bf2315c35033e313daf1298a75aa43a01a4daf6937980c01","impliedFormat":1},{"version":"851271a09d3c2db3eab80d64beb468d775a9818df06a826ba58925c900231ccb","impliedFormat":1},{"version":"da2c95cd1f0f9cc19f3dd599b4c8fb0930eccb78a5c73f683e7ea98262d2f55e","impliedFormat":1},{"version":"e40d3ca85fb1362763067506784635aa28863640cf7cf9be9e8c1c521c0fbbd5","impliedFormat":1},{"version":"77a2f84e19aca9d03efdf0c484aba8daad3fd23c70b72e63aca78fadf71b448d","impliedFormat":1},{"version":"00c5b6248c69e66729e5c4acb239db849b1497d7eb111fed3eba979432461ebf","impliedFormat":1},{"version":"8e13abf75e9394f3a4b1d0b3f99468e15f4c7e2115153d2a1ca3c0de035bad1c","impliedFormat":1},{"version":"07097dab1c068118806fecb8544aba3cca30965d0864b1998af1bee326a9990c","impliedFormat":1},{"version":"c490ca6eb9149c28e4f2def6acb1bc058d160edb40fd249cf2a70c206a8cfecc","impliedFormat":1},{"version":"7c9aab9a76abba65aa6389e41707d57ea0288dac9a8b6359465dcb462d2cfaa1","impliedFormat":1},{"version":"97fbe30fd1b61b26f807ae1c78b681b0999af71cd9604c08a1d45e44690ca0c2","impliedFormat":1},{"version":"ef91bf45a3d149db0b9e4e612ed1400c35f6a3d2a09669d1441add612d5f16b8","impliedFormat":1},{"version":"dacebdc0353168f259724bccfd273b892e883baf36cf3dee21cf4178f3ef9ea0","impliedFormat":1},{"version":"5416fb031a72377c3c17faa2041428a5f19f9d46a70b645dda6e3293fd0ca8ce","impliedFormat":1},{"version":"95611472fd03e0992070caa3a5387133e76a079719994d237947f6bcf67f9bca","impliedFormat":1},{"version":"6141d19bfa7698f362e84460856ace80a1eac3eab1956b188427988f4cd8e750","impliedFormat":1},{"version":"1acded787e1fc09fd56c004d3ba5b719916c06b61976338a92a2f04ec05cba5c","impliedFormat":1},{"version":"8fb0d41cd90f47b9148e4a474fb03484d9af1735871321a2f57f456e40a7e319","impliedFormat":1},{"version":"a25cd4cf54bcdd109dd46274e2369fc1cad6d74350b5642441d2b9eef515c3bf","impliedFormat":1},{"version":"af4b9f16e50a0ae803745150e4c091e86ab95f3dac649286af28505258f7a189","impliedFormat":1},{"version":"3d209a6c3c53366b3bcb72dcf04a7ceda57362cae6ac47dbb783321934a0c5ad","impliedFormat":1},{"version":"4766770027d93a5ad1d4cc880cce405b4c6f67c64303ab34b347d6428eb783f2","impliedFormat":1},{"version":"43d2bec085f0fab54d7b9dfa3f5c5ce65e30da6a19d82ed37d1d41867682f86e","impliedFormat":1},{"version":"e5efb9781a0ef18d60cbb8afa261489efd260d87642c095cacba0b09b2684fcf","impliedFormat":1},{"version":"775ca7538a2f9bc674ebe5f3cb8aa8fa346ef4c1faec4c5b13b4784a744854dc","impliedFormat":1},{"version":"c0037c7c6fb8031f7047a1ccdb381762862b48429e9ab07bac8fc35fc5b5dd14","impliedFormat":1},{"version":"af4db63c6e4d55df1ad7f3dabdde31bc30555debf1cd6b79ea65a36c52bf199c","impliedFormat":1},{"version":"d291ffc234a58061b8192f74422f2e51fb87f6d10e82c30a555bccf9641b3e38","impliedFormat":1},{"version":"6d683695e9765b29165bb0823f88755211d48949f0b95a9a4236802afddf41e1","impliedFormat":1},{"version":"8fcd568ba937d867544cd8e726f35a515690ad041387fdebc93d820c8720e08c","impliedFormat":1},{"version":"81a0ff507ece65e130c1dd870ba79b8337c1fd345db7b154a2749282c994d2d5","impliedFormat":1},{"version":"64e2ffc72047548fa3c04095abb9dab48e2eaac169161fd2ed3564dea0c67e57","impliedFormat":1},{"version":"b525d2fc6b694512a877219ebba25d5fa244f99253a5bbe6c6421f8d71b1c806","impliedFormat":1},{"version":"d695f0d65f5fba0e275cf7801399575c272b86e7bf8e70133f8fc03517305b1d","impliedFormat":1},{"version":"0836f15e5e7dcad64fd50d49a39267da34371d1c2b803b38dffcfabcd2ff604e","impliedFormat":1},{"version":"56eff313f885482d44e4aa7cefdd55f7d0d92a91c1ddf9cd73c533abc36f4dff","impliedFormat":1},{"version":"022ff6b725f6ab95b1c4d229893b3047002a9c1fab6798c8fe63797ec1e63dc5","impliedFormat":1},{"version":"5e64d04301aa6ae6bf0f3435d07804889342873ab2875a16c827db9e6543002d","impliedFormat":1},{"version":"0b8c3effe0c65129d493be140da1a83eb61a1e83481d441dd2bc359a926b453e","impliedFormat":1},{"version":"0816c977ef73d99cbb134427a83f91ca6f7fe00eb7544118320d613a85da6879","impliedFormat":1},{"version":"068db2994f5926e888462b0852ada2c24f2cb50028f034f475407957ca51c6cd","impliedFormat":1},{"version":"59106b469557319ad26f40f054861be3fd2cf09911c3b66df280b9340a1d9caf","impliedFormat":1},{"version":"69e8e2dc21b0636f671485867555439facd68ee9e234fc9190c3b42e7f1a74e9","impliedFormat":1},{"version":"5fb0c0cae187f6554769cd4ff36575ddbc43078a4fdf9b17a5c0c25dfa9a9f2b","impliedFormat":1},{"version":"918d99a7aa4b7f5edf2cdcb33c163837a892f43b9e22c10634d61d0a28fc09a2","impliedFormat":1},{"version":"097b0d1e237bfcc97411fcae19a484a717fd4055a48e98ade5cc28b26afd21f6","impliedFormat":1},{"version":"5fb0eef64cb75951f7ae2dc6a704aa0567a25a39a616a5dd10ba7cfbfcf73b78","impliedFormat":1},{"version":"0a649cbc59a47f224d0494a6d5167a803ed049f995ade8423c7cb62bb6a38b64","impliedFormat":1},{"version":"68e25d1a79523b18fae630ca57100ce2dff6c5023376a2f57e9d0d07e1b9b8ef","impliedFormat":1},{"version":"1a505f408bc7d484553b7701f712dc52e1174648baff7d6c9c1f38b5cb83b772","impliedFormat":1},{"version":"b19badf31df455f10cf44fda9f6a0e0b42d6e970ac122b66c5da5d683fa270d4","impliedFormat":1},{"version":"71b6fe5c85eb877c3e3ed2f142b95a69f97905c34f11fc6d9052a4317e7f6bae","impliedFormat":1},{"version":"bd55536c0f989f59af6ca66cbc8121485f978f4e07c3df1688623c5f898058c6","impliedFormat":1},{"version":"dcb868c613ccd06b1a3ff56ee235e5987820c0c8bbd77fedc9af4dcfdd4c54bf","impliedFormat":1},{"version":"f3d1b3cd130e3cd67fe8e06256deb5d678243c6976ea498c81a48e542efb7529","impliedFormat":1},{"version":"772b881836efbdceb7ae8d3ae038f14ec83444397d8429b866312dcd78714dde","impliedFormat":1},{"version":"314d516eb3bf1eda07e898935edcbd1e74739493c8ad444e82181f8a020eef2c","impliedFormat":1},{"version":"8cfced8e57c64563f91e90a76a6df2d8f934c90a425327a9ed5393bc88c27d97","impliedFormat":1},{"version":"67bd754a8775c81794c9fc84b1a1e9fca44a402fa7d93fcdad4ba2d37737d929","impliedFormat":1},{"version":"5128e32c57068eb09d5189eb68681ca7d0e5e4b0cdedecbef9c67689f0970876","impliedFormat":1},{"version":"7fcdedd29146e5a2a6c86eda652f8485a1eeda1b8646825bbf729023f6ea6013","impliedFormat":1},{"version":"86b9b361ce8ea1d9f04e15bbe49e5ac72e5f97d8cfa8592930d32f267729a201","impliedFormat":1},{"version":"671f5e3a931c2737f8dfa43b34c4a320eca27fc6584ecef890ddd7374cee5cb7","impliedFormat":1},{"version":"ff213315eebd3ff05e01b383f704d79d8139aad5cb0d6a13c082f2e29625adbc","impliedFormat":1},{"version":"83ed351a10ef17b7811d3c06fc2775e36b6911278326d55da8d1eef8ff2f29df","impliedFormat":1},{"version":"2f5f146f1d6c04cf89ae0e9b4cf2b064b2ce4319ba6a5bf18ab8fb29db1cfd1a","impliedFormat":1},{"version":"7fc2b96a8465725bf774bd490c383edd5ee3dfe0d38c13551d082cae2de4041e","impliedFormat":1},{"version":"9eaeb6696e4218cb5bded9ee27c3e95589ad4af1fd4b97ccdca43eadd62c94d5","impliedFormat":1},{"version":"fd580a99cb9bb84288da00eea67dce300bdef06d4da2a727c0fc466d2922dca2","impliedFormat":1},{"version":"b82809d4468b6ba4d72437adaab7ca273547c59974e954c48f655a4b1bdca429","impliedFormat":1},{"version":"c6455d4ed4f7337bcb885c61372c7d9b03991995ed73e29023bad502d1336f0a","impliedFormat":1},{"version":"b5e6f0491b5a2002eb9b1146165cf915ee58e0fddf7f2adb5f2aa4bc44b4fb83","impliedFormat":1},{"version":"f534aef095a62fb82f57768fc52995d3e58d95e0a1671b0256a4704802aee818","impliedFormat":1},{"version":"cdc6f1d471882782cdac7442dbdad65aede5f749c09799a84918bd916eb6d6db","impliedFormat":1},{"version":"2475197472c609662f09660e3964a86aa355cea0e671653656800690bb508b7c","impliedFormat":1},{"version":"b4067760d0447747d82b6848b640168d656d0b916c3add2ec94c3c4dea92fc9f","impliedFormat":1},{"version":"c6c591a17f9c0c2821baf15f775f5c7d6dd4a0786365ee9c182d7a97e38ad96a","impliedFormat":1},{"version":"ede44ddf9d274a859e9f1f34333d5f0e8cf2167c3265f81d5280d37b872b4552","impliedFormat":1},{"version":"6317aba53c9152998bb1f8bd593f55730084d05c00c774ff72a3aa4d687a6dbb","impliedFormat":1},{"version":"26f1bd15980b19d925be98afde3918a6a181435b87e9b7c70d15726ecbfff0e5","impliedFormat":1},{"version":"57af4faf6847adff5048f82929b9a7d44619d482f571534539ae96a59bb29d3a","impliedFormat":1},{"version":"874770f851ac64a93aaddfb86a2f901f158711911fee14a98a67fe32533ee48b","impliedFormat":1},{"version":"3d933e519ad9cc8cf811124f50d0bc14223cdea9f17adf155f11d190ceb2a6c8","impliedFormat":1},{"version":"d5dfce61a7bf994d2cb711af824efa4de9afa5854d34e6725b9c69d925b6b2dc","impliedFormat":1},{"version":"f77d1e10417bf43f8fa5d18916935f342d4d443e371206ede7239faaf9abbbb8","impliedFormat":1},{"version":"c94e0b8815b72ba924c6b8aa666b25903d949a7ab0d38ed84e4bf65da3d06a3b","impliedFormat":1},{"version":"15db84e660fdcd8468f23973ab83c31d7fd28bdddb30b0aed16cfa051aafe900","impliedFormat":1},{"version":"7c01cbfe181c0e10044831b899de6c2eec4fba32de1f1cca12742d2333c1345b","impliedFormat":1},{"version":"62cb1636513ef26d3ea83fb5d2369cf8569d04aa30d8fd7f5327d0e10841635d","impliedFormat":1},{"version":"8282a076b07dc3dc6b2265377627ab3860cb6a1bcbae85a5a4006dec4c9f0066","impliedFormat":1},{"version":"b273c241dd08c6276fd35be413c64508ae50f847fa052bf7781799b51da8e9e9","impliedFormat":1},{"version":"3bc0bbef6d7fb63002fe80167db350b9677cfce5872c0cc7ecec42ba8248ded6","impliedFormat":1},{"version":"4880c6a85442934b81f3b1a92cb6b43df36f8c1b56b6822eb8cbc8c10c438462","impliedFormat":1},{"version":"1bfdd8c1710a3d1654746ca17f512f4a162968a28e1be1a3a1fdd2a8e5bf385f","impliedFormat":1},{"version":"5405aedafdf272dde53b89036199aaed20d81ddc5ec4bea0cb1ab40232fff3fe","impliedFormat":1},{"version":"db2ee45168db78cc83a4368546e0959318374d7256cbd5fa5692a430d5830a59","impliedFormat":1},{"version":"49993b0eaa14d6db6c334ef0e8b1440c06fee2a21ffd4dea64178880bd3d45a2","impliedFormat":1},{"version":"fb9d9dc0a51cb4014d0e5d5f230ec06ffc4eb6caae6eecfe82ea672b7f3c6967","impliedFormat":1},{"version":"84f44079a0793547d3a629feb8f37d8ef6d07cb5bb5fdeefd887f89e9be871f6","impliedFormat":1},{"version":"295c5ec088a1bfc286e8dbdc9807958588979988cd7a74ad32be774a6f6ea512","impliedFormat":1},{"version":"f15129c62ed04410ac0a3326ae6fa5ef7229bbb1b0cbfa252b5c558505a38253","impliedFormat":1},{"version":"4bf500d9a554d43cb9133d60f1b3f58ca98b0f794486d1377f3effc551b40faf","impliedFormat":1},{"version":"536f6a9208c89eb8f0a5eeda629175b0fa62ccd22e387af7f35297fa2af6897d","impliedFormat":1},{"version":"8c95fe5a655ea1c78f0335f8da58e70d98e72fe915987c3b61c6df49d6e276d1","impliedFormat":1},{"version":"4bd434d3055d1b4588f9d7522d44c43611341de7227db9718a700703c608e822","impliedFormat":1},{"version":"935507b695f420fddff2d41ddc12ff3935931a3f26d6aa65afbb276bfdf51cb4","impliedFormat":1},{"version":"e851c14c9dbe365592f5084c76d4b801e2f80302f82cebbe7c2b86095b3ae08a","impliedFormat":1},{"version":"b5c90d931d285d9d1c4cb92d71f2719e28caaa9ca062072d0bb3b69300b436c2","impliedFormat":1},{"version":"40b3e953e9ea51a86a1e5b60a2355eeb780f2f8ce895ece252910d3e0a033a16","impliedFormat":1},{"version":"0264b432aace8398f174e819a0fc4dc196d5aed49ae65aae071fc2ec8e6dc029","impliedFormat":1},{"version":"3b29bb23855a1924264c3a30b5c73b00c52a57c2ffb5f91c48c9572e71048f19","impliedFormat":1},{"version":"8b9b2e76db07d8926bcc432c9bdfb38af390568951b39fe122d8251b954f9ed2","impliedFormat":1},{"version":"96e85c6fa102741a25418ab2c8f740c994e27ea86fd6518a17ec01a84b64dd5c","impliedFormat":1},{"version":"9525b28a4fa959c8d8c7d6815f842f78c67b40def9160afdced5c9daf14cd4a8","impliedFormat":1},{"version":"0e59a6944a52f52138315b6658fb1d217fa017b7abec12006c491d51e07fb56d","impliedFormat":1},{"version":"cfa8acfeb9d68702aa6249b7295ca73ea598e441f014cd4184b6e2a3ea9a275c","impliedFormat":1},{"version":"21b0c616f61cd6699135a34a500f7df30022abf9358ba612f10668ea3c988e00","impliedFormat":1},{"version":"9ad1d0b171f7bb9f484ad156e97f0d8e760a5fee13e342831669c7b2d1137a30","impliedFormat":1},{"version":"7ccadd4ba126bb2c0564bfb85ddd7d084aa5f2880cc2d0149fbe183fd5ceb6d1","impliedFormat":1},{"version":"ebbde5a8a356a1547ac6ecdfba7547036a5ada116011cb96634c32df1cf69084","impliedFormat":1},{"version":"e703eded767e3a944ac1f7c58c201a0821da1d68c88d6ba94bb985a347c53e42","impliedFormat":1},{"version":"99953f3f1f9deae755b97ed3f43ce2bee2ae1324c21c1e5fa9285c0fe7b5077f","impliedFormat":1},{"version":"2afd452bfa6ebaacbead1ca5d8ab6eda3064d1ea7df60f2f8a2e8e69b40259e9","impliedFormat":1},{"version":"dae0f3382477d65621b86a085bdb0caabf49e6980e9f50ee1506b7466c4d678d","impliedFormat":1},{"version":"e5793b3f4cbd73c841790264db591d3abe9bd09128302a2901fedd2353ab24d5","impliedFormat":1},{"version":"41ed74193a13f64a53705a83e243235920fd58d4b115b4a9f5d122362cda7662","impliedFormat":1},{"version":"478e31b207faa7110b04f6a406240f26b06243eb2d2cff3234c3fc8dd075bf6c","impliedFormat":1},{"version":"ea917cdbfb87d11cd2f8b03e357b22b1114d0ba39ce4ce52b1a4f0dc10c6c20a","impliedFormat":1},{"version":"3ef0c5634d9aabee346f9ba056c1c5d977f2e811f6d13c082614c9062cd4b624","impliedFormat":1},{"version":"1ddb49c7f8fc4b9e4da2d5ddca91b4e2763fe7d17aa79940bd60406f3e2739bd","impliedFormat":1},{"version":"d5b01eab562dc40986a5ceb908519dc7f02a7ded2bcb74318317a75714dbc54c","impliedFormat":1},{"version":"b19ef44e991aa150a19a9f84be1fd1c4d86496241300fd904216762246700623","impliedFormat":1},{"version":"87df6cf2565a88dae3ec50e403e9ef6b434ad3e34d922fe11924299018b38e58","impliedFormat":1},{"version":"9d999d30b52fb0b916f7a64c468f6d5c7a994e0c1ef74d363562e9bda3cb8b99","impliedFormat":1},{"version":"9b1b05f88ded21046391276ff60d2d987bf160d77b40399e07b7bdbfe2e38b31","impliedFormat":1},{"version":"628177f7eb0314f0189e4d90f663233606b3936ce391c7f98da46105ae402c65","impliedFormat":1},{"version":"3c80bf6873eb3b95cd590aab8eb1612f0f7cef6a30b3f49535844f7cecd99351","impliedFormat":1},{"version":"da367ede4ebd5ff4cb1cf9e6bc8eb35848b23c57c22c53360e53dc772c7be8f9","impliedFormat":1},{"version":"4337acbd8896efb7e7d8d6e0eca78607fc7c1a9ad2bb228240f13f97b3492f1f","impliedFormat":1},{"version":"505c7800f8195961302dee715870b7212bdfb667e5e47de76447151dd35a40f1","impliedFormat":1},{"version":"cf5a3eed6cd493d198b0c1eacf70486d8bd527fc411d57660caf2c93b5ea0fb6","impliedFormat":1},{"version":"900e344adae3c65076c9ba4ee1a77c6db19fb0c7e54d7ce23c28ff8d272cba26","impliedFormat":1},{"version":"bcc5186a38d1eecf60b2c4d1e3eb9abd8ab91cb492f384a9d2ed7bcda2abd0d5","impliedFormat":1},{"version":"0ec1b41954fea9def7d9d87e0f3beea2ba3ec5b7beb769f308cfe32ad2968669","impliedFormat":1},{"version":"51189c085256f11da13b22792f1d7c928f8a8e9d9b6c7b38e956e72a51ef8219","impliedFormat":1},{"version":"504f509e23f2ab3a8018533925c034a340fbce4af9e77a1f71a8ddffbe0c19fa","impliedFormat":1},{"version":"635c049483e13e1dc8bee72dde300c40d350046cff59b202d41a12ec8c733d27","impliedFormat":1},{"version":"7fd8d5f70ea745e1a0338de7aaacd9bd6ff086ce6de75dcf91749c77d1e23831","impliedFormat":1},{"version":"78d2a7795bfd2be490937e8b01968a0acca8a6bdf5933570bc013806049d4175","impliedFormat":1},{"version":"db49833b6e9aa54b535076f40615349a7465005367a787b50ba7b92421e26442","impliedFormat":1},{"version":"6a936fc917de40c44ca81331ee7d7a71dc30ae1895871e7be7b6ed85d96cc41f","impliedFormat":1},{"version":"bdd2a764cf87c4ab1efd7084597d1ca4ba17f6b6496553095ecca5a14b5d4278","impliedFormat":1},{"version":"ddef8e6676fd572ee3de174ad28df05c7b3803542d7318482b8f98779ff25612","impliedFormat":1},{"version":"34eae3bc7f5bfb515d2ec163ccd4b63fdb73ad7f66564707686d84f42a8b7c35","impliedFormat":1},{"version":"d240d106cf9bc3c0efdb323d807b944ce16ac5d837ecef5b75f1e66d606b2a72","impliedFormat":1},{"version":"639d5a26be297431e0bcc9f71f969fd7d84319fc03b5e1c672ea10fb0094c616","impliedFormat":1},{"version":"770c3e6367c2802c027c0b1f86928f288e11ad77ac2f454d7f682460eab30a0c","impliedFormat":1},{"version":"c9dd2760e0419a059cf733c38ef5d44eeca3fc647f9c201d88656e5040f5a3a7","impliedFormat":1},{"version":"16766b8f3d1bba66ac8167e6407be6c490d4462e802f67c140b1174869db5b67","impliedFormat":1},{"version":"f9267391788ac81ca54dfae32c5d86e99a19abaee9b172b2f8d98a3c2b578a2f","impliedFormat":1},{"version":"92441638c0fa88072ef9f7b296a30e806bac70219ce2736ef33c8941259d9b70","impliedFormat":1},{"version":"8774efbaf39f9ea3a0ff5b1c662c224babee5abb3d754796278e30eb2e51ae3c","impliedFormat":1},{"version":"e634b47a7d3f9468572a7c9af1fe2f52687ee1afb23ba5568205a7a4c55662ef","impliedFormat":1},{"version":"1cbef47ee169c717a1ef7ea91b15582c61ac721fd5f5671de95c3df9f026db9a","impliedFormat":1},{"version":"0db0ee49f803c9b901dfe06be9c8fb6a1c05f98664ca34c68e0da575eae76f2b","impliedFormat":1},{"version":"4b745fcadf040899979b6b26e24aca6d2fa2bbe52a919d67f717bfe0339354a3","impliedFormat":1},{"version":"bc57f3550b3fd3b7d31b9a278d0b491dd45d170e37c4046a3105fdea9ebe5f89","impliedFormat":1},{"version":"b5f7093d62a228669dd56edd0bcb86a0cf0b46db4816a3967b4632503c21b93c","impliedFormat":1},{"version":"4d70bbb1f35f345b2c2e1b5c9b8174d5397bba76ffef12656bca16ce9a1830d3","impliedFormat":1},{"version":"a004fc80aa8f78dfb1d47b0e098fe646e759311c276b6b27404f5e356528f22d","impliedFormat":1},{"version":"c8933d9afe6c5ee7ecbeec5aa01f6b37d3c2be2f7dd203ee75ee4850164007cb","impliedFormat":1},{"version":"b1129b38f1eea70951ece3ccd1cc3e1d094379b64d3958ba8ce55b0ec0083434","impliedFormat":1},{"version":"b2bb10f992cfd1cf831eb005311a80f7f28bc14cfac5883f17e75f758d1354e1","impliedFormat":1},{"version":"58b621b924324874a67e92d7626809fd4b72fc079ce909f6da7097654026af00","impliedFormat":1},{"version":"149288ae23bb3b31ffe5cfb7eea669fc6872e41901d60be932af2581601fc70f","impliedFormat":1},{"version":"01a0fd262c8fdc6c91078255c4fe2f8602fd4fe4c753b2eae88537585b21dddf","impliedFormat":1},{"version":"deb69e6754a61784daadc35b318544b0aa69048ebfb142073c62b7f46bb1d5d0","impliedFormat":1},{"version":"60eef77c9b5cec20516907628f849845975a8137773ddb0bcb53fc2ea7d28870","impliedFormat":1},{"version":"67bcdcbd8cece34ae28180c636908af1b118fa9603d0d4b7dea877156d4de519","impliedFormat":1},{"version":"5a1c2cee26d1f8d9bb15b334f5b2df7de27a3944bff9ccf71d3b69c588612bda","impliedFormat":1},{"version":"a04d60b205af1f28461f3d2f5a8222ec2d8af54d436bc53a0460756e07e4207d","impliedFormat":1},{"version":"14c85d4debb2e0c8939f81b85cb9ab4543f70c8fe53be5fb5caf1192677c8ca4","impliedFormat":1},{"version":"c507cdc9757c048620ff08a85b9cf6278598eb1738d729fdbfa1e387a35e639a","impliedFormat":1},{"version":"4a4807c3096f49a463476742e3b5d23ccf0e087e43c017891c332ae5b8ad667d","impliedFormat":1},{"version":"c611af558c5d19fa477f1b03ceac7b0ae28fe5ad4f8bc61e8ad64c46f97e86e2","impliedFormat":1},{"version":"0cec41f583efa1f1033a4d546d926ee949756f19040bb65807c5a3ab6f3b8449","impliedFormat":1},{"version":"73b1eda15491d4f3052d6fac202190e76d6453fce832034bd29901cb198448b9","impliedFormat":1},{"version":"08c66989383183f3d7c43346617c8f466bef28f1e3eb4da829316d548cdbdf80","impliedFormat":1},{"version":"1f283476bbeaa589fe644fe6ba9da223baf118ecd4756863deae7362b246aff3","impliedFormat":1},{"version":"0a8f91ace4d1803eb2a50079c9e233fb262b0027d19aa250eb7ecbf6319e52d6","impliedFormat":1},{"version":"65bab52912be03b374ab591d73ee40aff3a465ac20bc0f2024b4c80ac5ce8397","impliedFormat":1},{"version":"6a647bf0620a4a7777527c688c62636a503e8b4d5e680037503066dd2af6d0dd","impliedFormat":1},{"version":"f1466e4d708815280c849956a506e132b7dc243907b9c8e07d52862e32dfcd91","impliedFormat":1},{"version":"cb4b99f8e47f57df841c95fcb1afc28488a2b5442e3524f6261e611b86105331","impliedFormat":1},{"version":"7c5fc61fc40a9f3aa3a09fd867536ff94a93b16f4ae99f1fb748fae6e13ae8bc","impliedFormat":1},{"version":"473d9ca5b242db0471d418336f410922eadd290679914f37ef21ee26dbeee2b4","impliedFormat":1},{"version":"2ffeb6ad0b074d1cfa3dc9671dad062b08129d1e8a8988b727dd2ce9fd4298d8","impliedFormat":1},{"version":"fa1d4332a68d84300895af592811f65f5f1d725ed0664f17d5c215a63408b6b4","impliedFormat":1},{"version":"7a09768c36d8b7d8e44b6085031712559362b28a54f133b803bed19408676cdf","impliedFormat":1},{"version":"f0b807278b2619fbe0acb9833bd285acabbf31da3592da949f4668a2e4bcbcf0","impliedFormat":1},{"version":"bc6419ca69c35169941d9d0f7a15c483a82ac601c3448257f29a1123bc2399e1","impliedFormat":1},{"version":"45f530610645ca6e25621ce8e7b3cf6c28cd5988871bc68b3772488bd8e45c25","impliedFormat":1},{"version":"2d3e715ca71765b491ae8bd76257e8ccfe97201c605dadc4e6532bb62e4f6eee","impliedFormat":1},{"version":"c519419c11e61347181ba3b77e8d560d8cc7614b6231cacefe206b41474792d4","impliedFormat":1},{"version":"24823640771cf82865c3b1cb48a8a88119b69e56aef594171cc0570f35f60b8a","impliedFormat":1},{"version":"30398045bda704d03d23e78a37095aa56e69ab2dd8bb7304b15df9e183b9800a","impliedFormat":1},{"version":"9a816fe54ea736ecf02b6865c10157724cdb5ba3f57ead02d9216b2dd4bd0d5f","impliedFormat":1},{"version":"a67582f2933f5b6faebba3484c99e78b529aa016369b768021726e400c93ddb8","impliedFormat":1},{"version":"96cd7367cc076d36d9f10cbe34b91e94467caf9b64a7a0fe1c4f6c8287e0a1b5","impliedFormat":1},{"version":"17c7be2c601e4b7e6292932997e491ff874418bef9ee6137e69ea6ef497e0e5d","impliedFormat":1},{"version":"eb7ed3b69718cf40c1ab8ce9a0e917819e0ef0b7480ba2890cddbb94a1386b10","impliedFormat":1},{"version":"7a7cec0720ee6d20e08fa9def697b149a94db1763bbec6e1ab5da8d7726ebddc","impliedFormat":1},{"version":"c024677c477a9dd20e7aba894c2f3e6ef81c4076af932a7fc00c210543cd53bc","impliedFormat":1},{"version":"7f31b6e6d0c03a34e462fdaaf2f7ab6daf85bed51fcaa61ee794aaa1c9b890ac","impliedFormat":1},{"version":"ffd5c614f7c66161efc5defd5f9dac16ae6877d13685f9ae224d5d081d841170","signature":"48e5a85c472f9c5980ed27788b84b5d58e9c0c97994fc379a2dd24d471a4cc7f"},{"version":"887cba43aa0dd85416e65c5597c8528ad5402522dbcd6b2645a74beb2df4ca88","signature":"9c812e3ffabdcba4fb766673d8cd1340c8e3536115b96ce4baa842fdfe8e421d"},"53fb9b3a127f1f5851727985e87e0a78cd05ce331fd219d04f61597a1fe61ecc","a3ae331b28da7fed70f45e76ac849a9a96590bfe887d0b2a5e3b290640b84f62","22172a7dd2af03e315c9397e405bb131ce102e20df29459a4f7102c2ecbf1936","f504cf4209a269abe867e196d17643a8ad2486b6e81aa445b798f207df9e4754",{"version":"30e9f4bbda4e6dc2deaff7634b85433af8f73a0b66bd64c4402b7623e33a542c","signature":"cf85930a406437cf5f43865cf804fba3fe15f8712f6342d80bf2785c1eb073d6"},{"version":"882b28abe64dae4932c83ebb71e4155da340929fe08a2055f3e573ef17f70fc3","impliedFormat":1},{"version":"4a3e425808751200a7709671667ad3d7e7cbfd0a06d469cab42adf06c2601f4a","impliedFormat":1},{"version":"401da46338f5b4f97c2a5f8a0faaace045c51aabd751d2dc704159f64feafe89","impliedFormat":1},{"version":"4e6da006f3a74377f1801ef8cbd771f82ead12d4326d4429661524aca2e21493","impliedFormat":1},"aa8271711822ca11b2a93dadcc5388e76cc831f36ec6f667a4adfe6b8d96ef15",{"version":"0698ba9ea9377202f149c15f5a5480c68dc28a874dcd2c830fa8ece382e23b38","signature":"f2ffcc0424acf94a1fc97f1598da823de80320c699e56961963be2935112d53a"},"905fc8871e2777097ac966549dc2abb62abb7e4715b2b8dbd7b056f4f8ec139c","8796862bba098d3a4120163d6695ec756c1ecc891b6fbb3deedc1653dacb810e","0eb7c579cf9e5634148d1322df3032cde9e0fa0d49cb9f8e77f9acb417e21607","b5f5daf704528815db849b993b3ca723a6fe91d3a622caddebf640d0b725334c","6e8ecf14ccc7032c3024d52862d796acb51d1aef5d5499e30350496d8ed97836","e8dcc1d02c46e68db2537c75f31de0d6893045e663278b92ec4f300e6ff0b5d9","55f9abb9cc177f10ded2daefd5d8ef00a56549dbe315d70707bd114dc6472198","6019f5fdd540c6b10925458425eaacdc57a602df5da2e5af8d322bdea68511c8","94a1851a21857fd7df68313dde72484afcbfa76a2277abb42fc8951f7acab932","28cdb028c1451b92b128be3abcb6414e4302c3143cc73144d3e7f4b4e932333c","a5db1437b4f7c24065819bd5d3eac25f2b88950ea184bb35d868cfc03d18cd7c","60d7b2eeda9ac3b810b446a552079af4a75633ac8039fbfc790eb1ba272a2b4b","4f78aca9208c29aae34fe0bfe9e0f3e40cd7dea0ba8d7bc3e7943326d8fcaa25","805f2ed4a67c52219dcfe754ea9f11f8299da92691dd464d292e018209142d38","0e9ab15aa99b4f29a4b1250d3453d40f3bf9010e49602454e85e62251d350eac","43c7fdd9a2363dc964a6644339ea16f4f598ce5621bc68a5d168b3dbdb571132","748f71f7b70f100c70bc89ef2a1d7d0e6b95068b107a0b2732fe5c0905a53699","325fcba7ecb747f598d12939e0b4730c9500d83f9107d2cc581460d5e48fd34d","9c856fd5df2e0ce2e26bd6eff46fd153ede87e267d2e9f059ca896cb585c8e5d","b2ad9360109f81b86c2f36993406efc8d6cd48b5225514d78028ac6b548267c0","bf520bf187e4f515feaa449892b92f8a7ec52fa60b5b634fd1ea0f3a987561e8","22ede1a8ea28ec9f5d7dbc5e5aa4fbee18315404979b8e28643d74631cfd53f0","3cdd575aba8e4aad238f5c4becd78ef51c58c9e2872522f349a1e809b0125f77","4600c33799909539aaf6af168167145819ef7b0b76188f0cb2a1fc3ecdde8780","ead7428a36960cf8ea8611159e663bbf27c5cb8917eb81ed0e2f154d3f86185c","83fd5d02f3beb56e62b955dab641cf34e0fbde042f9f6adbef2cb71862e00c35",{"version":"c8a53aba68ecb5651a53b40d6ba3a76fd2b7347bdcaa9cb73a7056fe043d017b","signature":"b3ff584d655cf69dcb1f75744d44d070bc33e866920ffcb4a80c769bcd266fa1"},"355d9dff15db3a79ec0c45ea76b1de9e0d4157e1b55a8600881104b64b28733d","c99fc024354c5310842b4307a08655ce0c71324bcab427d55cfa408cbe3c3c94","67a8865f741684f6cca5b82109c7916853911d54da54c6685b02009758fca361","d6760d17aa2478693521f479589882a25c5f365422c5c3feaf5b865d872b3055","057acaab282685a38525e410474322ab101d536fcebd7c7450bbbe255d69e248","b2c960af00b6c7fbf198e4f47223b47ad765f6f4b0df592d877fdb4a544c0a01","66b2f924bbe2132d16ab582ff7afc7eebc0e74c63fa2ab593ad7f1a105ce9fb5","43c81b5e7c15aa91c1d945675fa7eaf2a7cf0d75d6cb645ba5515a1e92843d79","dd275e887f3c3c852f3a7a48887fbde4cd0d14af614bead90cfee9a64777ee56","4db7b3903b70f1376f0db61d9d91eed5fa0a16d5beb8f36df349add009e84f0e","0fb708d110b0095ff26fbb40e96ad8a3f31c0e710662d78d811a33af6abae765","6c2312a765e695b10d55dd50368dfa0d793965b59a9c08c8df915aa16e140a9c",{"version":"8af352652f77a5d72298878c2844e7b1709ff20ff94ac806fc1c913d485e623d","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"00e734a5940338951ea88a73a6a0c658a32860aa3dbf39f459c00321d7725073","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"fc9de0eb3d9d7c4f1f148c8b4c13ebf658b51085fb7b000c9e17502c0e333470","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},"b1ef0f3c639214285f6d4aa93c4640476b014fc9e73e1214682ae5f306ea1399","a197e281c2c17b5d7e64ed8d39a562567b71f097bade3aeb4a0f34db81161ada","b6291a851de1e48b8c1061f18799135a32881f5de1677a74ceb1cdd07daad223","2d921fd41043786d1b60f7b6eac6127d86559b90a42e3c68393e98a00f71b045",{"version":"06ecd25ac46686bde6a03c7de109cdc7b3fe627a6173c10fef50a68d6b68737d","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ecec8f82ddf42db544c8320eddf7f09a9a788723f7473e82e903401a3d14d488","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[[350,356],394,395,397,398,[400,403],[406,408],[412,416],[742,748],[753,801]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":1},"referencedMap":[[783,1],[786,2],[785,3],[784,4],[789,5],[788,6],[790,7],[791,8],[787,9],[792,10],[793,11],[782,12],[794,13],[795,14],[796,15],[797,16],[799,17],[800,18],[798,19],[801,20],[350,21],[417,22],[418,22],[419,22],[420,22],[422,22],[421,22],[423,22],[429,22],[424,22],[426,22],[425,22],[427,22],[428,22],[430,22],[431,22],[434,22],[432,22],[433,22],[435,22],[436,22],[437,22],[438,22],[440,22],[439,22],[441,22],[442,22],[445,22],[443,22],[444,22],[446,22],[447,22],[448,22],[449,22],[472,22],[473,22],[474,22],[475,22],[450,22],[451,22],[452,22],[453,22],[454,22],[455,22],[456,22],[457,22],[458,22],[459,22],[460,22],[461,22],[467,22],[462,22],[464,22],[463,22],[465,22],[466,22],[468,22],[469,22],[470,22],[471,22],[476,22],[477,22],[478,22],[479,22],[480,22],[481,22],[482,22],[483,22],[484,22],[485,22],[486,22],[487,22],[488,22],[489,22],[490,22],[491,22],[492,22],[495,22],[493,22],[494,22],[496,22],[498,22],[497,22],[502,22],[500,22],[501,22],[499,22],[503,22],[504,22],[505,22],[506,22],[507,22],[508,22],[509,22],[510,22],[511,22],[512,22],[513,22],[514,22],[516,22],[515,22],[517,22],[519,22],[518,22],[520,22],[522,22],[521,22],[523,22],[524,22],[525,22],[526,22],[527,22],[528,22],[529,22],[530,22],[531,22],[532,22],[533,22],[534,22],[535,22],[536,22],[537,22],[538,22],[540,22],[539,22],[541,22],[542,22],[543,22],[544,22],[545,22],[547,22],[546,22],[548,22],[549,22],[550,22],[551,22],[552,22],[553,22],[554,22],[556,22],[555,22],[557,22],[558,22],[559,22],[560,22],[561,22],[562,22],[563,22],[564,22],[565,22],[566,22],[567,22],[568,22],[569,22],[570,22],[571,22],[572,22],[573,22],[574,22],[575,22],[576,22],[577,22],[578,22],[583,22],[579,22],[580,22],[581,22],[582,22],[584,22],[585,22],[586,22],[588,22],[587,22],[589,22],[590,22],[591,22],[592,22],[594,22],[593,22],[595,22],[596,22],[597,22],[598,22],[599,22],[600,22],[601,22],[605,22],[602,22],[603,22],[604,22],[606,22],[607,22],[608,22],[610,22],[609,22],[611,22],[612,22],[613,22],[614,22],[615,22],[616,22],[617,22],[618,22],[619,22],[620,22],[621,22],[622,22],[624,22],[623,22],[625,22],[626,22],[628,22],[627,22],[741,23],[629,22],[630,22],[631,22],[632,22],[633,22],[634,22],[636,22],[635,22],[637,22],[638,22],[639,22],[640,22],[643,22],[641,22],[642,22],[645,22],[644,22],[646,22],[647,22],[648,22],[650,22],[649,22],[651,22],[652,22],[653,22],[654,22],[655,22],[656,22],[657,22],[658,22],[659,22],[660,22],[662,22],[661,22],[663,22],[664,22],[665,22],[667,22],[666,22],[668,22],[669,22],[671,22],[670,22],[672,22],[674,22],[673,22],[675,22],[676,22],[677,22],[678,22],[679,22],[680,22],[681,22],[682,22],[683,22],[684,22],[685,22],[686,22],[687,22],[688,22],[689,22],[690,22],[691,22],[693,22],[692,22],[694,22],[695,22],[696,22],[697,22],[698,22],[700,22],[699,22],[701,22],[702,22],[703,22],[704,22],[705,22],[706,22],[707,22],[708,22],[709,22],[710,22],[711,22],[712,22],[713,22],[714,22],[715,22],[716,22],[717,22],[718,22],[719,22],[720,22],[721,22],[722,22],[723,22],[724,22],[727,22],[725,22],[726,22],[728,22],[729,22],[731,22],[730,22],[732,22],[733,22],[734,22],[735,22],[736,22],[738,22],[737,22],[739,22],[740,22],[307,24],[803,25],[804,24],[103,26],[104,26],[105,27],[64,28],[106,29],[107,30],[108,31],[59,24],[62,32],[60,24],[61,24],[109,33],[110,34],[111,35],[112,36],[113,37],[114,38],[115,38],[117,24],[116,39],[118,40],[119,41],[120,42],[102,43],[63,24],[121,44],[122,45],[123,46],[155,47],[124,48],[125,49],[126,50],[127,51],[128,52],[129,53],[130,54],[131,55],[132,56],[133,57],[134,57],[135,58],[136,24],[137,59],[139,60],[138,61],[140,62],[141,63],[142,64],[143,65],[144,66],[145,67],[146,68],[147,69],[148,70],[149,71],[150,72],[151,73],[152,74],[153,75],[154,76],[51,24],[160,77],[161,78],[159,22],[157,79],[158,80],[49,24],[52,81],[802,82],[404,24],[399,24],[382,83],[385,84],[388,84],[389,84],[387,85],[386,85],[390,86],[393,87],[392,88],[383,89],[391,90],[384,84],[381,91],[379,24],[377,92],[380,93],[378,94],[376,95],[375,96],[373,97],[374,97],[372,24],[50,24],[362,98],[357,24],[359,99],[358,100],[405,82],[369,98],[368,98],[370,101],[367,102],[365,98],[366,98],[363,103],[364,98],[750,104],[749,24],[751,105],[371,106],[361,107],[360,24],[58,108],[310,109],[315,110],[317,111],[179,112],[184,113],[283,114],[254,115],[262,116],[281,117],[180,118],[228,24],[229,119],[282,120],[205,121],[181,122],[209,121],[199,121],[166,121],[246,123],[171,24],[243,124],[241,125],[188,24],[244,126],[334,127],[252,22],[333,24],[332,128],[245,22],[234,129],[242,130],[257,131],[258,132],[249,24],[189,133],[247,24],[248,22],[327,134],[330,135],[216,136],[215,137],[214,138],[337,22],[213,139],[193,24],[340,24],[410,140],[409,24],[343,24],[342,22],[344,141],[162,24],[277,24],[164,142],[298,24],[299,24],[301,24],[304,143],[300,24],[302,144],[303,144],[183,24],[309,139],[318,145],[322,146],[175,147],[236,148],[235,24],[253,149],[250,24],[251,24],[256,150],[232,151],[174,152],[203,153],[274,154],[167,155],[173,156],[163,157],[285,158],[296,159],[284,24],[295,160],[204,24],[191,161],[271,162],[270,24],[273,163],[272,163],[225,164],[210,164],[265,165],[211,165],[169,166],[168,24],[269,167],[268,168],[267,169],[266,170],[170,171],[240,172],[255,173],[239,174],[261,175],[263,176],[260,174],[206,171],[156,24],[275,177],[230,178],[294,179],[187,180],[289,181],[182,24],[290,182],[292,183],[293,184],[288,24],[287,155],[207,185],[276,186],[297,187],[176,24],[178,24],[190,188],[264,189],[172,190],[177,24],[186,191],[185,192],[192,193],[233,194],[231,128],[194,195],[196,196],[341,24],[195,197],[197,198],[312,24],[313,24],[311,24],[314,24],[339,24],[198,199],[238,22],[57,24],[259,200],[217,24],[227,201],[320,22],[326,202],[224,22],[324,22],[223,203],[306,204],[222,202],[165,24],[328,205],[220,22],[221,22],[212,24],[226,24],[219,206],[218,207],[208,208],[202,209],[291,24],[201,210],[200,24],[316,24],[237,22],[308,211],[48,24],[56,212],[53,22],[54,24],[55,24],[286,213],[280,214],[278,24],[279,215],[319,216],[321,217],[323,218],[411,219],[325,220],[349,221],[329,221],[348,222],[331,223],[335,224],[336,225],[338,226],[345,227],[347,24],[346,228],[305,229],[752,230],[46,24],[47,24],[8,24],[9,24],[11,24],[10,24],[2,24],[12,24],[13,24],[14,24],[15,24],[16,24],[17,24],[18,24],[19,24],[3,24],[20,24],[21,24],[4,24],[22,24],[26,24],[23,24],[24,24],[25,24],[27,24],[28,24],[29,24],[5,24],[30,24],[31,24],[32,24],[33,24],[6,24],[37,24],[34,24],[35,24],[36,24],[38,24],[7,24],[39,24],[44,24],[45,24],[40,24],[41,24],[42,24],[43,24],[1,24],[80,231],[90,232],[79,231],[100,233],[71,234],[70,235],[99,228],[93,236],[98,237],[73,238],[87,239],[72,240],[96,241],[68,242],[67,228],[97,243],[69,244],[74,245],[75,24],[78,245],[65,24],[101,246],[91,247],[82,248],[83,249],[85,250],[81,251],[84,252],[94,228],[76,253],[77,254],[86,255],[66,256],[89,247],[88,245],[92,24],[95,257],[754,258],[758,259],[757,260],[755,261],[768,262],[766,263],[770,264],[771,265],[762,266],[413,267],[774,268],[775,269],[415,270],[398,271],[402,272],[403,273],[776,274],[779,275],[780,276],[778,277],[781,278],[764,279],[759,280],[765,281],[767,279],[760,282],[769,283],[763,284],[745,285],[743,286],[744,270],[748,287],[756,288],[773,289],[777,22],[772,290],[761,291],[747,292],[416,293],[742,294],[753,295],[746,22],[414,24],[412,296],[401,297],[406,298],[396,24],[397,299],[394,300],[395,301],[356,302],[355,302],[351,24],[353,24],[352,24],[354,24],[407,24],[408,22],[400,24]],"affectedFilesPendingEmit":[783,786,785,784,789,788,790,791,787,792,793,782,794,795,796,797,799,800,798,801,754,758,757,755,768,766,770,771,762,413,774,775,415,398,402,403,776,779,780,778,781,764,759,765,767,760,769,763,745,743,744,748,756,773,777,772,761,747,416,742,753,746,414,412,401,406,397,394,395,356,355,351,353,352,354,407,408,400],"version":"5.8.3"}
\ No newline at end of file
diff --git a/nginx.conf b/nginx.conf
index 0a6f211..ec75d8a 100644
--- a/nginx.conf
+++ b/nginx.conf
@@ -28,7 +28,23 @@ http {
proxy_cache_bypass $http_upgrade;
}
- # Backend API routes
+ # Scraping routes - completely separate from /api/ to avoid conflicts
+ location /scrape/ {
+ proxy_pass http://frontend/scrape/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection 'upgrade';
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_cache_bypass $http_upgrade;
+ proxy_connect_timeout 60s;
+ proxy_send_timeout 60s;
+ proxy_read_timeout 60s;
+ }
+
+ # Backend API routes (fallback for all other /api/ routes)
location /api/ {
proxy_pass http://backend/api/;
proxy_set_header Host $host;
diff --git a/package-lock.json b/package-lock.json
index 006a4de..7119eea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2,5 +2,307 @@
"name": "StoryCove",
"lockfileVersion": 3,
"requires": true,
- "packages": {}
+ "packages": {
+ "": {
+ "dependencies": {
+ "cheerio": "^1.1.2"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "license": "ISC"
+ },
+ "node_modules/cheerio": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz",
+ "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==",
+ "license": "MIT",
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "encoding-sniffer": "^0.2.1",
+ "htmlparser2": "^10.0.0",
+ "parse5": "^7.3.0",
+ "parse5-htmlparser2-tree-adapter": "^7.1.0",
+ "parse5-parser-stream": "^7.1.2",
+ "undici": "^7.12.0",
+ "whatwg-mimetype": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=20.18.1"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/cheerio-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+ "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/encoding-sniffer": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
+ "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "^0.6.3",
+ "whatwg-encoding": "^3.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
+ "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.1",
+ "entities": "^6.0.0"
+ }
+ },
+ "node_modules/htmlparser2/node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
+ "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
+ "license": "MIT",
+ "dependencies": {
+ "domhandler": "^5.0.3",
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5-parser-stream": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
+ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+ "license": "MIT",
+ "dependencies": {
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5/node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/undici": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.12.0.tgz",
+ "integrity": "sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ }
+ }
}
diff --git a/storycove-scraper-spec.md b/storycove-scraper-spec.md
new file mode 100644
index 0000000..86f5ea5
--- /dev/null
+++ b/storycove-scraper-spec.md
@@ -0,0 +1,474 @@
+# StoryCove Web Scraper Feature Specification
+
+## Overview
+
+The Web Scraper feature allows users to import stories from external websites into StoryCove by providing URLs. The scraper extracts story metadata and content using configurable selectors defined in a JSON configuration file.
+
+## Feature Requirements
+
+### Core Functionality
+
+1. **Single Story Import**: Users can provide a story URL and the scraper will extract:
+ - Title (required)
+ - Author (required)
+ - Content (required)
+ - Summary (optional)
+ - Cover Image (optional)
+ - Tags (optional)
+
+2. **Author Page Scanning**: Users can provide an author page URL to:
+ - Discover all stories by that author
+ - Present a selectable list of stories
+ - Allow bulk import of selected stories
+
+3. **Multi-page Story Support**: Handle stories split across multiple pages by:
+ - Detecting pagination
+ - Fetching all pages
+ - Merging content in correct order
+
+### User Interface Flow
+
+1. **Add Story View Enhancement**:
+ ```
+ [Manual Entry] | [Import from URL]
+
+ When "Import from URL" selected:
+ - URL input field
+ - "Fetch" button
+ - Loading indicator during fetch
+ - Pre-filled form with scraped data
+ - Ability to edit before saving
+ ```
+
+2. **Bulk Import View** (future enhancement):
+ ```
+ - URL input for author page
+ - "Scan for Stories" button
+ - Checkbox list of discovered stories
+ - "Import Selected" button
+ - Progress indicator
+ ```
+
+## Technical Implementation
+
+### Architecture
+
+```
+/lib/scraper/
+├── config/
+│ └── sites.json # Site configurations
+├── scraper.ts # Main scraper class
+├── strategies/ # Strategy implementations
+│ ├── index.ts
+│ ├── textExtractor.ts
+│ ├── linkExtractor.ts
+│ └── contentCleaner.ts
+├── utils/
+│ ├── rateLimit.ts
+│ ├── cache.ts
+│ └── urlParser.ts
+└── types.ts # TypeScript definitions
+```
+
+### API Routes
+
+```typescript
+// /app/api/scrape/story/route.ts
+POST /api/scrape/story
+Body: { url: string }
+Response: {
+ title: string,
+ author: string,
+ content: string,
+ summary?: string,
+ coverImage?: string,
+ tags?: string[]
+}
+
+// /app/api/scrape/author/route.ts
+POST /api/scrape/author
+Body: { url: string }
+Response: {
+ stories: Array<{
+ url: string,
+ title: string,
+ author: string,
+ summary?: string
+ }>
+}
+```
+
+### Core Classes
+
+```typescript
+// /lib/scraper/types.ts
+interface SiteConfig {
+ story: StorySelectors;
+ authorPage: AuthorPageSelectors;
+}
+
+interface StorySelectors {
+ title: string | SelectorStrategy;
+ author: string | SelectorStrategy;
+ content: string | SelectorStrategy;
+ summary?: string | SelectorStrategy;
+ coverImage?: string | SelectorStrategy;
+ tags?: string | SelectorStrategy;
+ multiPage?: MultiPageConfig;
+}
+
+interface SelectorStrategy {
+ strategy: string;
+ [key: string]: any;
+}
+
+interface ScrapedStory {
+ title: string;
+ author: string;
+ content: string;
+ summary?: string;
+ coverImage?: string;
+ tags?: string[];
+ sourceUrl: string;
+}
+```
+
+### Main Scraper Implementation
+
+```typescript
+// /lib/scraper/scraper.ts
+import * as cheerio from 'cheerio';
+import { SiteConfig, ScrapedStory } from './types';
+import sitesConfig from './config/sites.json';
+
+export class StoryScraper {
+ private config: Record;
+ private cache: Map;
+
+ constructor() {
+ this.config = sitesConfig.sites;
+ this.cache = new Map();
+ }
+
+ async scrapeStory(url: string): Promise {
+ const domain = this.getDomain(url);
+ const siteConfig = this.config[domain];
+
+ if (!siteConfig) {
+ throw new Error(`Unsupported site: ${domain}`);
+ }
+
+ const html = await this.fetchWithCache(url);
+ const $ = cheerio.load(html);
+
+ const story: ScrapedStory = {
+ title: await this.extractField($, siteConfig.story.title, html),
+ author: await this.extractField($, siteConfig.story.author, html),
+ content: await this.extractContent($, siteConfig.story, url),
+ sourceUrl: url
+ };
+
+ // Extract optional fields
+ if (siteConfig.story.summary) {
+ story.summary = await this.extractField($, siteConfig.story.summary, html);
+ }
+
+ return story;
+ }
+
+ private async extractField(
+ $: cheerio.CheerioAPI,
+ selector: string | SelectorStrategy,
+ html: string
+ ): Promise {
+ if (typeof selector === 'string') {
+ // Simple CSS selector
+ return $(selector).first().text().trim();
+ }
+
+ // Strategy-based extraction
+ return await this.executeStrategy($, selector, html);
+ }
+
+ private async executeStrategy(
+ $: cheerio.CheerioAPI,
+ strategy: SelectorStrategy,
+ html: string
+ ): Promise {
+ switch (strategy.strategy) {
+ case 'text-pattern':
+ return this.extractByTextPattern(html, strategy);
+ case 'link-with-path':
+ return this.extractLinkWithPath($, strategy);
+ case 'text-blocks':
+ return this.extractTextBlocks($, strategy);
+ // ... other strategies
+ }
+ }
+}
+```
+
+### Strategy Implementations
+
+```typescript
+// /lib/scraper/strategies/textExtractor.ts
+export function extractByTextPattern(
+ html: string,
+ config: TextPatternStrategy
+): string {
+ const regex = new RegExp(config.pattern, 'i');
+ const match = html.match(regex);
+ return match ? match[config.group || 1].trim() : '';
+}
+
+export function extractTextBlocks(
+ $: cheerio.CheerioAPI,
+ config: TextBlockStrategy
+): string {
+ const blocks: Array<{element: any, text: string}> = [];
+
+ $('*').each((_, elem) => {
+ const $elem = $(elem);
+ const text = $elem.clone().children().remove().end().text().trim();
+
+ if (text.length >= (config.minLength || 500)) {
+ blocks.push({ element: elem, text });
+ }
+ });
+
+ // Find the block that likely contains story content
+ const storyBlock = blocks.find(block => {
+ const hasHints = config.containerHints?.some(hint =>
+ $(block.element).attr('class')?.includes(hint) ||
+ $(block.element).attr('id')?.includes(hint)
+ );
+ return hasHints || blocks.length === 1;
+ });
+
+ return storyBlock ? $(storyBlock.element).html() || '' : '';
+}
+```
+
+### Rate Limiting
+
+```typescript
+// /lib/scraper/utils/rateLimit.ts
+export class RateLimiter {
+ private lastRequest: number = 0;
+ private minDelay: number;
+
+ constructor(minDelayMs: number = 1000) {
+ this.minDelay = minDelayMs;
+ }
+
+ async throttle(): Promise {
+ const now = Date.now();
+ const timeSinceLastRequest = now - this.lastRequest;
+
+ if (timeSinceLastRequest < this.minDelay) {
+ await this.delay(this.minDelay - timeSinceLastRequest);
+ }
+
+ this.lastRequest = Date.now();
+ }
+
+ private delay(ms: number): Promise {
+ return new Promise(resolve => setTimeout(resolve, ms));
+ }
+}
+```
+
+### Multi-page Story Handling
+
+```typescript
+// /lib/scraper/scraper.ts (addition)
+private async extractContent(
+ $: cheerio.CheerioAPI,
+ storyConfig: StorySelectors,
+ url: string
+): Promise {
+ let content = await this.extractField($, storyConfig.content, $.html());
+
+ if (storyConfig.multiPage?.enabled) {
+ const additionalPages = await this.fetchAdditionalPages(
+ $,
+ url,
+ storyConfig.multiPage
+ );
+
+ for (const pageHtml of additionalPages) {
+ const $page = cheerio.load(pageHtml);
+ const pageContent = await this.extractField(
+ $page,
+ storyConfig.content,
+ pageHtml
+ );
+ content += '\n\n' + pageContent;
+ }
+ }
+
+ return content;
+}
+
+private async fetchAdditionalPages(
+ $: cheerio.CheerioAPI,
+ baseUrl: string,
+ config: MultiPageConfig
+): Promise {
+ const pages: string[] = [];
+ let currentUrl = baseUrl;
+ let pageNum = 2;
+
+ while (pageNum <= (config.maxPages || 20)) {
+ let nextUrl: string | null = null;
+
+ if (config.strategy === 'url-pattern') {
+ nextUrl = this.buildPageUrl(baseUrl, pageNum, config);
+ } else if (config.nextPageSelector) {
+ const nextLink = $(config.nextPageSelector).attr('href');
+ if (nextLink) {
+ nextUrl = new URL(nextLink, currentUrl).href;
+ }
+ }
+
+ if (!nextUrl) break;
+
+ try {
+ await this.rateLimiter.throttle();
+ const html = await this.fetchWithCache(nextUrl);
+ pages.push(html);
+ currentUrl = nextUrl;
+ pageNum++;
+ } catch (error) {
+ console.error(`Failed to fetch page ${pageNum}:`, error);
+ break;
+ }
+ }
+
+ return pages;
+}
+```
+
+### Error Handling
+
+```typescript
+// /lib/scraper/scraper.ts (addition)
+async scrapeStory(url: string): Promise {
+ try {
+ // ... existing implementation
+ } catch (error) {
+ if (error instanceof Error) {
+ throw new ScraperError(
+ `Failed to scrape ${url}: ${error.message}`,
+ url,
+ error
+ );
+ }
+ throw error;
+ }
+}
+
+export class ScraperError extends Error {
+ constructor(
+ message: string,
+ public url: string,
+ public originalError?: Error
+ ) {
+ super(message);
+ this.name = 'ScraperError';
+ }
+}
+```
+
+## Configuration File Structure
+
+```json
+{
+ "sites": {
+ "domain.com": {
+ "story": {
+ "title": "selector or strategy object",
+ "author": "selector or strategy object",
+ "content": "selector or strategy object",
+ "summary": "optional selector or strategy",
+ "coverImage": "optional selector or strategy",
+ "tags": "optional selector or strategy",
+ "multiPage": {
+ "enabled": true,
+ "strategy": "url-pattern|next-link",
+ "nextPageSelector": "a.next-page",
+ "pageParam": "page",
+ "maxPages": 20
+ }
+ },
+ "authorPage": {
+ "storyLinks": "selector or strategy object",
+ "pagination": {
+ "enabled": true,
+ "nextPageSelector": "a.next"
+ }
+ }
+ }
+ },
+ "globalOptions": {
+ "userAgent": "Mozilla/5.0...",
+ "timeout": 30000,
+ "retryAttempts": 3,
+ "rateLimitMs": 1000
+ }
+}
+```
+
+## Usage Example
+
+```typescript
+// In a Next.js API route
+import { StoryScraper } from '@/lib/scraper/scraper';
+
+export async function POST(request: Request) {
+ const { url } = await request.json();
+
+ try {
+ const scraper = new StoryScraper();
+ const story = await scraper.scrapeStory(url);
+
+ return Response.json(story);
+ } catch (error) {
+ if (error instanceof ScraperError) {
+ return Response.json(
+ { error: error.message },
+ { status: 400 }
+ );
+ }
+
+ return Response.json(
+ { error: 'Internal server error' },
+ { status: 500 }
+ );
+ }
+}
+```
+
+## Testing Considerations
+
+1. **Unit Tests**: Test individual strategies and extractors
+2. **Integration Tests**: Test against saved HTML samples
+3. **Mock External Requests**: Use saved HTML fixtures to avoid hitting real sites
+4. **Edge Cases**: Empty content, missing fields, malformed HTML
+5. **Rate Limiting**: Verify delays are properly applied
+
+## Security Considerations
+
+1. **URL Validation**: Only accept HTTP/HTTPS URLs
+2. **Domain Allowlist**: Restrict to configured domains
+3. **Content Sanitization**: Clean HTML before storage
+4. **Request Timeouts**: Prevent hanging on slow sites
+5. **Rate Limiting**: Prevent abuse of the scraping endpoint
+
+## Future Enhancements
+
+1. **Browser Automation**: Use Playwright for JavaScript-rendered content
+2. **AI Content Extraction**: Use LLMs for sites without clear patterns
+3. **User-Submitted Configurations**: Allow users to define selectors
+4. **Scheduled Imports**: Periodic author page checking
+5. **Import History**: Track what has been imported to avoid duplicates
\ No newline at end of file
diff --git a/swissmilk_hamburger.pdf b/swissmilk_hamburger.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..9ae9058f47a74ee78529f2e2418cc00d34ad3254
GIT binary patch
literal 2363988
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⋚cD2IwkrOz6Hh%+(
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