diff --git a/.vscode/settings.json b/.vscode/settings.json
index bd6472fc..2232536f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -5,6 +5,7 @@
"botocore",
"bsky",
"buildx",
+ "cbor",
"cbranch",
"cfgv",
"cstat",
@@ -48,7 +49,9 @@
"ormsgpack",
"PRAW",
"psycopg",
+ "pyasn",
"pylint",
+ "pyopenssl",
"PYTHONDONTWRITEBYTECODE",
"PYTHONUNBUFFERED",
"pytokens",
@@ -66,6 +69,8 @@
"solomonstre",
"svix",
"topicv",
+ "txaio",
+ "ujson",
"Unparseable",
"unstub",
"upserted",
@@ -76,6 +81,7 @@
"vfarcic",
"Viktor",
"xrpc",
- "xxhash"
+ "xxhash",
+ "zope"
]
}
diff --git a/core/api_urls.py b/core/api_urls.py
index c30b5356..9d8197ba 100644
--- a/core/api_urls.py
+++ b/core/api_urls.py
@@ -11,9 +11,13 @@
from ingestion.api_urls import (
register_project_routes as register_ingestion_project_routes,
)
+from messaging.api_urls import register_root_routes as register_messaging_root_routes
from newsletters.api_urls import (
register_project_routes as register_newsletters_project_routes,
)
+from notifications.api_urls import (
+ register_root_routes as register_notifications_root_routes,
+)
from pipeline.api_urls import (
register_project_routes as register_pipeline_project_routes,
)
@@ -30,6 +34,8 @@
router = DefaultRouter()
register_projects_root_routes(router)
+register_notifications_root_routes(router)
+register_messaging_root_routes(router)
project_router = NestedSimpleRouter(router, r"projects", lookup="project")
register_projects_project_routes(project_router)
diff --git a/core/tests/test_entrypoints.py b/core/tests/test_entrypoints.py
index 52560ed5..20d40bcc 100644
--- a/core/tests/test_entrypoints.py
+++ b/core/tests/test_entrypoints.py
@@ -2,6 +2,8 @@
import os
import sys
+from channels.routing import ProtocolTypeRouter
+
from newsletter_maker.celery import app
@@ -22,7 +24,10 @@ def test_asgi_module_sets_default_settings_and_builds_application(mocker):
"DJANGO_SETTINGS_MODULE", "newsletter_maker.settings"
)
get_app_mock.assert_called_once_with()
- assert module.application == "asgi-app"
+ assert module.django_asgi_application == "asgi-app"
+ assert isinstance(module.application, ProtocolTypeRouter)
+ assert module.application.application_mapping["http"] == "asgi-app"
+ assert "websocket" in module.application.application_mapping
def test_wsgi_module_sets_default_settings_and_builds_application(mocker):
diff --git a/deploy/argocd/newsletter-maker-staging-application.yaml b/deploy/argocd/newsletter-maker-staging-application.yaml
index 71b79a64..88c5e941 100644
--- a/deploy/argocd/newsletter-maker-staging-application.yaml
+++ b/deploy/argocd/newsletter-maker-staging-application.yaml
@@ -20,4 +20,4 @@ spec:
prune: true
selfHeal: true
syncOptions:
- - CreateNamespace=true
\ No newline at end of file
+ - CreateNamespace=true
diff --git a/deploy/helm/newsletter-maker/templates/configmap.yaml b/deploy/helm/newsletter-maker/templates/configmap.yaml
index d48bf95d..8530dae0 100644
--- a/deploy/helm/newsletter-maker/templates/configmap.yaml
+++ b/deploy/helm/newsletter-maker/templates/configmap.yaml
@@ -10,7 +10,9 @@ data:
CSRF_TRUSTED_ORIGINS: {{ .Values.env.csrfTrustedOrigins | quote }}
SITE_ID: {{ .Values.env.siteId | quote }}
REDIS_URL: {{ include "newsletter-maker.redisUrl" . | quote }}
+ CHANNEL_LAYER_URL: {{ default (include "newsletter-maker.redisUrl" .) .Values.env.channelLayerUrl | quote }}
QDRANT_URL: {{ include "newsletter-maker.qdrantUrl" . | quote }}
+ MESSAGING_ENABLED: {{ .Values.env.messagingEnabled | quote }}
NEWSLETTER_API_BASE_URL: {{ .Values.env.newsletterApiBaseUrl | quote }}
EMAIL_BACKEND: {{ .Values.env.emailBackend | quote }}
DEFAULT_FROM_EMAIL: {{ .Values.env.defaultFromEmail | quote }}
diff --git a/deploy/helm/newsletter-maker/templates/service-monitor.yaml b/deploy/helm/newsletter-maker/templates/service-monitor.yaml
index 3dadc35e..87b60b0f 100644
--- a/deploy/helm/newsletter-maker/templates/service-monitor.yaml
+++ b/deploy/helm/newsletter-maker/templates/service-monitor.yaml
@@ -20,4 +20,4 @@ spec:
bearerTokenSecret:
name: {{ include "newsletter-maker.secretName" . }}
key: METRICS_TOKEN
-{{- end }}
\ No newline at end of file
+{{- end }}
diff --git a/deploy/helm/newsletter-maker/values-staging.yaml b/deploy/helm/newsletter-maker/values-staging.yaml
index 595f4548..243ec651 100644
--- a/deploy/helm/newsletter-maker/values-staging.yaml
+++ b/deploy/helm/newsletter-maker/values-staging.yaml
@@ -7,6 +7,7 @@ env:
debug: "false"
allowedHosts: "staging.newsletter-maker.example.com"
csrfTrustedOrigins: "https://staging.newsletter-maker.example.com"
+ messagingEnabled: "true"
newsletterApiBaseUrl: "https://staging.newsletter-maker.example.com"
logLevel: INFO
@@ -23,4 +24,4 @@ networkPolicy:
serviceMonitor:
enabled: true
labels:
- release: kube-prometheus-stack
\ No newline at end of file
+ release: kube-prometheus-stack
diff --git a/deploy/helm/newsletter-maker/values.yaml b/deploy/helm/newsletter-maker/values.yaml
index 2efac430..af66ee95 100644
--- a/deploy/helm/newsletter-maker/values.yaml
+++ b/deploy/helm/newsletter-maker/values.yaml
@@ -11,6 +11,8 @@ env:
allowedHosts: "localhost,127.0.0.1"
csrfTrustedOrigins: "http://localhost,http://127.0.0.1"
siteId: "1"
+ channelLayerUrl: ""
+ messagingEnabled: "true"
newsletterApiBaseUrl: "http://newsletter-maker.local"
emailBackend: anymail.backends.resend.EmailBackend
defaultFromEmail: onboarding@resend.dev
diff --git a/frontend/src/app/(home)/_components/ContentFeed/index.stories.tsx b/frontend/src/app/(home)/_components/ContentFeed/index.stories.tsx
index 7c882f8a..a580493a 100644
--- a/frontend/src/app/(home)/_components/ContentFeed/index.stories.tsx
+++ b/frontend/src/app/(home)/_components/ContentFeed/index.stories.tsx
@@ -38,4 +38,4 @@ export const Empty: Story = {
filteredContents: [],
contentClusterLookup: new Map(),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/ContentFeed/index.test.tsx b/frontend/src/app/(home)/_components/ContentFeed/index.test.tsx
index df5c7d19..9a8099e2 100644
--- a/frontend/src/app/(home)/_components/ContentFeed/index.test.tsx
+++ b/frontend/src/app/(home)/_components/ContentFeed/index.test.tsx
@@ -43,4 +43,4 @@ describe("ContentFeed", () => {
expect(screen.getByText("reference")).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Upvote" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/ContentFeed/index.tsx b/frontend/src/app/(home)/_components/ContentFeed/index.tsx
index 926fd6ef..558a9227 100644
--- a/frontend/src/app/(home)/_components/ContentFeed/index.tsx
+++ b/frontend/src/app/(home)/_components/ContentFeed/index.tsx
@@ -136,4 +136,4 @@ export function ContentFeed({
})}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.stories.tsx b/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.stories.tsx
index 707f8705..15654b19 100644
--- a/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.stories.tsx
+++ b/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.stories.tsx
@@ -35,4 +35,4 @@ export const Filtered: Story = {
sourceFilter: "rss",
duplicateStateFilter: "duplicate_related",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.test.tsx b/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.test.tsx
index a524055f..744e6efe 100644
--- a/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.test.tsx
+++ b/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.test.tsx
@@ -25,4 +25,4 @@ describe("DashboardFilterToolbar", () => {
expect(container.querySelector('input[name="source"]')).toHaveValue("rss")
expect(container.querySelector('input[name="days"]')).toHaveValue("30")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.tsx b/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.tsx
index 45f740ed..49a4bfe7 100644
--- a/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.tsx
+++ b/frontend/src/app/(home)/_components/DashboardFilterToolbar/index.tsx
@@ -156,4 +156,4 @@ export function DashboardFilterToolbar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/DashboardOverview/index.stories.tsx b/frontend/src/app/(home)/_components/DashboardOverview/index.stories.tsx
index d7e120c7..7c6a1e9b 100644
--- a/frontend/src/app/(home)/_components/DashboardOverview/index.stories.tsx
+++ b/frontend/src/app/(home)/_components/DashboardOverview/index.stories.tsx
@@ -24,4 +24,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/(home)/_components/DashboardOverview/index.test.tsx b/frontend/src/app/(home)/_components/DashboardOverview/index.test.tsx
index 19b24996..0aaa8b76 100644
--- a/frontend/src/app/(home)/_components/DashboardOverview/index.test.tsx
+++ b/frontend/src/app/(home)/_components/DashboardOverview/index.test.tsx
@@ -20,4 +20,4 @@ describe("DashboardOverview", () => {
expect(screen.getByText("Tracked entities")).toBeInTheDocument()
expect(screen.getByText("5/2")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/DashboardOverview/index.tsx b/frontend/src/app/(home)/_components/DashboardOverview/index.tsx
index 9e38b314..e1310045 100644
--- a/frontend/src/app/(home)/_components/DashboardOverview/index.tsx
+++ b/frontend/src/app/(home)/_components/DashboardOverview/index.tsx
@@ -55,4 +55,4 @@ export function DashboardOverview({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/DashboardSidebar/index.stories.tsx b/frontend/src/app/(home)/_components/DashboardSidebar/index.stories.tsx
index ee31bed2..ab0bc3a8 100644
--- a/frontend/src/app/(home)/_components/DashboardSidebar/index.stories.tsx
+++ b/frontend/src/app/(home)/_components/DashboardSidebar/index.stories.tsx
@@ -23,4 +23,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/(home)/_components/DashboardSidebar/index.test.tsx b/frontend/src/app/(home)/_components/DashboardSidebar/index.test.tsx
index 89121731..89645693 100644
--- a/frontend/src/app/(home)/_components/DashboardSidebar/index.test.tsx
+++ b/frontend/src/app/(home)/_components/DashboardSidebar/index.test.tsx
@@ -20,4 +20,4 @@ describe("DashboardSidebar", () => {
expect(screen.getByText("Active sources")).toBeInTheDocument()
expect(screen.getByText("Editorial queue")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/DashboardSidebar/index.tsx b/frontend/src/app/(home)/_components/DashboardSidebar/index.tsx
index d79dd0e1..41dba9a0 100644
--- a/frontend/src/app/(home)/_components/DashboardSidebar/index.tsx
+++ b/frontend/src/app/(home)/_components/DashboardSidebar/index.tsx
@@ -46,4 +46,4 @@ export function DashboardSidebar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/HomePageContent/index.stories.tsx b/frontend/src/app/(home)/_components/HomePageContent/index.stories.tsx
index 44570e58..19e92fec 100644
--- a/frontend/src/app/(home)/_components/HomePageContent/index.stories.tsx
+++ b/frontend/src/app/(home)/_components/HomePageContent/index.stories.tsx
@@ -65,4 +65,4 @@ export const ReviewView: Story = {
args: {
view: "review",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/HomePageContent/index.test.tsx b/frontend/src/app/(home)/_components/HomePageContent/index.test.tsx
index 604fb151..39a667ee 100644
--- a/frontend/src/app/(home)/_components/HomePageContent/index.test.tsx
+++ b/frontend/src/app/(home)/_components/HomePageContent/index.test.tsx
@@ -95,4 +95,4 @@ describe("HomePageContent", () => {
expect(screen.getByText("borderline_relevance")).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Approve" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/HomePageContent/index.tsx b/frontend/src/app/(home)/_components/HomePageContent/index.tsx
index 13b7e016..86e2baad 100644
--- a/frontend/src/app/(home)/_components/HomePageContent/index.tsx
+++ b/frontend/src/app/(home)/_components/HomePageContent/index.tsx
@@ -119,4 +119,4 @@ export function HomePageContent({
)}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/ReviewQueueTable/index.stories.tsx b/frontend/src/app/(home)/_components/ReviewQueueTable/index.stories.tsx
index b414a4e8..2dd1d56c 100644
--- a/frontend/src/app/(home)/_components/ReviewQueueTable/index.stories.tsx
+++ b/frontend/src/app/(home)/_components/ReviewQueueTable/index.stories.tsx
@@ -45,4 +45,4 @@ export const Empty: Story = {
pendingReviewItems: [],
contentMap: new Map(),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/ReviewQueueTable/index.test.tsx b/frontend/src/app/(home)/_components/ReviewQueueTable/index.test.tsx
index a254b67f..8cd630dc 100644
--- a/frontend/src/app/(home)/_components/ReviewQueueTable/index.test.tsx
+++ b/frontend/src/app/(home)/_components/ReviewQueueTable/index.test.tsx
@@ -47,4 +47,4 @@ describe("ReviewQueueTable", () => {
expect(screen.getByRole("button", { name: "Approve" })).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Reject" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/ReviewQueueTable/index.tsx b/frontend/src/app/(home)/_components/ReviewQueueTable/index.tsx
index f900b285..ed5d03be 100644
--- a/frontend/src/app/(home)/_components/ReviewQueueTable/index.tsx
+++ b/frontend/src/app/(home)/_components/ReviewQueueTable/index.tsx
@@ -106,4 +106,4 @@ export function ReviewQueueTable({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/_components/shared.test.ts b/frontend/src/app/(home)/_components/shared.test.ts
index 1cd10197..78a06834 100644
--- a/frontend/src/app/(home)/_components/shared.test.ts
+++ b/frontend/src/app/(home)/_components/shared.test.ts
@@ -26,4 +26,4 @@ describe("buildContentClusterLookup", () => {
velocityScore: 0.8,
})
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/(home)/_components/shared.ts b/frontend/src/app/(home)/_components/shared.ts
index fb01172e..2a6c073f 100644
--- a/frontend/src/app/(home)/_components/shared.ts
+++ b/frontend/src/app/(home)/_components/shared.ts
@@ -44,4 +44,4 @@ export function buildContentClusterLookup(clusterDetails: TopicClusterDetail[])
}
return lookup
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/(home)/page.stories.tsx b/frontend/src/app/(home)/page.stories.tsx
index f2cb613d..4871d81f 100644
--- a/frontend/src/app/(home)/page.stories.tsx
+++ b/frontend/src/app/(home)/page.stories.tsx
@@ -71,4 +71,4 @@ export const WithFlashMessages: Story = {
errorMessage: "Filter failed",
successMessage: "Filters applied",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/health/_components/SourceDiversityPanel/index.test.tsx b/frontend/src/app/admin/health/_components/SourceDiversityPanel/index.test.tsx
index 0cc4fe00..e70e04da 100644
--- a/frontend/src/app/admin/health/_components/SourceDiversityPanel/index.test.tsx
+++ b/frontend/src/app/admin/health/_components/SourceDiversityPanel/index.test.tsx
@@ -95,4 +95,4 @@ describe("SourceDiversityPanel", () => {
screen.getByText("No source-diversity snapshots exist for this project yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/health/_components/SourceHealthPanel/index.stories.tsx b/frontend/src/app/admin/health/_components/SourceHealthPanel/index.stories.tsx
index 784dbe2b..4bcf1155 100644
--- a/frontend/src/app/admin/health/_components/SourceHealthPanel/index.stories.tsx
+++ b/frontend/src/app/admin/health/_components/SourceHealthPanel/index.stories.tsx
@@ -54,4 +54,4 @@ export const Empty: Story = {
statusLabel: "idle",
statusTone: "neutral",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/health/_components/SourceHealthPanel/index.test.tsx b/frontend/src/app/admin/health/_components/SourceHealthPanel/index.test.tsx
index f0839761..ead81518 100644
--- a/frontend/src/app/admin/health/_components/SourceHealthPanel/index.test.tsx
+++ b/frontend/src/app/admin/health/_components/SourceHealthPanel/index.test.tsx
@@ -60,4 +60,4 @@ describe("SourceHealthPanel", () => {
screen.getByText("No source configurations exist for this project yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/health/_components/SourceHealthPanel/index.tsx b/frontend/src/app/admin/health/_components/SourceHealthPanel/index.tsx
index b2428380..23d74294 100644
--- a/frontend/src/app/admin/health/_components/SourceHealthPanel/index.tsx
+++ b/frontend/src/app/admin/health/_components/SourceHealthPanel/index.tsx
@@ -116,4 +116,4 @@ export function SourceHealthPanel({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.stories.tsx b/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.stories.tsx
index f95170e7..5c315112 100644
--- a/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.stories.tsx
+++ b/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.stories.tsx
@@ -57,4 +57,4 @@ export const NoSnapshots: Story = {
statusTone: "neutral",
statusLabel: "idle",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.test.tsx b/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.test.tsx
index 0c354500..419b5f8c 100644
--- a/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.test.tsx
+++ b/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.test.tsx
@@ -93,4 +93,4 @@ describe("TopicCentroidPanel", () => {
screen.getByText("No centroid snapshot history exists for this project yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.tsx b/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.tsx
index 4e1af5f9..64e3126d 100644
--- a/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.tsx
+++ b/frontend/src/app/admin/health/_components/TopicCentroidPanel/index.tsx
@@ -228,4 +228,4 @@ export function TopicCentroidPanel({
>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.stories.tsx b/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.stories.tsx
index c64c46aa..7352b328 100644
--- a/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.stories.tsx
+++ b/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.stories.tsx
@@ -89,4 +89,4 @@ export const Empty: Story = {
summary: createSummary({ run_count: 0, failed_run_count: 0, latest_runs: [] }),
visibleRuns: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.test.tsx b/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.test.tsx
index 8ad59640..c692dbcf 100644
--- a/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.test.tsx
+++ b/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.test.tsx
@@ -87,4 +87,4 @@ describe("TrendTaskRunsPanel", () => {
screen.getByText("No trend task run history exists for this project yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.tsx b/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.tsx
index b1448e05..5bda6da4 100644
--- a/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.tsx
+++ b/frontend/src/app/admin/health/_components/TrendTaskRunsPanel/index.tsx
@@ -293,4 +293,4 @@ export function TrendTaskRunsPanel({
>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.stories.tsx b/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.stories.tsx
index b9f15efe..1a902237 100644
--- a/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.stories.tsx
+++ b/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.stories.tsx
@@ -17,4 +17,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.test.tsx b/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.test.tsx
index df1a909b..0ea08d17 100644
--- a/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.test.tsx
+++ b/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.test.tsx
@@ -25,4 +25,4 @@ describe("NewProjectFormCard", () => {
expect(redirectInput).toHaveAttribute("name", "redirectTo")
expect(redirectInput).toHaveAttribute("type", "hidden")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.tsx b/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.tsx
index 9602e7af..959ec6ba 100644
--- a/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.tsx
+++ b/frontend/src/app/admin/projects/new/_components/NewProjectFormCard/index.tsx
@@ -68,4 +68,4 @@ export function NewProjectFormCard() {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.stories.tsx b/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.stories.tsx
index 66b96cc7..1901fc32 100644
--- a/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.stories.tsx
+++ b/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.stories.tsx
@@ -28,4 +28,4 @@ export const Error: Story = {
tone: "error",
children: "A project with that name already exists.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.test.tsx b/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.test.tsx
index 9ab51956..3806ceb5 100644
--- a/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.test.tsx
+++ b/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.test.tsx
@@ -30,4 +30,4 @@ describe("ProjectFlashNotice", () => {
screen.getByText("Project created. You are now the first project admin."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.tsx b/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.tsx
index 156ca4f5..38a4c2af 100644
--- a/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.tsx
+++ b/frontend/src/app/admin/projects/new/_components/ProjectFlashNotice/index.tsx
@@ -24,4 +24,4 @@ export function ProjectFlashNotice({ tone, children }: ProjectFlashNoticeProps)
{children}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/projects/new/page.stories.tsx b/frontend/src/app/admin/projects/new/page.stories.tsx
index fbb0a3ce..befccb48 100644
--- a/frontend/src/app/admin/projects/new/page.stories.tsx
+++ b/frontend/src/app/admin/projects/new/page.stories.tsx
@@ -65,4 +65,4 @@ function NewProjectPagePreview({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/projects/new/page.test.tsx b/frontend/src/app/admin/projects/new/page.test.tsx
index a1c8ecbf..9a44e786 100644
--- a/frontend/src/app/admin/projects/new/page.test.tsx
+++ b/frontend/src/app/admin/projects/new/page.test.tsx
@@ -123,4 +123,4 @@ describe("NewProjectPage", () => {
screen.getByText("Project created. You are now the first project admin."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.stories.tsx b/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.stories.tsx
index b9183078..99c466bf 100644
--- a/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.stories.tsx
+++ b/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.stories.tsx
@@ -101,4 +101,4 @@ export const Empty: Story = {
selectedIntake: null,
selectedProject: createProject({ intake_enabled: false }),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.test.tsx b/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.test.tsx
index 991550d9..8e20a8cd 100644
--- a/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.test.tsx
+++ b/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.test.tsx
@@ -113,4 +113,4 @@ describe("NewsletterIntakePanel", () => {
screen.getByText("No inbound newsletters have been captured for this project yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.tsx b/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.tsx
index 88315381..dd495d30 100644
--- a/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.tsx
+++ b/frontend/src/app/admin/sources/_components/NewsletterIntakePanel/index.tsx
@@ -371,4 +371,4 @@ export function NewsletterIntakePanel({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.stories.tsx b/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.stories.tsx
index 9bd46a22..38ea7efb 100644
--- a/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.stories.tsx
+++ b/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.stories.tsx
@@ -98,4 +98,4 @@ export const Empty: Story = {
linkedinVerificationState: { label: "not configured", tone: "neutral" },
mastodonVerificationState: { label: "not configured", tone: "neutral" },
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.test.tsx b/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.test.tsx
index 17a579c9..8743c2e9 100644
--- a/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.test.tsx
+++ b/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.test.tsx
@@ -105,4 +105,4 @@ describe("ProviderSetupPanel", () => {
expect(screen.getByRole("button", { name: "Verify LinkedIn credentials" })).toBeDisabled()
expect(screen.getByRole("button", { name: "Verify Mastodon credentials" })).toBeDisabled()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.tsx b/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.tsx
index 2d7ed63d..cfb52adc 100644
--- a/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.tsx
+++ b/frontend/src/app/admin/sources/_components/ProviderSetupPanel/index.tsx
@@ -478,4 +478,4 @@ export function ProviderSetupPanel({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/_components/SourceConfigList/index.stories.tsx b/frontend/src/app/admin/sources/_components/SourceConfigList/index.stories.tsx
index e57e9e4f..84fc70fa 100644
--- a/frontend/src/app/admin/sources/_components/SourceConfigList/index.stories.tsx
+++ b/frontend/src/app/admin/sources/_components/SourceConfigList/index.stories.tsx
@@ -46,4 +46,4 @@ export const Empty: Story = {
args: {
rows: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/_components/SourceConfigList/index.test.tsx b/frontend/src/app/admin/sources/_components/SourceConfigList/index.test.tsx
index c74399aa..8e348070 100644
--- a/frontend/src/app/admin/sources/_components/SourceConfigList/index.test.tsx
+++ b/frontend/src/app/admin/sources/_components/SourceConfigList/index.test.tsx
@@ -68,4 +68,4 @@ describe("SourceConfigList", () => {
screen.getByText("No source configurations exist for this project yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/admin/sources/_components/SourceConfigList/index.tsx b/frontend/src/app/admin/sources/_components/SourceConfigList/index.tsx
index 60a597c8..12d77458 100644
--- a/frontend/src/app/admin/sources/_components/SourceConfigList/index.tsx
+++ b/frontend/src/app/admin/sources/_components/SourceConfigList/index.tsx
@@ -105,4 +105,4 @@ export function SourceConfigList({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/_components/helpers.ts b/frontend/src/app/admin/sources/_components/helpers.ts
index 0900c82d..97c2d06f 100644
--- a/frontend/src/app/admin/sources/_components/helpers.ts
+++ b/frontend/src/app/admin/sources/_components/helpers.ts
@@ -133,4 +133,4 @@ export function filterNewsletterIntakes(
}
return true
})
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/page.stories.tsx b/frontend/src/app/admin/sources/page.stories.tsx
index b5b37f17..848aa871 100644
--- a/frontend/src/app/admin/sources/page.stories.tsx
+++ b/frontend/src/app/admin/sources/page.stories.tsx
@@ -220,4 +220,4 @@ function SourcesPagePreview({ showError = false, showMessage = false }: SourcesP
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/admin/sources/page.tsx b/frontend/src/app/admin/sources/page.tsx
index 261676a6..21f15f94 100644
--- a/frontend/src/app/admin/sources/page.tsx
+++ b/frontend/src/app/admin/sources/page.tsx
@@ -169,4 +169,4 @@ export default async function SourcesPage({ searchParams }: SourcesPageProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/api/messages/threads/[threadId]/messages/route.test.ts b/frontend/src/app/api/messages/threads/[threadId]/messages/route.test.ts
new file mode 100644
index 00000000..82640840
--- /dev/null
+++ b/frontend/src/app/api/messages/threads/[threadId]/messages/route.test.ts
@@ -0,0 +1,67 @@
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import { createThreadMessage, getThreadMessages } from "@/lib/api"
+
+import { GET, POST } from "./route"
+
+vi.mock("@/lib/api", () => ({
+ createThreadMessage: vi.fn(),
+ getThreadMessages: vi.fn(),
+}))
+
+describe("/api/messages/threads/[threadId]/messages route", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ })
+
+ it("returns thread messages from the backend helper", async () => {
+ vi.mocked(getThreadMessages).mockResolvedValue([
+ {
+ id: 14,
+ thread: 3,
+ sender: 8,
+ sender_username: "maya",
+ sender_display_name: "Maya",
+ body: "Can you review this draft?",
+ created_at: "2026-05-03T10:00:00Z",
+ edited_at: null,
+ },
+ ])
+
+ const response = await GET(new Request("http://localhost/api/messages"), {
+ params: Promise.resolve({ threadId: "3" }),
+ })
+
+ expect(getThreadMessages).toHaveBeenCalledWith(3)
+ await expect(response.json()).resolves.toEqual([
+ expect.objectContaining({ id: 14, thread: 3 }),
+ ])
+ })
+
+ it("routes message creation to the backend helper", async () => {
+ vi.mocked(createThreadMessage).mockResolvedValue({
+ id: 15,
+ thread: 3,
+ sender: 4,
+ sender_username: "editor",
+ sender_display_name: "Editor",
+ body: "On it.",
+ created_at: "2026-05-03T10:01:00Z",
+ edited_at: null,
+ })
+
+ const response = await POST(
+ new Request("http://localhost/api/messages", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ body: "On it." }),
+ }),
+ {
+ params: Promise.resolve({ threadId: "3" }),
+ },
+ )
+
+ expect(createThreadMessage).toHaveBeenCalledWith(3, { body: "On it." })
+ expect(response.status).toBe(201)
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/app/api/messages/threads/[threadId]/messages/route.ts b/frontend/src/app/api/messages/threads/[threadId]/messages/route.ts
new file mode 100644
index 00000000..2c86cf20
--- /dev/null
+++ b/frontend/src/app/api/messages/threads/[threadId]/messages/route.ts
@@ -0,0 +1,62 @@
+import { NextResponse } from "next/server"
+
+import { createThreadMessage, getThreadMessages } from "@/lib/api"
+
+function buildErrorResponse(error: unknown, fallbackMessage: string) {
+ const message = error instanceof Error ? error.message : fallbackMessage
+ return NextResponse.json({ error: message }, { status: 400 })
+}
+
+async function parseThreadId(context: { params: Promise<{ threadId: string }> }) {
+ const { threadId } = await context.params
+ const parsedThreadId = Number.parseInt(threadId, 10)
+
+ if (Number.isNaN(parsedThreadId)) {
+ throw new Error("threadId must be a number.")
+ }
+
+ return parsedThreadId
+}
+
+/**
+ * Return one thread's message history through the Next.js route boundary.
+ */
+export async function GET(
+ request: Request,
+ context: { params: Promise<{ threadId: string }> },
+) {
+ void request
+
+ try {
+ return NextResponse.json(await getThreadMessages(await parseThreadId(context)))
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to load message history.")
+ }
+}
+
+/**
+ * Send one direct message through the Next.js route boundary.
+ */
+export async function POST(
+ request: Request,
+ context: { params: Promise<{ threadId: string }> },
+) {
+ try {
+ const payload = (await request.json()) as { body?: string }
+ if (typeof payload.body !== "string" || payload.body.trim().length === 0) {
+ return NextResponse.json(
+ { error: "body is required." },
+ { status: 400 },
+ )
+ }
+
+ return NextResponse.json(
+ await createThreadMessage(await parseThreadId(context), {
+ body: payload.body,
+ }),
+ { status: 201 },
+ )
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to send message.")
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/api/messages/threads/[threadId]/read/route.test.ts b/frontend/src/app/api/messages/threads/[threadId]/read/route.test.ts
new file mode 100644
index 00000000..dba37e9b
--- /dev/null
+++ b/frontend/src/app/api/messages/threads/[threadId]/read/route.test.ts
@@ -0,0 +1,32 @@
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import { markThreadRead } from "@/lib/api"
+
+import { POST } from "./route"
+
+vi.mock("@/lib/api", () => ({
+ markThreadRead: vi.fn(),
+}))
+
+describe("/api/messages/threads/[threadId]/read route", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ })
+
+ it("routes read markers to the backend helper", async () => {
+ vi.mocked(markThreadRead).mockResolvedValue({
+ thread_id: 3,
+ last_read_at: "2026-05-03T10:02:00Z",
+ })
+
+ const response = await POST(new Request("http://localhost/api/messages/read"), {
+ params: Promise.resolve({ threadId: "3" }),
+ })
+
+ expect(markThreadRead).toHaveBeenCalledWith(3)
+ await expect(response.json()).resolves.toEqual({
+ thread_id: 3,
+ last_read_at: "2026-05-03T10:02:00Z",
+ })
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/app/api/messages/threads/[threadId]/read/route.ts b/frontend/src/app/api/messages/threads/[threadId]/read/route.ts
new file mode 100644
index 00000000..eeeab465
--- /dev/null
+++ b/frontend/src/app/api/messages/threads/[threadId]/read/route.ts
@@ -0,0 +1,34 @@
+import { NextResponse } from "next/server"
+
+import { markThreadRead } from "@/lib/api"
+
+function buildErrorResponse(error: unknown, fallbackMessage: string) {
+ const message = error instanceof Error ? error.message : fallbackMessage
+ return NextResponse.json({ error: message }, { status: 400 })
+}
+
+/**
+ * Mark one direct-message thread as read through the Next.js route boundary.
+ */
+export async function POST(
+ request: Request,
+ context: { params: Promise<{ threadId: string }> },
+) {
+ void request
+
+ try {
+ const { threadId } = await context.params
+ const parsedThreadId = Number.parseInt(threadId, 10)
+
+ if (Number.isNaN(parsedThreadId)) {
+ return NextResponse.json(
+ { error: "threadId must be a number." },
+ { status: 400 },
+ )
+ }
+
+ return NextResponse.json(await markThreadRead(parsedThreadId))
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to update thread read status.")
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/api/messages/threads/route.test.ts b/frontend/src/app/api/messages/threads/route.test.ts
new file mode 100644
index 00000000..8f146a7a
--- /dev/null
+++ b/frontend/src/app/api/messages/threads/route.test.ts
@@ -0,0 +1,78 @@
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import { createMessageThread, getMessageThreads } from "@/lib/api"
+
+import { GET, POST } from "./route"
+
+vi.mock("@/lib/api", () => ({
+ createMessageThread: vi.fn(),
+ getMessageThreads: vi.fn(),
+}))
+
+describe("/api/messages/threads route", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ })
+
+ it("returns message threads from the backend helper", async () => {
+ vi.mocked(getMessageThreads).mockResolvedValue([
+ {
+ id: 3,
+ counterpart: {
+ id: 8,
+ username: "maya",
+ display_name: "Maya",
+ avatar_url: null,
+ avatar_thumbnail_url: null,
+ },
+ has_unread: true,
+ last_message_preview: "Can you review this draft?",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ ])
+
+ const response = await GET()
+
+ expect(getMessageThreads).toHaveBeenCalled()
+ await expect(response.json()).resolves.toEqual([
+ expect.objectContaining({ id: 3, has_unread: true }),
+ ])
+ })
+
+ it("routes thread creation to the backend helper", async () => {
+ vi.mocked(createMessageThread).mockResolvedValue({
+ id: 9,
+ counterpart: {
+ id: 5,
+ username: "liam",
+ display_name: "Liam",
+ avatar_url: null,
+ avatar_thumbnail_url: null,
+ },
+ has_unread: false,
+ last_message_preview: "Hello",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: "2026-05-03T10:00:00Z",
+ created_at: "2026-05-03T10:00:00Z",
+ })
+
+ const response = await POST(
+ new Request("http://localhost/api/messages/threads", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ recipient_user_id: 5,
+ opening_message: "Hello",
+ }),
+ }),
+ )
+
+ expect(createMessageThread).toHaveBeenCalledWith({
+ recipient_user_id: 5,
+ opening_message: "Hello",
+ })
+ expect(response.status).toBe(201)
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/app/api/messages/threads/route.ts b/frontend/src/app/api/messages/threads/route.ts
new file mode 100644
index 00000000..8c53dd29
--- /dev/null
+++ b/frontend/src/app/api/messages/threads/route.ts
@@ -0,0 +1,48 @@
+import { NextResponse } from "next/server"
+
+import { createMessageThread, getMessageThreads } from "@/lib/api"
+
+function buildErrorResponse(error: unknown, fallbackMessage: string) {
+ const message = error instanceof Error ? error.message : fallbackMessage
+ return NextResponse.json({ error: message }, { status: 400 })
+}
+
+/**
+ * Return the current user's direct-message threads through the Next.js route boundary.
+ */
+export async function GET() {
+ try {
+ return NextResponse.json(await getMessageThreads())
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to load message threads.")
+ }
+}
+
+/**
+ * Open or find a direct-message thread through the Next.js route boundary.
+ */
+export async function POST(request: Request) {
+ try {
+ const payload = (await request.json()) as {
+ recipient_user_id?: number
+ opening_message?: string
+ }
+
+ if (typeof payload.recipient_user_id !== "number") {
+ return NextResponse.json(
+ { error: "recipient_user_id is required." },
+ { status: 400 },
+ )
+ }
+
+ return NextResponse.json(
+ await createMessageThread({
+ recipient_user_id: payload.recipient_user_id,
+ opening_message: payload.opening_message,
+ }),
+ { status: 201 },
+ )
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to open message thread.")
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/api/notifications/route.test.ts b/frontend/src/app/api/notifications/route.test.ts
new file mode 100644
index 00000000..f538a1dc
--- /dev/null
+++ b/frontend/src/app/api/notifications/route.test.ts
@@ -0,0 +1,88 @@
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import {
+ getNotifications,
+ readAllNotifications,
+ readNotification,
+} from "@/lib/api"
+
+import { GET, PATCH } from "./route"
+
+vi.mock("@/lib/api", () => ({
+ getNotifications: vi.fn(),
+ readAllNotifications: vi.fn(),
+ readNotification: vi.fn(),
+}))
+
+describe("/api/notifications route", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ })
+
+ it("returns notifications from the backend helper", async () => {
+ vi.mocked(getNotifications).mockResolvedValue([
+ {
+ id: 1,
+ project: 3,
+ level: "info",
+ body: "Draft ready",
+ link_path: "/drafts",
+ metadata: {},
+ created_at: "2026-05-03T10:00:00Z",
+ read_at: null,
+ is_read: false,
+ },
+ ])
+
+ const response = await GET(
+ new Request("http://localhost/api/notifications?unread=true"),
+ )
+
+ expect(getNotifications).toHaveBeenCalledWith({ unread: true })
+ await expect(response.json()).resolves.toEqual([
+ expect.objectContaining({ id: 1, body: "Draft ready" }),
+ ])
+ })
+
+ it("routes individual read actions to the backend helper", async () => {
+ vi.mocked(readNotification).mockResolvedValue({
+ id: 7,
+ project: null,
+ level: "success",
+ body: "Read now",
+ link_path: "",
+ metadata: {},
+ created_at: "2026-05-03T10:00:00Z",
+ read_at: "2026-05-03T10:01:00Z",
+ is_read: true,
+ })
+
+ const response = await PATCH(
+ new Request("http://localhost/api/notifications", {
+ method: "PATCH",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ action: "read", notification_id: 7 }),
+ }),
+ )
+
+ expect(readNotification).toHaveBeenCalledWith(7)
+ await expect(response.json()).resolves.toEqual(
+ expect.objectContaining({ id: 7, is_read: true }),
+ )
+ })
+
+ it("routes mark-all actions to the backend helper", async () => {
+ vi.mocked(readAllNotifications).mockResolvedValue({ updated_count: 4 })
+
+ const response = await PATCH(
+ new Request("http://localhost/api/notifications", {
+ method: "PATCH",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ action: "read_all" }),
+ }),
+ )
+
+ expect(readAllNotifications).toHaveBeenCalled()
+ await expect(response.json()).resolves.toEqual({ updated_count: 4 })
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/app/api/notifications/route.ts b/frontend/src/app/api/notifications/route.ts
new file mode 100644
index 00000000..ad293d26
--- /dev/null
+++ b/frontend/src/app/api/notifications/route.ts
@@ -0,0 +1,67 @@
+import { NextResponse } from "next/server"
+
+import {
+ getNotifications,
+ readAllNotifications,
+ readNotification,
+} from "@/lib/api"
+
+function buildErrorResponse(error: unknown, fallbackMessage: string) {
+ const message = error instanceof Error ? error.message : fallbackMessage
+ return NextResponse.json({ error: message }, { status: 400 })
+}
+
+/**
+ * Return the current user's notifications through the Next.js route boundary.
+ *
+ * @param request - Incoming request containing optional unread filter params.
+ * @returns JSON notifications payload from the backend API.
+ */
+export async function GET(request: Request) {
+ const { searchParams } = new URL(request.url)
+
+ try {
+ return NextResponse.json(
+ await getNotifications({
+ unread: searchParams.get("unread") === "true",
+ }),
+ )
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to load notifications.")
+ }
+}
+
+/**
+ * Proxy notification read mutations through the Next.js route boundary.
+ *
+ * @param request - Incoming JSON request describing the desired mutation.
+ * @returns JSON mutation payload from the backend API.
+ */
+export async function PATCH(request: Request) {
+ try {
+ const payload = (await request.json()) as
+ | { action?: "read"; notification_id?: number }
+ | { action?: "read_all" }
+
+ if (payload.action === "read") {
+ if (typeof payload.notification_id !== "number") {
+ return NextResponse.json(
+ { error: "notification_id is required when action is read." },
+ { status: 400 },
+ )
+ }
+ return NextResponse.json(await readNotification(payload.notification_id))
+ }
+
+ if (payload.action === "read_all") {
+ return NextResponse.json(await readAllNotifications())
+ }
+
+ return NextResponse.json(
+ { error: "Unsupported notification action." },
+ { status: 400 },
+ )
+ } catch (error) {
+ return buildErrorResponse(error, "Unable to update notifications.")
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.stories.tsx b/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.stories.tsx
index b0675396..80a38f8f 100644
--- a/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.stories.tsx
+++ b/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.stories.tsx
@@ -69,4 +69,4 @@ export const Minimal: Story = {
effectiveRelevanceScore: null,
initialPendingSkills: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.test.tsx b/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.test.tsx
index 70f8d0cb..c94a2743 100644
--- a/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.test.tsx
+++ b/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.test.tsx
@@ -151,4 +151,4 @@ describe("ContentDetailMainColumn", () => {
expect(screen.getByText("unclassified")).toBeInTheDocument()
expect(screen.getByTestId("status-badge")).toHaveTextContent("Adjusted n/a")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.tsx b/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.tsx
index 4c8e92ab..124e0c20 100644
--- a/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.tsx
+++ b/frontend/src/app/content/[id]/_components/ContentDetailMainColumn/index.tsx
@@ -212,4 +212,4 @@ export function ContentDetailMainColumn({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.stories.tsx b/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.stories.tsx
index a8dd4f5b..362689e5 100644
--- a/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.stories.tsx
+++ b/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.stories.tsx
@@ -63,4 +63,4 @@ export const Empty: Story = {
reviewItems: [],
upvotes: 0,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.test.tsx b/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.test.tsx
index 9b0315c9..bf973b79 100644
--- a/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.test.tsx
+++ b/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.test.tsx
@@ -123,4 +123,4 @@ describe("ContentDetailSidebar", () => {
screen.getByText("This content has not been promoted by a theme suggestion yet."),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.tsx b/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.tsx
index a1325dcf..ea9f8923 100644
--- a/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.tsx
+++ b/frontend/src/app/content/[id]/_components/ContentDetailSidebar/index.tsx
@@ -108,4 +108,4 @@ export function ContentDetailSidebar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/content/[id]/_components/SkillActionBar/index.stories.tsx b/frontend/src/app/content/[id]/_components/SkillActionBar/index.stories.tsx
index b6e1daba..d1d75742 100644
--- a/frontend/src/app/content/[id]/_components/SkillActionBar/index.stories.tsx
+++ b/frontend/src/app/content/[id]/_components/SkillActionBar/index.stories.tsx
@@ -36,4 +36,4 @@ export const SummarizationDisabled: Story = {
args: {
canSummarize: false,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/content/[id]/page.stories.tsx b/frontend/src/app/content/[id]/page.stories.tsx
index c380a7ad..3eb6d486 100644
--- a/frontend/src/app/content/[id]/page.stories.tsx
+++ b/frontend/src/app/content/[id]/page.stories.tsx
@@ -141,4 +141,4 @@ function ContentDetailPagePreview({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/content/[id]/page.tsx b/frontend/src/app/content/[id]/page.tsx
index 3a724920..69441d34 100644
--- a/frontend/src/app/content/[id]/page.tsx
+++ b/frontend/src/app/content/[id]/page.tsx
@@ -136,4 +136,4 @@ export default async function ContentDetailPage({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftEditor/index.stories.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftEditor/index.stories.tsx
index 70d80d59..a053154d 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftEditor/index.stories.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftEditor/index.stories.tsx
@@ -150,4 +150,4 @@ export const WithGenerationError: Story = {
},
}),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.stories.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.stories.tsx
index ddeffd04..3360ac4a 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.stories.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.stories.tsx
@@ -45,4 +45,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.test.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.test.tsx
index 30cf50da..bf2b02fa 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.test.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.test.tsx
@@ -59,4 +59,4 @@ describe("DraftOverviewCards", () => {
expect(screen.getByText("2026-05-08")).toBeInTheDocument()
expect(screen.getByText("No manual edits yet.")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.tsx
index daad6f99..8b2fa21e 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftOverviewCards/index.tsx
@@ -61,4 +61,4 @@ export function DraftOverviewCards({ draft }: DraftOverviewCardsProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.stories.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.stories.tsx
index dff6c37c..452a884e 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.stories.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.stories.tsx
@@ -52,4 +52,4 @@ export const Html: Story = {
args: {
view: "html",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.test.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.test.tsx
index 7a3a2189..cd782436 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.test.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.test.tsx
@@ -45,4 +45,4 @@ describe("DraftRenderedOutput", () => {
expect(screen.getByText("Rendered HTML")).toBeInTheDocument()
expect(container.querySelector("h1")).toHaveTextContent("Draft")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.tsx
index 83f0f7b4..be4cd137 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.tsx
@@ -38,4 +38,4 @@ export function DraftRenderedOutput({ draft, view }: DraftRenderedOutputProps) {
}
return null
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.stories.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.stories.tsx
index 669e16dd..71a2203a 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.stories.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.stories.tsx
@@ -26,4 +26,4 @@ export const Markdown: Story = {
args: {
currentView: "markdown",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.test.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.test.tsx
index 7396f14b..6fb2820a 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.test.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.test.tsx
@@ -33,4 +33,4 @@ describe("DraftViewSwitcher", () => {
"/drafts?project=1",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.tsx b/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.tsx
index 0bb9f24d..a0208451 100644
--- a/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.tsx
+++ b/frontend/src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.tsx
@@ -78,4 +78,4 @@ export function DraftViewSwitcher({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/[draftId]/page.stories.tsx b/frontend/src/app/drafts/[draftId]/page.stories.tsx
index d7284eae..08d4c459 100644
--- a/frontend/src/app/drafts/[draftId]/page.stories.tsx
+++ b/frontend/src/app/drafts/[draftId]/page.stories.tsx
@@ -149,4 +149,4 @@ function DraftDetailPagePreview({
) : null}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/_components/DraftsList/index.stories.tsx b/frontend/src/app/drafts/_components/DraftsList/index.stories.tsx
index 4b00250e..0cc8270b 100644
--- a/frontend/src/app/drafts/_components/DraftsList/index.stories.tsx
+++ b/frontend/src/app/drafts/_components/DraftsList/index.stories.tsx
@@ -59,4 +59,4 @@ export const Empty: Story = {
args: {
drafts: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/_components/DraftsList/index.test.tsx b/frontend/src/app/drafts/_components/DraftsList/index.test.tsx
index cbef668e..7a2828c6 100644
--- a/frontend/src/app/drafts/_components/DraftsList/index.test.tsx
+++ b/frontend/src/app/drafts/_components/DraftsList/index.test.tsx
@@ -57,4 +57,4 @@ describe("DraftsList", () => {
)
expect(screen.getByText("Composer heuristic")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/drafts/_components/DraftsList/index.tsx b/frontend/src/app/drafts/_components/DraftsList/index.tsx
index deb2e9f5..7f140b8c 100644
--- a/frontend/src/app/drafts/_components/DraftsList/index.tsx
+++ b/frontend/src/app/drafts/_components/DraftsList/index.tsx
@@ -83,4 +83,4 @@ export function DraftsList({ drafts, selectedProjectId }: DraftsListProps) {
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/_components/DraftsOverviewCards/index.stories.tsx b/frontend/src/app/drafts/_components/DraftsOverviewCards/index.stories.tsx
index 83ba5641..63322ef2 100644
--- a/frontend/src/app/drafts/_components/DraftsOverviewCards/index.stories.tsx
+++ b/frontend/src/app/drafts/_components/DraftsOverviewCards/index.stories.tsx
@@ -50,4 +50,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/drafts/_components/DraftsOverviewCards/index.test.tsx b/frontend/src/app/drafts/_components/DraftsOverviewCards/index.test.tsx
index f9d7c330..2b1cc7d5 100644
--- a/frontend/src/app/drafts/_components/DraftsOverviewCards/index.test.tsx
+++ b/frontend/src/app/drafts/_components/DraftsOverviewCards/index.test.tsx
@@ -51,4 +51,4 @@ describe("DraftsOverviewCards", () => {
expect(screen.getByText("Drafts that ended in an error state.")).toBeInTheDocument()
expect(screen.getAllByText("1")).toHaveLength(5)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/drafts/_components/DraftsOverviewCards/index.tsx b/frontend/src/app/drafts/_components/DraftsOverviewCards/index.tsx
index 8bedcd7d..64835b20 100644
--- a/frontend/src/app/drafts/_components/DraftsOverviewCards/index.tsx
+++ b/frontend/src/app/drafts/_components/DraftsOverviewCards/index.tsx
@@ -51,4 +51,4 @@ export function DraftsOverviewCards({ drafts }: DraftsOverviewCardsProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/_components/DraftsToolbar/index.stories.tsx b/frontend/src/app/drafts/_components/DraftsToolbar/index.stories.tsx
index e50d2866..44a69ee3 100644
--- a/frontend/src/app/drafts/_components/DraftsToolbar/index.stories.tsx
+++ b/frontend/src/app/drafts/_components/DraftsToolbar/index.stories.tsx
@@ -27,4 +27,4 @@ export const AllDrafts: Story = {
currentPageHref: "/drafts?project=1",
statusFilter: "all",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/_components/DraftsToolbar/index.test.tsx b/frontend/src/app/drafts/_components/DraftsToolbar/index.test.tsx
index c2954b7e..571bf4ca 100644
--- a/frontend/src/app/drafts/_components/DraftsToolbar/index.test.tsx
+++ b/frontend/src/app/drafts/_components/DraftsToolbar/index.test.tsx
@@ -22,4 +22,4 @@ describe("DraftsToolbar", () => {
expect(container.querySelector('form[action="/api/projects/1/drafts/generate"]')).not.toBeNull()
expect(screen.getByRole("button", { name: "Generate now" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/drafts/_components/DraftsToolbar/index.tsx b/frontend/src/app/drafts/_components/DraftsToolbar/index.tsx
index da05ce10..7fa6cb2a 100644
--- a/frontend/src/app/drafts/_components/DraftsToolbar/index.tsx
+++ b/frontend/src/app/drafts/_components/DraftsToolbar/index.tsx
@@ -76,4 +76,4 @@ export function DraftsToolbar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/drafts/page.stories.tsx b/frontend/src/app/drafts/page.stories.tsx
index 50bff05d..d1889ce7 100644
--- a/frontend/src/app/drafts/page.stories.tsx
+++ b/frontend/src/app/drafts/page.stories.tsx
@@ -128,4 +128,4 @@ function DraftsPagePreview({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.stories.tsx b/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.stories.tsx
index 1bc2d5a9..57c18801 100644
--- a/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.stories.tsx
+++ b/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.stories.tsx
@@ -51,4 +51,4 @@ export const Empty: Story = {
projectConfig: null,
userRole: "member",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.test.tsx b/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.test.tsx
index 1d6014c9..627260bb 100644
--- a/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.test.tsx
+++ b/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.test.tsx
@@ -69,4 +69,4 @@ describe("AuthorityHistoryPanel", () => {
expect(screen.getByText("More recomputations will draw the trend line here.")).toBeInTheDocument()
expect(screen.queryByTestId("authority-weight-controls")).not.toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.tsx b/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.tsx
index 95bfa929..7b558638 100644
--- a/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.tsx
+++ b/frontend/src/app/entities/[id]/_components/AuthorityHistoryPanel/index.tsx
@@ -297,4 +297,4 @@ function AuthorityComponentCard({ label, value }: { label: string; value: number
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/AuthorityWeightControls/index.stories.tsx b/frontend/src/app/entities/[id]/_components/AuthorityWeightControls/index.stories.tsx
index f5393b75..3711fd71 100644
--- a/frontend/src/app/entities/[id]/_components/AuthorityWeightControls/index.stories.tsx
+++ b/frontend/src/app/entities/[id]/_components/AuthorityWeightControls/index.stories.tsx
@@ -29,4 +29,4 @@ export const NoSavedConfig: Story = {
args: {
projectConfig: null,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.test.tsx b/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.test.tsx
index 00570519..ae37b39e 100644
--- a/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.test.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.test.tsx
@@ -66,4 +66,4 @@ describe("EntityDetailPageContent", () => {
"Authority weight controls for project 3"
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.tsx b/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.tsx
index 76efe503..e02753e2 100644
--- a/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityDetailPageContent/index.tsx
@@ -78,4 +78,4 @@ export function EntityDetailPageContent({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.stories.tsx b/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.stories.tsx
index 1d961c15..32742003 100644
--- a/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.stories.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.stories.tsx
@@ -38,4 +38,4 @@ export const Empty: Story = {
args: {
mentions: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.test.tsx b/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.test.tsx
index aff5d8f1..dd13c7bc 100644
--- a/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.test.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.test.tsx
@@ -43,4 +43,4 @@ describe("EntityMentionsPanel", () => {
expect(screen.getByText("No extracted mentions exist for this entity yet.")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.tsx b/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.tsx
index 61fbc702..35ee8e60 100644
--- a/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityMentionsPanel/index.tsx
@@ -62,4 +62,4 @@ export function EntityMentionsPanel({ mentions, projectId }: EntityMentionsPanel
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.stories.tsx b/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.stories.tsx
index 12daaddd..81e4f1e9 100644
--- a/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.stories.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.stories.tsx
@@ -43,4 +43,4 @@ export const EmptyIdentity: Story = {
twitter_handle: "",
}),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.test.tsx b/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.test.tsx
index ebc0546c..0ebe78f7 100644
--- a/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.test.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.test.tsx
@@ -50,4 +50,4 @@ describe("EntityOverviewCard", () => {
expect(screen.getByText("No description is set for this entity yet.")).toBeInTheDocument()
expect(screen.getByText("No external identity links are set yet.")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.tsx b/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.tsx
index 379e9774..76e15176 100644
--- a/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntityOverviewCard/index.tsx
@@ -79,4 +79,4 @@ export function EntityOverviewCard({ entity }: EntityOverviewCardProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntitySidebar/index.stories.tsx b/frontend/src/app/entities/[id]/_components/EntitySidebar/index.stories.tsx
index 3ae0e0bd..9f3b884c 100644
--- a/frontend/src/app/entities/[id]/_components/EntitySidebar/index.stories.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntitySidebar/index.stories.tsx
@@ -31,4 +31,4 @@ export const Empty: Story = {
args: {
siblingEntities: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/_components/EntitySidebar/index.test.tsx b/frontend/src/app/entities/[id]/_components/EntitySidebar/index.test.tsx
index c85f1c11..5f6e044c 100644
--- a/frontend/src/app/entities/[id]/_components/EntitySidebar/index.test.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntitySidebar/index.test.tsx
@@ -32,4 +32,4 @@ describe("EntitySidebar", () => {
expect(screen.getByText("No other entities exist in this project yet.")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/[id]/_components/EntitySidebar/index.tsx b/frontend/src/app/entities/[id]/_components/EntitySidebar/index.tsx
index c13a65f1..e6c8d52f 100644
--- a/frontend/src/app/entities/[id]/_components/EntitySidebar/index.tsx
+++ b/frontend/src/app/entities/[id]/_components/EntitySidebar/index.tsx
@@ -71,4 +71,4 @@ export function EntitySidebar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/[id]/page.stories.tsx b/frontend/src/app/entities/[id]/page.stories.tsx
index 4467fdb1..fb28a5c7 100644
--- a/frontend/src/app/entities/[id]/page.stories.tsx
+++ b/frontend/src/app/entities/[id]/page.stories.tsx
@@ -92,4 +92,4 @@ function EntityDetailPagePreview({
successMessage={showMessage ? "Entity updated" : undefined}
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/CreateEntityCard/index.stories.tsx b/frontend/src/app/entities/_components/CreateEntityCard/index.stories.tsx
index 2474a808..345727d3 100644
--- a/frontend/src/app/entities/_components/CreateEntityCard/index.stories.tsx
+++ b/frontend/src/app/entities/_components/CreateEntityCard/index.stories.tsx
@@ -20,4 +20,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/entities/_components/CreateEntityCard/index.test.tsx b/frontend/src/app/entities/_components/CreateEntityCard/index.test.tsx
index 8d6c3c78..22cce71c 100644
--- a/frontend/src/app/entities/_components/CreateEntityCard/index.test.tsx
+++ b/frontend/src/app/entities/_components/CreateEntityCard/index.test.tsx
@@ -29,4 +29,4 @@ describe("CreateEntityCard", () => {
expect(redirectInput).toHaveAttribute("name", "redirectTo")
expect(redirectInput).toHaveAttribute("type", "hidden")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/_components/CreateEntityCard/index.tsx b/frontend/src/app/entities/_components/CreateEntityCard/index.tsx
index 38492a25..5c9e844e 100644
--- a/frontend/src/app/entities/_components/CreateEntityCard/index.tsx
+++ b/frontend/src/app/entities/_components/CreateEntityCard/index.tsx
@@ -75,4 +75,4 @@ export function CreateEntityCard({ projectId }: CreateEntityCardProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/EntitiesPageContent/index.test.tsx b/frontend/src/app/entities/_components/EntitiesPageContent/index.test.tsx
index 08fe8b32..217e8852 100644
--- a/frontend/src/app/entities/_components/EntitiesPageContent/index.test.tsx
+++ b/frontend/src/app/entities/_components/EntitiesPageContent/index.test.tsx
@@ -62,4 +62,4 @@ describe("EntitiesPageContent", () => {
expect(screen.getByText("River Labs")).toBeInTheDocument()
expect(screen.getByRole("link", { name: "Anthropic" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/_components/EntitiesPageContent/index.tsx b/frontend/src/app/entities/_components/EntitiesPageContent/index.tsx
index b755af41..07a148c4 100644
--- a/frontend/src/app/entities/_components/EntitiesPageContent/index.tsx
+++ b/frontend/src/app/entities/_components/EntitiesPageContent/index.tsx
@@ -67,4 +67,4 @@ export function EntitiesPageContent({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/EntityCandidatesCard/index.stories.tsx b/frontend/src/app/entities/_components/EntityCandidatesCard/index.stories.tsx
index a42ed7bb..a7f7d1da 100644
--- a/frontend/src/app/entities/_components/EntityCandidatesCard/index.stories.tsx
+++ b/frontend/src/app/entities/_components/EntityCandidatesCard/index.stories.tsx
@@ -32,4 +32,4 @@ export const Empty: Story = {
args: {
entityCandidates: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/EntityCandidatesCard/index.test.tsx b/frontend/src/app/entities/_components/EntityCandidatesCard/index.test.tsx
index eb689454..496f8cb1 100644
--- a/frontend/src/app/entities/_components/EntityCandidatesCard/index.test.tsx
+++ b/frontend/src/app/entities/_components/EntityCandidatesCard/index.test.tsx
@@ -34,4 +34,4 @@ describe("EntityCandidatesCard", () => {
expect(screen.getByLabelText("Merge into existing entity")).toBeInTheDocument()
expect(screen.getByText("pending")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/_components/EntityCandidatesCard/index.tsx b/frontend/src/app/entities/_components/EntityCandidatesCard/index.tsx
index 6bdd35c1..f558b029 100644
--- a/frontend/src/app/entities/_components/EntityCandidatesCard/index.tsx
+++ b/frontend/src/app/entities/_components/EntityCandidatesCard/index.tsx
@@ -143,4 +143,4 @@ export function EntityCandidatesCard({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/EntityCard/index.stories.tsx b/frontend/src/app/entities/_components/EntityCard/index.stories.tsx
index c5a16c20..4061ec6a 100644
--- a/frontend/src/app/entities/_components/EntityCard/index.stories.tsx
+++ b/frontend/src/app/entities/_components/EntityCard/index.stories.tsx
@@ -31,4 +31,4 @@ export const NoMentions: Story = {
mention_count: 0,
}),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/EntityCard/index.test.tsx b/frontend/src/app/entities/_components/EntityCard/index.test.tsx
index d3ba9791..44c9c87c 100644
--- a/frontend/src/app/entities/_components/EntityCard/index.test.tsx
+++ b/frontend/src/app/entities/_components/EntityCard/index.test.tsx
@@ -47,4 +47,4 @@ describe("EntityCard", () => {
expect(screen.getByText("No extracted mentions for this entity yet.")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/_components/EntityCard/index.tsx b/frontend/src/app/entities/_components/EntityCard/index.tsx
index 8b6e41cf..8e957dfe 100644
--- a/frontend/src/app/entities/_components/EntityCard/index.tsx
+++ b/frontend/src/app/entities/_components/EntityCard/index.tsx
@@ -180,4 +180,4 @@ export function EntityCard({ entity, projectId }: EntityCardProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/_components/shared.tsx b/frontend/src/app/entities/_components/shared.tsx
index 077e538e..e6685570 100644
--- a/frontend/src/app/entities/_components/shared.tsx
+++ b/frontend/src/app/entities/_components/shared.tsx
@@ -47,4 +47,4 @@ export function EntityTypeSelect({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.stories.tsx b/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.stories.tsx
index 7cdee1b9..184b6c16 100644
--- a/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.stories.tsx
+++ b/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.stories.tsx
@@ -37,4 +37,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.test.tsx b/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.test.tsx
index 77220f64..c1692fdb 100644
--- a/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.test.tsx
+++ b/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.test.tsx
@@ -45,4 +45,4 @@ describe("CandidateClusterCard", () => {
expect(screen.getByLabelText("Merge cluster into entity")).toBeInTheDocument()
expect(screen.getAllByTestId("status-badge")).toHaveLength(2)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.tsx b/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.tsx
index e0397428..2a8e5c31 100644
--- a/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.tsx
+++ b/frontend/src/app/entities/candidates/_components/CandidateClusterCard/index.tsx
@@ -150,4 +150,4 @@ export function CandidateClusterCard({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.stories.tsx b/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.stories.tsx
index 51a25e02..2dd7b2c5 100644
--- a/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.stories.tsx
+++ b/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.stories.tsx
@@ -30,4 +30,4 @@ export const AutoLog: Story = {
args: {
activeTab: "auto-log",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.test.tsx b/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.test.tsx
index 253884a7..898dd9cf 100644
--- a/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.test.tsx
+++ b/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.test.tsx
@@ -32,4 +32,4 @@ describe("CandidateQueueOverview", () => {
"/entities?project=7"
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.tsx b/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.tsx
index 53dacf1c..d4518d36 100644
--- a/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.tsx
+++ b/frontend/src/app/entities/candidates/_components/CandidateQueueOverview/index.tsx
@@ -85,4 +85,4 @@ export function CandidateQueueOverview({
>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.stories.tsx b/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.stories.tsx
index 6358d192..78002caf 100644
--- a/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.stories.tsx
+++ b/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.stories.tsx
@@ -41,4 +41,4 @@ export const Empty: Story = {
args: {
resolvedCandidates: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.test.tsx b/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.test.tsx
index 7e347d3a..96b9ec03 100644
--- a/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.test.tsx
+++ b/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.test.tsx
@@ -40,4 +40,4 @@ describe("ResolvedCandidateList", () => {
expect(screen.getByText("2 sources")).toBeInTheDocument()
expect(screen.getByTestId("status-badge")).toHaveTextContent("accepted")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.tsx b/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.tsx
index 83932314..16e13ef7 100644
--- a/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.tsx
+++ b/frontend/src/app/entities/candidates/_components/ResolvedCandidateList/index.tsx
@@ -63,4 +63,4 @@ export function ResolvedCandidateList({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/_components/shared.ts b/frontend/src/app/entities/candidates/_components/shared.ts
index d1bb295b..e4fe2389 100644
--- a/frontend/src/app/entities/candidates/_components/shared.ts
+++ b/frontend/src/app/entities/candidates/_components/shared.ts
@@ -45,4 +45,4 @@ export function groupCandidateClusters(
export function formatBlockedReason(reason: string) {
return reason.replaceAll("_", " ")
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/candidates/page.stories.tsx b/frontend/src/app/entities/candidates/page.stories.tsx
index 4c959ef0..6cfc547e 100644
--- a/frontend/src/app/entities/candidates/page.stories.tsx
+++ b/frontend/src/app/entities/candidates/page.stories.tsx
@@ -120,4 +120,4 @@ function CandidateQueuePagePreview({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/entities/page.stories.tsx b/frontend/src/app/entities/page.stories.tsx
index 149683e6..79654530 100644
--- a/frontend/src/app/entities/page.stories.tsx
+++ b/frontend/src/app/entities/page.stories.tsx
@@ -83,4 +83,4 @@ function EntitiesPagePreview({
successMessage={successMessage}
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/ideas/_components/IdeasQueueOverview/index.stories.tsx b/frontend/src/app/ideas/_components/IdeasQueueOverview/index.stories.tsx
index fab4865e..64acc43f 100644
--- a/frontend/src/app/ideas/_components/IdeasQueueOverview/index.stories.tsx
+++ b/frontend/src/app/ideas/_components/IdeasQueueOverview/index.stories.tsx
@@ -23,4 +23,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/ideas/_components/IdeasQueueOverview/index.test.tsx b/frontend/src/app/ideas/_components/IdeasQueueOverview/index.test.tsx
index 0ae1eb61..6ab3d41e 100644
--- a/frontend/src/app/ideas/_components/IdeasQueueOverview/index.test.tsx
+++ b/frontend/src/app/ideas/_components/IdeasQueueOverview/index.test.tsx
@@ -23,4 +23,4 @@ describe("IdeasQueueOverview", () => {
expect(screen.getByText("3")).toBeInTheDocument()
expect(screen.getByText("1")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/ideas/_components/IdeasQueueOverview/index.tsx b/frontend/src/app/ideas/_components/IdeasQueueOverview/index.tsx
index 8a162ed2..81b82d4a 100644
--- a/frontend/src/app/ideas/_components/IdeasQueueOverview/index.tsx
+++ b/frontend/src/app/ideas/_components/IdeasQueueOverview/index.tsx
@@ -53,4 +53,4 @@ export function IdeasQueueOverview({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/ideas/_components/IdeasToolbarCard/index.stories.tsx b/frontend/src/app/ideas/_components/IdeasToolbarCard/index.stories.tsx
index 026f804a..70c3ddc2 100644
--- a/frontend/src/app/ideas/_components/IdeasToolbarCard/index.stories.tsx
+++ b/frontend/src/app/ideas/_components/IdeasToolbarCard/index.stories.tsx
@@ -29,4 +29,4 @@ export const Filtered: Story = {
statusFilter: "accepted",
currentPageHref: "/ideas?project=1&status=accepted",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/ideas/_components/IdeasToolbarCard/index.test.tsx b/frontend/src/app/ideas/_components/IdeasToolbarCard/index.test.tsx
index b680a66c..e6e46c90 100644
--- a/frontend/src/app/ideas/_components/IdeasToolbarCard/index.test.tsx
+++ b/frontend/src/app/ideas/_components/IdeasToolbarCard/index.test.tsx
@@ -26,4 +26,4 @@ describe("IdeasToolbarCard", () => {
"/ideas?project=7&status=accepted",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/ideas/_components/IdeasToolbarCard/index.tsx b/frontend/src/app/ideas/_components/IdeasToolbarCard/index.tsx
index eaa15496..6a07b23a 100644
--- a/frontend/src/app/ideas/_components/IdeasToolbarCard/index.tsx
+++ b/frontend/src/app/ideas/_components/IdeasToolbarCard/index.tsx
@@ -69,4 +69,4 @@ export function IdeasToolbarCard({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/ideas/_components/OriginalContentIdeaCard/index.test.tsx b/frontend/src/app/ideas/_components/OriginalContentIdeaCard/index.test.tsx
index 691ebd20..08408414 100644
--- a/frontend/src/app/ideas/_components/OriginalContentIdeaCard/index.test.tsx
+++ b/frontend/src/app/ideas/_components/OriginalContentIdeaCard/index.test.tsx
@@ -48,4 +48,4 @@ describe("OriginalContentIdeaCard", () => {
expect(screen.getByText(/Decided by editor-2/)).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Mark written" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/ideas/_components/shared.ts b/frontend/src/app/ideas/_components/shared.ts
index c4bd7fbb..0d321a60 100644
--- a/frontend/src/app/ideas/_components/shared.ts
+++ b/frontend/src/app/ideas/_components/shared.ts
@@ -12,4 +12,4 @@ export const ideaStatusOptions = [
{ value: "dismissed", label: "Dismissed" },
] as const
-export const selectTriggerClassName = "min-h-11 w-full rounded-2xl border-border/12 bg-muted/70 px-4 py-3 text-sm text-foreground"
\ No newline at end of file
+export const selectTriggerClassName = "min-h-11 w-full rounded-2xl border-border/12 bg-muted/70 px-4 py-3 text-sm text-foreground"
diff --git a/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.stories.tsx b/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.stories.tsx
index d16dddbd..0ba4661e 100644
--- a/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.stories.tsx
+++ b/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.stories.tsx
@@ -42,4 +42,4 @@ export const Revoked: Story = {
args: {
invitation: createPublicMembershipInvitation({ status: "revoked" }),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.test.tsx b/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.test.tsx
index fd0345ce..f37db021 100644
--- a/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.test.tsx
+++ b/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.test.tsx
@@ -58,4 +58,4 @@ describe("InvitationDetailsCard", () => {
expect(screen.getByText("This invitation has been revoked.")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.tsx b/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.tsx
index 7677aff0..52f2309d 100644
--- a/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.tsx
+++ b/frontend/src/app/invite/[token]/_components/InvitationDetailsCard/index.tsx
@@ -76,4 +76,4 @@ export function InvitationDetailsCard({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/invite/[token]/_components/InvitePageContent/index.stories.tsx b/frontend/src/app/invite/[token]/_components/InvitePageContent/index.stories.tsx
index fef0bd24..e655fc3e 100644
--- a/frontend/src/app/invite/[token]/_components/InvitePageContent/index.stories.tsx
+++ b/frontend/src/app/invite/[token]/_components/InvitePageContent/index.stories.tsx
@@ -37,4 +37,4 @@ export const FetchError: Story = {
invitation: null,
invitationError: "Unable to load invitation.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/invite/[token]/_components/InvitePageContent/index.test.tsx b/frontend/src/app/invite/[token]/_components/InvitePageContent/index.test.tsx
index 61ea6d2d..451d0b64 100644
--- a/frontend/src/app/invite/[token]/_components/InvitePageContent/index.test.tsx
+++ b/frontend/src/app/invite/[token]/_components/InvitePageContent/index.test.tsx
@@ -36,4 +36,4 @@ describe("InvitePageContent", () => {
expect(screen.getByText("Unable to load invitation.")).toBeInTheDocument()
expect(screen.queryByText("Invited Project")).not.toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/invite/[token]/_components/InvitePageContent/index.tsx b/frontend/src/app/invite/[token]/_components/InvitePageContent/index.tsx
index 8e8f6efc..5b9e421d 100644
--- a/frontend/src/app/invite/[token]/_components/InvitePageContent/index.tsx
+++ b/frontend/src/app/invite/[token]/_components/InvitePageContent/index.tsx
@@ -62,4 +62,4 @@ export function InvitePageContent({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/invite/[token]/page.stories.tsx b/frontend/src/app/invite/[token]/page.stories.tsx
index aa26ddcf..56e3f440 100644
--- a/frontend/src/app/invite/[token]/page.stories.tsx
+++ b/frontend/src/app/invite/[token]/page.stories.tsx
@@ -61,4 +61,4 @@ function InvitePagePreview({
token="invite-token"
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/invite/[token]/page.test.tsx b/frontend/src/app/invite/[token]/page.test.tsx
index 24dd06a4..077f23aa 100644
--- a/frontend/src/app/invite/[token]/page.test.tsx
+++ b/frontend/src/app/invite/[token]/page.test.tsx
@@ -73,4 +73,4 @@ describe("InvitePage", () => {
expect(screen.getByText("Invitation lookup failed")).toBeInTheDocument()
expect(screen.queryByText("Invited Project")).not.toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/login/_components/LoginForm/index.stories.tsx b/frontend/src/app/login/_components/LoginForm/index.stories.tsx
index 73dcb20e..40b25534 100644
--- a/frontend/src/app/login/_components/LoginForm/index.stories.tsx
+++ b/frontend/src/app/login/_components/LoginForm/index.stories.tsx
@@ -20,4 +20,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/login/_components/LoginForm/index.test.tsx b/frontend/src/app/login/_components/LoginForm/index.test.tsx
index fc9b731a..c4f20d92 100644
--- a/frontend/src/app/login/_components/LoginForm/index.test.tsx
+++ b/frontend/src/app/login/_components/LoginForm/index.test.tsx
@@ -108,4 +108,4 @@ describe("LoginForm", () => {
expect(await screen.findByText("Unable to sign in right now.")).toBeInTheDocument()
expect(pushMock).not.toHaveBeenCalled()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/login/_components/LoginForm/index.tsx b/frontend/src/app/login/_components/LoginForm/index.tsx
index d1678b8f..0987be66 100644
--- a/frontend/src/app/login/_components/LoginForm/index.tsx
+++ b/frontend/src/app/login/_components/LoginForm/index.tsx
@@ -109,4 +109,4 @@ export default function LoginForm({ callbackUrl }: LoginFormProps) {
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/login/_components/LoginPageContent/index.stories.tsx b/frontend/src/app/login/_components/LoginPageContent/index.stories.tsx
index 08d2b0e1..9a60ed0e 100644
--- a/frontend/src/app/login/_components/LoginPageContent/index.stories.tsx
+++ b/frontend/src/app/login/_components/LoginPageContent/index.stories.tsx
@@ -20,4 +20,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/login/_components/LoginPageContent/index.test.tsx b/frontend/src/app/login/_components/LoginPageContent/index.test.tsx
index 9b317e12..2f6fbc5d 100644
--- a/frontend/src/app/login/_components/LoginPageContent/index.test.tsx
+++ b/frontend/src/app/login/_components/LoginPageContent/index.test.tsx
@@ -38,4 +38,4 @@ describe("LoginPageContent", () => {
"/admin/",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/login/_components/LoginPageContent/index.tsx b/frontend/src/app/login/_components/LoginPageContent/index.tsx
index 878c05e5..589571ad 100644
--- a/frontend/src/app/login/_components/LoginPageContent/index.tsx
+++ b/frontend/src/app/login/_components/LoginPageContent/index.tsx
@@ -48,4 +48,4 @@ export default function LoginPageContent({ callbackUrl }: LoginPageContentProps)
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/login/_components/SocialAuthButtons/index.stories.tsx b/frontend/src/app/login/_components/SocialAuthButtons/index.stories.tsx
index 13cd1521..a069ac25 100644
--- a/frontend/src/app/login/_components/SocialAuthButtons/index.stories.tsx
+++ b/frontend/src/app/login/_components/SocialAuthButtons/index.stories.tsx
@@ -20,4 +20,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/login/_components/SocialAuthButtons/index.test.tsx b/frontend/src/app/login/_components/SocialAuthButtons/index.test.tsx
index ffd9fe0a..88932099 100644
--- a/frontend/src/app/login/_components/SocialAuthButtons/index.test.tsx
+++ b/frontend/src/app/login/_components/SocialAuthButtons/index.test.tsx
@@ -29,4 +29,4 @@ describe("SocialAuthButtons", () => {
callbackUrl: "/content/4?project=2",
})
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/login/_components/SocialAuthButtons/index.tsx b/frontend/src/app/login/_components/SocialAuthButtons/index.tsx
index 9f1bb182..6daa3ee8 100644
--- a/frontend/src/app/login/_components/SocialAuthButtons/index.tsx
+++ b/frontend/src/app/login/_components/SocialAuthButtons/index.tsx
@@ -59,4 +59,4 @@ export default function SocialAuthButtons({ callbackUrl }: SocialAuthButtonsProp
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/login/page.stories.tsx b/frontend/src/app/login/page.stories.tsx
index 59cac9c6..eb76eb1c 100644
--- a/frontend/src/app/login/page.stories.tsx
+++ b/frontend/src/app/login/page.stories.tsx
@@ -33,4 +33,4 @@ export const InviteCallback: Story = {
function LoginPagePreview({ callbackUrl = "/" }: LoginPagePreviewProps) {
return
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/messages/_components/MessagesPageContent/index.tsx b/frontend/src/app/messages/_components/MessagesPageContent/index.tsx
new file mode 100644
index 00000000..61c193eb
--- /dev/null
+++ b/frontend/src/app/messages/_components/MessagesPageContent/index.tsx
@@ -0,0 +1,54 @@
+import { MessagesWorkspace } from "@/app/messages/_components/MessagesWorkspace"
+import { AppShell } from "@/components/layout/AppShell"
+import type {
+ DirectMessage,
+ MessageThread,
+ Project,
+ ProjectMembership,
+} from "@/lib/types"
+
+type MessagesPageContentProps = {
+ availableRecipients: ProjectMembership[]
+ projects: Project[]
+ selectedProject: Project
+ currentUserId: number
+ initialThreads: MessageThread[]
+ initialRecipientUserId: number | null
+ initialSelectedThreadId: number | null
+ initialMessages: DirectMessage[]
+}
+
+function getApiBaseUrl() {
+ return process.env.NEWSLETTER_API_BASE_URL ?? "http://127.0.0.1:8080"
+}
+
+/** Render the editor-facing direct-message workspace for one selected project shell. */
+export function MessagesPageContent({
+ availableRecipients,
+ projects,
+ selectedProject,
+ currentUserId,
+ initialThreads,
+ initialRecipientUserId,
+ initialSelectedThreadId,
+ initialMessages,
+}: MessagesPageContentProps) {
+ return (
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/app/messages/_components/MessagesWorkspace/index.test.tsx b/frontend/src/app/messages/_components/MessagesWorkspace/index.test.tsx
new file mode 100644
index 00000000..362d29c8
--- /dev/null
+++ b/frontend/src/app/messages/_components/MessagesWorkspace/index.test.tsx
@@ -0,0 +1,257 @@
+import { act, render, screen, waitFor } from "@testing-library/react"
+import userEvent from "@testing-library/user-event"
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import { MessagesWorkspace } from "@/app/messages/_components/MessagesWorkspace"
+import {
+ fetchMessageThreads,
+ fetchThreadMessages,
+ markMessageThreadRead,
+ openMessageThread,
+ sendThreadMessage,
+} from "@/lib/messages"
+import { QueryProvider } from "@/providers/QueryProvider"
+
+const sockets: FakeWebSocket[] = []
+
+class FakeWebSocket {
+ onmessage: ((event: { data: string }) => void) | null = null
+ close = vi.fn()
+
+ constructor(public readonly url: string) {
+ sockets.push(this)
+ }
+
+ emit(payload: unknown) {
+ this.onmessage?.({ data: JSON.stringify(payload) })
+ }
+}
+
+vi.mock("@/lib/messages", () => ({
+ MESSAGE_THREADS_QUERY_KEY: ["message-threads"],
+ fetchMessageThreads: vi.fn(),
+ fetchThreadMessages: vi.fn(),
+ markMessageThreadRead: vi.fn(),
+ openMessageThread: vi.fn(),
+ sendThreadMessage: vi.fn(),
+ threadMessagesQueryKey: (threadId: number) => ["thread-messages", threadId],
+}))
+
+function renderWorkspace(overrides: Partial> = {}) {
+ return render(
+
+
+ ,
+ )
+}
+
+describe("MessagesWorkspace", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ sockets.length = 0
+ vi.stubGlobal("WebSocket", FakeWebSocket)
+ vi.mocked(fetchMessageThreads).mockResolvedValue([
+ {
+ id: 7,
+ counterpart: {
+ id: 8,
+ username: "maya",
+ display_name: "Maya",
+ avatar_url: null,
+ avatar_thumbnail_url: null,
+ },
+ has_unread: false,
+ last_message_preview: "Can you review this draft?",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: "2026-05-03T10:00:00Z",
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ ])
+ vi.mocked(fetchThreadMessages).mockResolvedValue([
+ {
+ id: 11,
+ thread: 7,
+ sender: 8,
+ sender_username: "maya",
+ sender_display_name: "Maya",
+ body: "Can you review this draft?",
+ created_at: "2026-05-03T10:00:00Z",
+ edited_at: null,
+ },
+ ])
+ vi.mocked(markMessageThreadRead).mockResolvedValue({
+ thread_id: 7,
+ last_read_at: "2026-05-03T10:00:00Z",
+ })
+ vi.mocked(openMessageThread).mockResolvedValue({
+ id: 9,
+ counterpart: {
+ id: 8,
+ username: "maya",
+ display_name: "Maya",
+ avatar_url: null,
+ avatar_thumbnail_url: null,
+ },
+ has_unread: false,
+ last_message_preview: "Starting thread",
+ last_message_at: "2026-05-03T10:05:00Z",
+ last_read_at: "2026-05-03T10:05:00Z",
+ created_at: "2026-05-03T10:05:00Z",
+ })
+ vi.mocked(sendThreadMessage).mockImplementation(async (_threadId, body) => ({
+ id: 12,
+ thread: 7,
+ sender: 4,
+ sender_username: "editor",
+ sender_display_name: "Editor",
+ body,
+ created_at: "2026-05-03T10:05:00Z",
+ edited_at: null,
+ }))
+ })
+
+ it("applies incoming websocket messages to the selected thread", async () => {
+ renderWorkspace()
+
+ await waitFor(() => {
+ expect(sockets).toHaveLength(1)
+ })
+
+ act(() => {
+ sockets[0].emit({
+ type: "message.created",
+ message: {
+ id: 13,
+ thread: 7,
+ sender: 8,
+ sender_username: "maya",
+ sender_display_name: "Maya",
+ body: "I also added notes inline.",
+ created_at: "2026-05-03T10:06:00Z",
+ edited_at: null,
+ },
+ })
+ })
+
+ await waitFor(() => {
+ expect(screen.getAllByText("I also added notes inline.")).toHaveLength(2)
+ })
+ })
+
+ it("sends a new reply through the internal route helper", async () => {
+ const user = userEvent.setup()
+
+ renderWorkspace()
+
+ await user.type(screen.getByRole("textbox", { name: "Message body" }), "On it.")
+ await user.click(screen.getByRole("button", { name: "Send message" }))
+
+ await waitFor(() => {
+ expect(sendThreadMessage).toHaveBeenCalledWith(7, "On it.")
+ })
+ expect(screen.getAllByText("On it.")).toHaveLength(2)
+ })
+
+ it("starts a new conversation with a selected collaborator", async () => {
+ const user = userEvent.setup()
+
+ vi.mocked(fetchThreadMessages).mockImplementation(async (threadId) => {
+ if (threadId === 9) {
+ return [
+ {
+ id: 20,
+ thread: 9,
+ sender: 4,
+ sender_username: "editor",
+ sender_display_name: "Editor",
+ body: "Starting thread",
+ created_at: "2026-05-03T10:05:00Z",
+ edited_at: null,
+ },
+ ]
+ }
+
+ return [
+ {
+ id: 11,
+ thread: 7,
+ sender: 8,
+ sender_username: "maya",
+ sender_display_name: "Maya",
+ body: "Can you review this draft?",
+ created_at: "2026-05-03T10:00:00Z",
+ edited_at: null,
+ },
+ ]
+ })
+
+ renderWorkspace({
+ initialMessages: [],
+ initialRecipientUserId: 8,
+ initialSelectedThreadId: null,
+ initialThreads: [],
+ })
+
+ await user.type(
+ screen.getByRole("textbox", { name: "Opening message" }),
+ "Starting thread",
+ )
+ await user.click(screen.getByRole("button", { name: "Start conversation" }))
+
+ await waitFor(() => {
+ expect(openMessageThread).toHaveBeenCalledWith({
+ recipient_user_id: 8,
+ opening_message: "Starting thread",
+ })
+ })
+ expect(screen.getAllByText("Starting thread")).toHaveLength(2)
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/app/messages/_components/MessagesWorkspace/index.tsx b/frontend/src/app/messages/_components/MessagesWorkspace/index.tsx
new file mode 100644
index 00000000..e2b59d5f
--- /dev/null
+++ b/frontend/src/app/messages/_components/MessagesWorkspace/index.tsx
@@ -0,0 +1,510 @@
+"use client"
+
+import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
+import { useEffect, useMemo, useState } from "react"
+
+import { Alert, AlertDescription } from "@/components/ui/alert"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
+import { Textarea } from "@/components/ui/textarea"
+import {
+ fetchMessageThreads,
+ fetchThreadMessages,
+ markMessageThreadRead,
+ MESSAGE_THREADS_QUERY_KEY,
+ openMessageThread,
+ sendThreadMessage,
+ threadMessagesQueryKey,
+} from "@/lib/messages"
+import type { DirectMessage, MessageThread, ProjectMembership } from "@/lib/types"
+
+type MessagesWorkspaceProps = {
+ apiBaseUrl: string
+ availableRecipients: ProjectMembership[]
+ currentUserId: number
+ initialThreads: MessageThread[]
+ initialRecipientUserId: number | null
+ initialSelectedThreadId: number | null
+ initialMessages: DirectMessage[]
+}
+
+function buildMessagesWebsocketUrl(apiBaseUrl: string, threadId: number) {
+ const websocketUrl = new URL(`/ws/messages/${threadId}/`, apiBaseUrl)
+ websocketUrl.protocol = websocketUrl.protocol === "https:" ? "wss:" : "ws:"
+ return websocketUrl.toString()
+}
+
+function formatTimestamp(value: string | null) {
+ if (!value) {
+ return "Waiting for the first message"
+ }
+
+ return new Intl.DateTimeFormat("en", {
+ dateStyle: "medium",
+ timeStyle: "short",
+ }).format(new Date(value))
+}
+
+function upsertMessage(
+ currentMessages: DirectMessage[],
+ incomingMessage: DirectMessage,
+) {
+ const remainingMessages = currentMessages.filter(
+ (message) => message.id !== incomingMessage.id,
+ )
+
+ return [...remainingMessages, incomingMessage].sort((left, right) => {
+ const leftTime = new Date(left.created_at).getTime()
+ const rightTime = new Date(right.created_at).getTime()
+
+ if (leftTime === rightTime) {
+ return left.id - right.id
+ }
+
+ return leftTime - rightTime
+ })
+}
+
+function updateThreadSummary(
+ currentThreads: MessageThread[],
+ incomingMessage: DirectMessage,
+) {
+ const matchingThread = currentThreads.find(
+ (thread) => thread.id === incomingMessage.thread,
+ )
+
+ if (!matchingThread) {
+ return currentThreads
+ }
+
+ const updatedThread: MessageThread = {
+ ...matchingThread,
+ has_unread: false,
+ last_message_at: incomingMessage.created_at,
+ last_message_preview: incomingMessage.body.slice(0, 140),
+ last_read_at: incomingMessage.created_at,
+ }
+
+ return [
+ updatedThread,
+ ...currentThreads.filter((thread) => thread.id !== incomingMessage.thread),
+ ]
+}
+
+function upsertThread(
+ currentThreads: MessageThread[],
+ incomingThread: MessageThread,
+) {
+ return [
+ incomingThread,
+ ...currentThreads.filter((thread) => thread.id !== incomingThread.id),
+ ]
+}
+
+/** Render the interactive thread list, live message history, and composer. */
+export function MessagesWorkspace({
+ apiBaseUrl,
+ availableRecipients,
+ currentUserId,
+ initialThreads,
+ initialRecipientUserId,
+ initialSelectedThreadId,
+ initialMessages,
+}: MessagesWorkspaceProps) {
+ const queryClient = useQueryClient()
+ const [selectedThreadId, setSelectedThreadId] = useState(
+ initialSelectedThreadId,
+ )
+ const [selectedRecipientId, setSelectedRecipientId] = useState(
+ initialRecipientUserId ?? availableRecipients[0]?.user ?? null,
+ )
+ const [openingMessage, setOpeningMessage] = useState("")
+ const [draftBody, setDraftBody] = useState("")
+
+ const threadsQuery = useQuery({
+ queryKey: MESSAGE_THREADS_QUERY_KEY,
+ queryFn: fetchMessageThreads,
+ initialData: initialThreads,
+ })
+ const threads = useMemo(() => threadsQuery.data ?? [], [threadsQuery.data])
+ const activeRecipientId = useMemo(() => {
+ if (availableRecipients.length === 0) {
+ return null
+ }
+
+ if (
+ selectedRecipientId !== null &&
+ availableRecipients.some((recipient) => recipient.user === selectedRecipientId)
+ ) {
+ return selectedRecipientId
+ }
+
+ if (
+ initialRecipientUserId !== null &&
+ availableRecipients.some((recipient) => recipient.user === initialRecipientUserId)
+ ) {
+ return initialRecipientUserId
+ }
+
+ return availableRecipients[0].user
+ }, [availableRecipients, initialRecipientUserId, selectedRecipientId])
+ const activeThreadId = useMemo(() => {
+ if (threads.length === 0) {
+ return null
+ }
+
+ if (selectedThreadId !== null && threads.some((thread) => thread.id === selectedThreadId)) {
+ return selectedThreadId
+ }
+
+ return threads[0].id
+ }, [selectedThreadId, threads])
+ const selectedThread = threads.find((thread) => thread.id === activeThreadId) ?? null
+
+ const messagesQuery = useQuery({
+ queryKey: threadMessagesQueryKey(activeThreadId ?? 0),
+ queryFn: () => fetchThreadMessages(activeThreadId ?? 0),
+ enabled: activeThreadId !== null,
+ initialData:
+ activeThreadId === initialSelectedThreadId ? initialMessages : undefined,
+ })
+
+ const markReadMutation = useMutation({
+ mutationFn: markMessageThreadRead,
+ onSuccess: (payload) => {
+ queryClient.setQueryData(
+ MESSAGE_THREADS_QUERY_KEY,
+ (currentThreads = []) =>
+ currentThreads.map((thread) =>
+ thread.id === payload.thread_id
+ ? {
+ ...thread,
+ has_unread: false,
+ last_read_at: payload.last_read_at,
+ }
+ : thread,
+ ),
+ )
+ },
+ })
+
+ const sendMessageMutation = useMutation({
+ mutationFn: ({ body, threadId }: { body: string; threadId: number }) =>
+ sendThreadMessage(threadId, body),
+ onSuccess: (message) => {
+ setDraftBody("")
+ queryClient.setQueryData(
+ threadMessagesQueryKey(message.thread),
+ (currentMessages = []) => upsertMessage(currentMessages, message),
+ )
+ queryClient.setQueryData(
+ MESSAGE_THREADS_QUERY_KEY,
+ (currentThreads = []) => updateThreadSummary(currentThreads, message),
+ )
+ },
+ })
+
+ const openThreadMutation = useMutation({
+ mutationFn: ({
+ openingMessage,
+ recipientUserId,
+ }: {
+ openingMessage: string
+ recipientUserId: number
+ }) =>
+ openMessageThread({
+ recipient_user_id: recipientUserId,
+ opening_message: openingMessage || undefined,
+ }),
+ onSuccess: (thread) => {
+ setOpeningMessage("")
+ queryClient.setQueryData(
+ MESSAGE_THREADS_QUERY_KEY,
+ (currentThreads = []) => upsertThread(currentThreads, thread),
+ )
+ },
+ })
+
+ useEffect(() => {
+ if (
+ activeThreadId === null ||
+ !selectedThread?.has_unread ||
+ !messagesQuery.isSuccess
+ ) {
+ return
+ }
+
+ void markReadMutation.mutateAsync(activeThreadId)
+ }, [activeThreadId, messagesQuery.isSuccess, markReadMutation, selectedThread?.has_unread])
+
+ useEffect(() => {
+ if (activeThreadId === null) {
+ return undefined
+ }
+
+ const socket = new WebSocket(buildMessagesWebsocketUrl(apiBaseUrl, activeThreadId))
+ socket.onmessage = (event) => {
+ try {
+ const payload = JSON.parse(event.data) as {
+ type?: string
+ message?: DirectMessage
+ }
+
+ if (payload.type !== "message.created" || payload.message === undefined) {
+ return
+ }
+
+ queryClient.setQueryData(
+ threadMessagesQueryKey(activeThreadId),
+ (currentMessages = []) =>
+ upsertMessage(currentMessages, payload.message as DirectMessage),
+ )
+ queryClient.setQueryData(
+ MESSAGE_THREADS_QUERY_KEY,
+ (currentThreads = []) =>
+ updateThreadSummary(currentThreads, payload.message as DirectMessage),
+ )
+
+ if ((payload.message as DirectMessage).sender !== currentUserId) {
+ void markReadMutation.mutateAsync(activeThreadId)
+ }
+ } catch {
+ // Ignore malformed websocket frames and keep the thread usable.
+ }
+ }
+
+ return () => {
+ socket.close()
+ }
+ }, [activeThreadId, apiBaseUrl, currentUserId, markReadMutation, queryClient])
+
+ async function handleSubmit(event: React.FormEvent) {
+ event.preventDefault()
+
+ if (activeThreadId === null || draftBody.trim().length === 0) {
+ return
+ }
+
+ await sendMessageMutation.mutateAsync({
+ body: draftBody.trim(),
+ threadId: activeThreadId,
+ })
+ }
+
+ async function handleStartConversation(event: React.FormEvent) {
+ event.preventDefault()
+
+ if (activeRecipientId === null) {
+ return
+ }
+
+ const thread = await openThreadMutation.mutateAsync({
+ openingMessage: openingMessage.trim(),
+ recipientUserId: activeRecipientId,
+ })
+
+ await queryClient.fetchQuery({
+ queryKey: threadMessagesQueryKey(thread.id),
+ queryFn: () => fetchThreadMessages(thread.id),
+ })
+ setSelectedThreadId(thread.id)
+ }
+
+ const canStartConversation = activeRecipientId !== null
+
+ return (
+
+
+
+ Threads
+
+
+
+
+ {threadsQuery.isError ? (
+
+ Unable to load message threads.
+
+ ) : threads.length === 0 ? (
+
+
+ No conversations yet. Start one from the project collaborators listed above.
+
+
+ ) : (
+ threads.map((thread) => {
+ const isSelected = thread.id === activeThreadId
+ const counterpartName =
+ thread.counterpart?.display_name || thread.counterpart?.username || "Unknown user"
+
+ return (
+
+ )
+ })
+ )}
+
+
+
+
+
+
+ {selectedThread?.counterpart?.display_name ||
+ selectedThread?.counterpart?.username ||
+ "Conversation"}
+
+
+
+ {selectedThread === null ? (
+
+ Select a thread to read and reply.
+
+ ) : messagesQuery.isError ? (
+
+ Unable to load this thread.
+
+ ) : (
+ <>
+
+ {(messagesQuery.data ?? []).length === 0 ? (
+
+ No messages yet. Send the first reply to start the conversation.
+
+ ) : (
+ (messagesQuery.data ?? []).map((message) => {
+ const isCurrentUser = message.sender === currentUserId
+
+ return (
+
+
+ {!isCurrentUser ? (
+
+ {message.sender_display_name}
+
+ ) : null}
+
{message.body}
+
+ {formatTimestamp(message.created_at)}
+
+
+
+ )
+ })
+ )}
+
+
+
+ >
+ )}
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/app/messages/page.test.tsx b/frontend/src/app/messages/page.test.tsx
new file mode 100644
index 00000000..5cc451da
--- /dev/null
+++ b/frontend/src/app/messages/page.test.tsx
@@ -0,0 +1,226 @@
+import { render, screen } from "@testing-library/react"
+import type { ReactNode } from "react"
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import type {
+ DirectMessage,
+ MessageThread,
+ Project,
+ ProjectMembership,
+ UserProfile,
+} from "@/lib/types"
+
+const {
+ getCurrentUserProfileMock,
+ getMessageThreadsMock,
+ getProjectMembershipsMock,
+ getProjectsMock,
+ getThreadMessagesMock,
+ selectProjectMock,
+} = vi.hoisted(() => ({
+ getCurrentUserProfileMock: vi.fn(),
+ getMessageThreadsMock: vi.fn(),
+ getProjectMembershipsMock: vi.fn(),
+ getProjectsMock: vi.fn(),
+ getThreadMessagesMock: vi.fn(),
+ selectProjectMock: vi.fn(),
+}))
+
+vi.mock("@/components/layout/AppShell", () => ({
+ AppShell: ({
+ children,
+ description,
+ title,
+ }: {
+ children: ReactNode
+ description: string
+ title: string
+ }) => (
+
+
{title}
+
{description}
+ {children}
+
+ ),
+}))
+
+vi.mock("@/app/messages/_components/MessagesPageContent", () => ({
+ MessagesPageContent: ({
+ availableRecipients,
+ initialRecipientUserId,
+ initialSelectedThreadId,
+ }: {
+ availableRecipients: ProjectMembership[]
+ initialRecipientUserId: number | null
+ initialSelectedThreadId: number | null
+ }) => (
+
+ Messages content {initialSelectedThreadId}
+ Recipients {availableRecipients.length}
+ Recipient {initialRecipientUserId ?? "none"}
+
+ ),
+}))
+
+vi.mock("@/lib/api", () => ({
+ getCurrentUserProfile: getCurrentUserProfileMock,
+ getMessageThreads: getMessageThreadsMock,
+ getProjectMemberships: getProjectMembershipsMock,
+ getProjects: getProjectsMock,
+ getThreadMessages: getThreadMessagesMock,
+}))
+
+vi.mock("@/lib/view-helpers", async () => {
+ const actual = await vi.importActual(
+ "@/lib/view-helpers",
+ )
+
+ return {
+ ...actual,
+ selectProject: selectProjectMock,
+ }
+})
+
+function createProject(overrides: Partial = {}): Project {
+ return {
+ id: 1,
+ name: "AI Weekly",
+ topic_description: "AI news",
+ content_retention_days: 30,
+ user_role: "admin",
+ created_at: "2026-04-01T00:00:00Z",
+ ...overrides,
+ }
+}
+
+function createThread(overrides: Partial = {}): MessageThread {
+ return {
+ id: 7,
+ counterpart: {
+ id: 8,
+ username: "maya",
+ display_name: "Maya",
+ avatar_url: null,
+ avatar_thumbnail_url: null,
+ },
+ has_unread: true,
+ last_message_preview: "Can you review this draft?",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ ...overrides,
+ }
+}
+
+function createMessage(overrides: Partial = {}): DirectMessage {
+ return {
+ id: 11,
+ thread: 7,
+ sender: 8,
+ sender_username: "maya",
+ sender_display_name: "Maya",
+ body: "Can you review this draft?",
+ created_at: "2026-05-03T10:00:00Z",
+ edited_at: null,
+ ...overrides,
+ }
+}
+
+function createCurrentUser(overrides: Partial = {}): UserProfile {
+ return {
+ id: 4,
+ username: "editor",
+ email: "editor@example.com",
+ display_name: "Editor",
+ avatar_url: null,
+ avatar_thumbnail_url: null,
+ bio: "",
+ timezone: "UTC",
+ first_name: "Edit",
+ last_name: "Or",
+ ...overrides,
+ }
+}
+
+function createMembership(overrides: Partial = {}): ProjectMembership {
+ return {
+ id: 3,
+ project: 1,
+ user: 8,
+ username: "maya",
+ email: "maya@example.com",
+ display_name: "Maya",
+ role: "member",
+ invited_by: 4,
+ joined_at: "2026-05-01T10:00:00Z",
+ ...overrides,
+ }
+}
+
+async function renderMessagesPage(searchParams: Record = {}) {
+ const { default: MessagesPage } = await import("./page")
+
+ return render(
+ await MessagesPage({
+ searchParams: Promise.resolve(searchParams),
+ }),
+ )
+}
+
+describe("MessagesPage", () => {
+ beforeEach(() => {
+ const project = createProject()
+
+ getProjectsMock.mockReset()
+ getCurrentUserProfileMock.mockReset()
+ getMessageThreadsMock.mockReset()
+ getProjectMembershipsMock.mockReset()
+ getThreadMessagesMock.mockReset()
+ selectProjectMock.mockReset()
+
+ getProjectsMock.mockResolvedValue([project])
+ getCurrentUserProfileMock.mockResolvedValue(createCurrentUser())
+ getMessageThreadsMock.mockResolvedValue([createThread()])
+ getProjectMembershipsMock.mockResolvedValue([
+ createMembership(),
+ createMembership({
+ id: 4,
+ user: 4,
+ username: "editor",
+ email: "editor@example.com",
+ display_name: "Editor",
+ role: "admin",
+ }),
+ ])
+ getThreadMessagesMock.mockResolvedValue([createMessage()])
+ selectProjectMock.mockReturnValue(project)
+ })
+
+ it("renders the messages workspace with the selected thread history", async () => {
+ await renderMessagesPage({ project: "1", thread: "7" })
+
+ expect(getProjectMembershipsMock).toHaveBeenCalledWith(1)
+ expect(getThreadMessagesMock).toHaveBeenCalledWith(7)
+ expect(screen.getByText("Messages content 7")).toBeInTheDocument()
+ expect(screen.getByText("Recipients 1")).toBeInTheDocument()
+ expect(screen.getByText("Recipient none")).toBeInTheDocument()
+ })
+
+ it("selects the matching thread when navigated from a recipient context", async () => {
+ await renderMessagesPage({ project: "1", recipient: "8" })
+
+ expect(getThreadMessagesMock).toHaveBeenCalledWith(7)
+ expect(screen.getByText("Messages content 7")).toBeInTheDocument()
+ expect(screen.getByText("Recipient 8")).toBeInTheDocument()
+ })
+
+ it("renders the empty project state when no project is available", async () => {
+ getProjectsMock.mockResolvedValue([])
+ selectProjectMock.mockReturnValue(null)
+
+ await renderMessagesPage()
+
+ expect(screen.getByText("Messages")).toBeInTheDocument()
+ expect(screen.getByText("Create a project first in Django admin.")).toBeInTheDocument()
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/app/messages/page.tsx b/frontend/src/app/messages/page.tsx
new file mode 100644
index 00000000..f7de5d9d
--- /dev/null
+++ b/frontend/src/app/messages/page.tsx
@@ -0,0 +1,80 @@
+import { MessagesPageContent } from "@/app/messages/_components/MessagesPageContent"
+import { AppShell } from "@/components/layout/AppShell"
+import { Alert, AlertDescription } from "@/components/ui/alert"
+import {
+ getCurrentUserProfile,
+ getMessageThreads,
+ getProjectMemberships,
+ getProjects,
+ getThreadMessages,
+} from "@/lib/api"
+import { selectProject } from "@/lib/view-helpers"
+
+type MessagesPageProps = {
+ /** Search params promise containing the optional `project` and `thread` selectors. */
+ searchParams: Promise>
+}
+
+/**
+ * Render the direct-message workspace for the selected project shell.
+ */
+export default async function MessagesPage({ searchParams }: MessagesPageProps) {
+ const resolvedSearchParams = await searchParams
+ const projects = await getProjects()
+ const selectedProject = selectProject(projects, resolvedSearchParams)
+
+ if (!selectedProject) {
+ return (
+
+
+ Create a project first in Django admin.
+
+
+ )
+ }
+
+ const [currentUser, projectMemberships, threads] = await Promise.all([
+ getCurrentUserProfile(),
+ getProjectMemberships(selectedProject.id),
+ getMessageThreads(),
+ ])
+ const availableRecipients = projectMemberships.filter(
+ (membership) => membership.user !== currentUser.id,
+ )
+ const requestedThreadId = Number.parseInt(String(resolvedSearchParams.thread || ""), 10)
+ const requestedRecipientId = Number.parseInt(
+ String(resolvedSearchParams.recipient || ""),
+ 10,
+ )
+ const recipientThread = threads.find(
+ (thread) => thread.counterpart?.id === requestedRecipientId,
+ )
+ const selectedThread =
+ threads.find((thread) => thread.id === requestedThreadId) ??
+ recipientThread ??
+ threads[0] ??
+ null
+ const initialMessages = selectedThread
+ ? await getThreadMessages(selectedThread.id)
+ : []
+
+ return (
+
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/app/profile/_components/AvatarDropzone/index.stories.tsx b/frontend/src/app/profile/_components/AvatarDropzone/index.stories.tsx
index 34a47af3..93dd7195 100644
--- a/frontend/src/app/profile/_components/AvatarDropzone/index.stories.tsx
+++ b/frontend/src/app/profile/_components/AvatarDropzone/index.stories.tsx
@@ -27,4 +27,4 @@ export const Uploading: Story = {
args: {
isUploading: true,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/AvatarDropzone/index.test.tsx b/frontend/src/app/profile/_components/AvatarDropzone/index.test.tsx
index 60b390c5..716a8c8e 100644
--- a/frontend/src/app/profile/_components/AvatarDropzone/index.test.tsx
+++ b/frontend/src/app/profile/_components/AvatarDropzone/index.test.tsx
@@ -18,4 +18,4 @@ describe("AvatarDropzone", () => {
expect(onUpload).toHaveBeenCalledWith(file)
})
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/profile/_components/AvatarDropzone/index.tsx b/frontend/src/app/profile/_components/AvatarDropzone/index.tsx
index 498d6d8c..c087f239 100644
--- a/frontend/src/app/profile/_components/AvatarDropzone/index.tsx
+++ b/frontend/src/app/profile/_components/AvatarDropzone/index.tsx
@@ -85,4 +85,4 @@ export function AvatarDropzone({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/AvatarPreview/index.stories.tsx b/frontend/src/app/profile/_components/AvatarPreview/index.stories.tsx
index 228e6bef..0b0b7dfe 100644
--- a/frontend/src/app/profile/_components/AvatarPreview/index.stories.tsx
+++ b/frontend/src/app/profile/_components/AvatarPreview/index.stories.tsx
@@ -32,4 +32,4 @@ export const WithAvatar: Story = {
avatar_thumbnail_url: "https://example.com/avatar-thumb.png",
}),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/AvatarPreview/index.test.tsx b/frontend/src/app/profile/_components/AvatarPreview/index.test.tsx
index b3d63449..b7c48681 100644
--- a/frontend/src/app/profile/_components/AvatarPreview/index.test.tsx
+++ b/frontend/src/app/profile/_components/AvatarPreview/index.test.tsx
@@ -37,4 +37,4 @@ describe("AvatarPreview", () => {
fireEvent.click(screen.getByRole("button", { name: "Remove avatar" }))
expect(onRemove).toHaveBeenCalled()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/profile/_components/AvatarPreview/index.tsx b/frontend/src/app/profile/_components/AvatarPreview/index.tsx
index 75f71d30..0185fbb8 100644
--- a/frontend/src/app/profile/_components/AvatarPreview/index.tsx
+++ b/frontend/src/app/profile/_components/AvatarPreview/index.tsx
@@ -61,4 +61,4 @@ export function AvatarPreview({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/ProfileForm/index.stories.tsx b/frontend/src/app/profile/_components/ProfileForm/index.stories.tsx
index 2c7fab87..78d9b2a9 100644
--- a/frontend/src/app/profile/_components/ProfileForm/index.stories.tsx
+++ b/frontend/src/app/profile/_components/ProfileForm/index.stories.tsx
@@ -29,4 +29,4 @@ export const Saving: Story = {
args: {
isSaving: true,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/ProfileForm/index.test.tsx b/frontend/src/app/profile/_components/ProfileForm/index.test.tsx
index 47b086e6..cef7cfe0 100644
--- a/frontend/src/app/profile/_components/ProfileForm/index.test.tsx
+++ b/frontend/src/app/profile/_components/ProfileForm/index.test.tsx
@@ -38,4 +38,4 @@ describe("ProfileForm", () => {
expect(screen.getByRole("button", { name: "Saving profile..." })).toBeDisabled()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/profile/_components/ProfileForm/index.tsx b/frontend/src/app/profile/_components/ProfileForm/index.tsx
index 9e5e1a08..6a1aaaa6 100644
--- a/frontend/src/app/profile/_components/ProfileForm/index.tsx
+++ b/frontend/src/app/profile/_components/ProfileForm/index.tsx
@@ -104,4 +104,4 @@ export function ProfileForm({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/ProfileSettingsPanel/index.test.tsx b/frontend/src/app/profile/_components/ProfileSettingsPanel/index.test.tsx
index 134ec389..40ac3c70 100644
--- a/frontend/src/app/profile/_components/ProfileSettingsPanel/index.test.tsx
+++ b/frontend/src/app/profile/_components/ProfileSettingsPanel/index.test.tsx
@@ -124,4 +124,4 @@ describe("ProfileSettingsPanel", () => {
expect(await screen.findByText("Profile saved.")).toBeInTheDocument()
expect(await screen.findByText("Updated Ada")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/profile/_components/ProfileSettingsPanel/index.tsx b/frontend/src/app/profile/_components/ProfileSettingsPanel/index.tsx
index bcfef222..d431b63f 100644
--- a/frontend/src/app/profile/_components/ProfileSettingsPanel/index.tsx
+++ b/frontend/src/app/profile/_components/ProfileSettingsPanel/index.tsx
@@ -109,4 +109,4 @@ export function ProfileSettingsPanel() {
profile={profileQuery.data}
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.stories.tsx b/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.stories.tsx
index ad852d8f..c99457bc 100644
--- a/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.stories.tsx
+++ b/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.stories.tsx
@@ -37,4 +37,4 @@ export const WithErrorNotice: Story = {
tone: "error",
},
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.test.tsx b/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.test.tsx
index 4399905e..0254b97e 100644
--- a/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.test.tsx
+++ b/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.test.tsx
@@ -25,4 +25,4 @@ describe("ProfileSettingsWorkspace", () => {
expect(screen.getByText("Drag, drop, or browse")).toBeInTheDocument()
expect(screen.getByText("Profile details")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.tsx b/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.tsx
index 69d99fc8..ff3040e4 100644
--- a/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.tsx
+++ b/frontend/src/app/profile/_components/ProfileSettingsWorkspace/index.tsx
@@ -63,4 +63,4 @@ export function ProfileSettingsWorkspace({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/page.stories.tsx b/frontend/src/app/profile/page.stories.tsx
index 1f1cb1f7..78b3aaae 100644
--- a/frontend/src/app/profile/page.stories.tsx
+++ b/frontend/src/app/profile/page.stories.tsx
@@ -58,4 +58,4 @@ function ProfilePagePreview({
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/profile/page.test.tsx b/frontend/src/app/profile/page.test.tsx
index d56ca410..a0a53854 100644
--- a/frontend/src/app/profile/page.test.tsx
+++ b/frontend/src/app/profile/page.test.tsx
@@ -103,4 +103,4 @@ describe("ProfilePage", () => {
"null",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.stories.tsx b/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.stories.tsx
index 70ebf5dd..37291ae2 100644
--- a/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.stories.tsx
@@ -41,4 +41,4 @@ export const Empty: Story = {
args: {
invitations: [],
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.test.tsx b/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.test.tsx
index 3c8cdf79..4a00a1db 100644
--- a/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.test.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.test.tsx
@@ -41,4 +41,4 @@ describe("InvitationsCard", () => {
"/projects/7/members?project=7",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.tsx b/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.tsx
index cbf920f6..d31c5eba 100644
--- a/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/InvitationsCard/index.tsx
@@ -102,4 +102,4 @@ export function InvitationsCard({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.stories.tsx b/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.stories.tsx
index 8ddd581a..3ee825e5 100644
--- a/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.stories.tsx
@@ -17,6 +17,7 @@ const meta = {
docs: compactDocsParameters,
},
args: {
+ currentUserId: 99,
projects: [createProject()],
selectedProject: createProject(),
memberships: [
@@ -44,4 +45,4 @@ export const WithFlashMessages: Story = {
successMessage: "Invitation revoked.",
errorMessage: "Unable to remove member.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.test.tsx b/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.test.tsx
index 390df789..2ced439b 100644
--- a/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.test.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.test.tsx
@@ -23,6 +23,7 @@ describe("MembersPageContent", () => {
it("renders flash messages and the section entry points", () => {
render(
{
"/projects/1/members/invite?project=1",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.tsx b/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.tsx
index 179d964a..ae3f1c0d 100644
--- a/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/MembersPageContent/index.tsx
@@ -11,6 +11,7 @@ import { InvitationsCard } from "../InvitationsCard"
import { MembershipsCard } from "../MembershipsCard"
type MembersPageContentProps = {
+ currentUserId: number
projects: Project[]
selectedProject: Project
memberships: ProjectMembership[]
@@ -21,6 +22,7 @@ type MembersPageContentProps = {
/** Render the members management shell for one project. */
export function MembersPageContent({
+ currentUserId,
projects,
selectedProject,
memberships,
@@ -67,6 +69,7 @@ export function MembersPageContent({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.stories.tsx b/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.stories.tsx
index 040bda3f..b5667a9a 100644
--- a/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.stories.tsx
@@ -13,6 +13,7 @@ const meta = {
docs: compactDocsParameters,
},
args: {
+ currentUserId: 99,
projectId: 1,
redirectTarget: "/projects/1/members?project=1",
memberships: [
@@ -32,4 +33,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.test.tsx b/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.test.tsx
index f8cebd1f..ee6ebbb8 100644
--- a/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.test.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.test.tsx
@@ -9,6 +9,7 @@ describe("MembershipsCard", () => {
it("renders roster details and member actions", () => {
const { container } = render(
{
expect(screen.getByText("Ada Lovelace")).toBeInTheDocument()
expect(screen.getByText("ada@example.com")).toBeInTheDocument()
+ expect(screen.getByRole("link", { name: "Message" })).toHaveAttribute(
+ "href",
+ "/messages?project=7&recipient=2",
+ )
expect(screen.getByRole("button", { name: "Update role" })).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Remove" })).toBeInTheDocument()
expect(container.querySelector('input[name="intent"][value="update-role"]')).toBeTruthy()
expect(container.querySelector('input[name="intent"][value="remove"]')).toBeTruthy()
expect(container.querySelector('input[name="role"]')).toHaveValue("admin")
})
-})
\ No newline at end of file
+
+ it("hides the message action for the current user", () => {
+ render(
+ ,
+ )
+
+ expect(screen.queryByRole("link", { name: "Message" })).not.toBeInTheDocument()
+ })
+})
diff --git a/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.tsx b/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.tsx
index 54f0cad4..a8af8195 100644
--- a/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/MembershipsCard/index.tsx
@@ -1,3 +1,5 @@
+import Link from "next/link"
+
import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"
import { Label } from "@/components/ui/label"
@@ -14,6 +16,7 @@ import { formatDate } from "@/lib/view-helpers"
import { roleOptions } from "../shared"
type MembershipsCardProps = {
+ currentUserId: number
memberships: ProjectMembership[]
projectId: number
redirectTarget: string
@@ -21,6 +24,7 @@ type MembershipsCardProps = {
/** Render the current project roster and role-management actions. */
export function MembershipsCard({
+ currentUserId,
memberships,
projectId,
redirectTarget,
@@ -78,17 +82,27 @@ export function MembershipsCard({
Update role
-
+
+ {membership.user !== currentUserId ? (
+
+ Message
+
+ ) : null}
+
+
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/_components/shared.tsx b/frontend/src/app/projects/[id]/members/_components/shared.tsx
index 027be594..2860d6af 100644
--- a/frontend/src/app/projects/[id]/members/_components/shared.tsx
+++ b/frontend/src/app/projects/[id]/members/_components/shared.tsx
@@ -2,4 +2,4 @@ export const roleOptions = [
{ value: "admin", label: "Admin" },
{ value: "member", label: "Member" },
{ value: "reader", label: "Reader" },
-] as const
\ No newline at end of file
+] as const
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.stories.tsx b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.stories.tsx
index fb72af7d..630f21d4 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.stories.tsx
@@ -22,4 +22,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.test.tsx b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.test.tsx
index 6ebb80b3..84e5795b 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.test.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.test.tsx
@@ -24,4 +24,4 @@ describe("InviteMemberFormCard", () => {
)
expect(container.querySelector('input[name="role"]')).toHaveValue("member")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.tsx b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.tsx
index 1a0034cf..4fe071ae 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.tsx
@@ -76,4 +76,4 @@ export function InviteMemberFormCard({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.stories.tsx b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.stories.tsx
index a9b86388..3e389da7 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.stories.tsx
@@ -29,4 +29,4 @@ export const WithFlashMessages: Story = {
errorMessage: "Unable to send invitation.",
successMessage: "Invitation sent.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.test.tsx b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.test.tsx
index d5ae14ce..43414684 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.test.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.test.tsx
@@ -31,4 +31,4 @@ describe("InviteMemberPageContent", () => {
expect(screen.getByText("Invitation sent.")).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Send invitation" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.tsx b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.tsx
index 558f5d83..091e66e6 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.tsx
@@ -46,4 +46,4 @@ export function InviteMemberPageContent({
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/invite/_components/shared.tsx b/frontend/src/app/projects/[id]/members/invite/_components/shared.tsx
index 027be594..2860d6af 100644
--- a/frontend/src/app/projects/[id]/members/invite/_components/shared.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/_components/shared.tsx
@@ -2,4 +2,4 @@ export const roleOptions = [
{ value: "admin", label: "Admin" },
{ value: "member", label: "Member" },
{ value: "reader", label: "Reader" },
-] as const
\ No newline at end of file
+] as const
diff --git a/frontend/src/app/projects/[id]/members/invite/page.stories.tsx b/frontend/src/app/projects/[id]/members/invite/page.stories.tsx
index b14c0bee..ec6f0562 100644
--- a/frontend/src/app/projects/[id]/members/invite/page.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/page.stories.tsx
@@ -28,4 +28,4 @@ export const WithFlashMessages: Story = {
successMessage: "Invitation sent.",
errorMessage: "Unable to send invitation.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/invite/page.test.tsx b/frontend/src/app/projects/[id]/members/invite/page.test.tsx
index edef35cf..3d41a3d7 100644
--- a/frontend/src/app/projects/[id]/members/invite/page.test.tsx
+++ b/frontend/src/app/projects/[id]/members/invite/page.test.tsx
@@ -104,4 +104,4 @@ describe("InviteMemberPage", () => {
})
expect(screen.getByTestId("invite-member-page-content")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/page.stories.tsx b/frontend/src/app/projects/[id]/members/page.stories.tsx
index 25cd02a5..d35d3f5d 100644
--- a/frontend/src/app/projects/[id]/members/page.stories.tsx
+++ b/frontend/src/app/projects/[id]/members/page.stories.tsx
@@ -16,6 +16,7 @@ const meta = {
docs: compactDocsParameters,
},
args: {
+ currentUserId: 99,
projects: [createProject()],
selectedProject: createProject(),
memberships: [
@@ -50,4 +51,4 @@ export const WithFlashMessages: Story = {
successMessage: "Member updated.",
errorMessage: "Unable to revoke invitation.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/projects/[id]/members/page.test.tsx b/frontend/src/app/projects/[id]/members/page.test.tsx
index c03b66ff..d20ad032 100644
--- a/frontend/src/app/projects/[id]/members/page.test.tsx
+++ b/frontend/src/app/projects/[id]/members/page.test.tsx
@@ -5,11 +5,13 @@ import { beforeEach, describe, expect, it, vi } from "vitest"
import type { Project } from "@/lib/types"
const {
+ getCurrentUserProfileMock,
getProjectInvitationsMock,
getProjectMembershipsMock,
getProjectsMock,
membersPageContentMock,
} = vi.hoisted(() => ({
+ getCurrentUserProfileMock: vi.fn(),
getProjectInvitationsMock: vi.fn(),
getProjectMembershipsMock: vi.fn(),
getProjectsMock: vi.fn(),
@@ -41,6 +43,7 @@ vi.mock("@/app/projects/[id]/members/_components/MembersPageContent", () => ({
}))
vi.mock("@/lib/api", () => ({
+ getCurrentUserProfile: getCurrentUserProfileMock,
getProjectInvitations: getProjectInvitationsMock,
getProjectMemberships: getProjectMembershipsMock,
getProjects: getProjectsMock,
@@ -73,11 +76,13 @@ async function renderMembersPage(
describe("MembersPage", () => {
beforeEach(() => {
+ getCurrentUserProfileMock.mockReset()
getProjectsMock.mockReset()
getProjectMembershipsMock.mockReset()
getProjectInvitationsMock.mockReset()
membersPageContentMock.mockClear()
+ getCurrentUserProfileMock.mockResolvedValue({ id: 99 })
getProjectsMock.mockResolvedValue([createProject()])
getProjectMembershipsMock.mockResolvedValue([])
getProjectInvitationsMock.mockResolvedValue([])
@@ -116,6 +121,7 @@ describe("MembersPage", () => {
const props = (membersPageContentMock.mock.calls[0] as unknown[] | undefined)?.[0]
expect(props).toEqual({
+ currentUserId: 99,
projects: [project],
selectedProject: project,
memberships,
@@ -125,4 +131,4 @@ describe("MembersPage", () => {
})
expect(screen.getByTestId("members-page-content")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/projects/[id]/members/page.tsx b/frontend/src/app/projects/[id]/members/page.tsx
index 8654ac17..b696ebcd 100644
--- a/frontend/src/app/projects/[id]/members/page.tsx
+++ b/frontend/src/app/projects/[id]/members/page.tsx
@@ -2,6 +2,7 @@ import { MembersPageContent } from "@/app/projects/[id]/members/_components/Memb
import { AppShell } from "@/components/layout/AppShell"
import { Alert, AlertDescription } from "@/components/ui/alert"
import {
+ getCurrentUserProfile,
getProjectInvitations,
getProjectMemberships,
getProjects,
@@ -56,12 +57,14 @@ export default async function MembersPage({ params, searchParams }: MembersPageP
)
}
- const [memberships, invitations] = await Promise.all([
+ const [currentUser, memberships, invitations] = await Promise.all([
+ getCurrentUserProfile(),
getProjectMemberships(selectedProject.id),
getProjectInvitations(selectedProject.id),
])
return (
{
expect(screen.getByText("Dismissal reason: already covered")).toBeInTheDocument()
expect(screen.queryByRole("button", { name: "Accept" })).not.toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/themes/_components/ThemesFilterToolbar/index.stories.tsx b/frontend/src/app/themes/_components/ThemesFilterToolbar/index.stories.tsx
index 7fa6e8af..32c191c6 100644
--- a/frontend/src/app/themes/_components/ThemesFilterToolbar/index.stories.tsx
+++ b/frontend/src/app/themes/_components/ThemesFilterToolbar/index.stories.tsx
@@ -27,4 +27,4 @@ export const Pending: Story = {
args: {
statusFilter: "pending",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/themes/_components/ThemesFilterToolbar/index.test.tsx b/frontend/src/app/themes/_components/ThemesFilterToolbar/index.test.tsx
index 6141dd8a..886d0673 100644
--- a/frontend/src/app/themes/_components/ThemesFilterToolbar/index.test.tsx
+++ b/frontend/src/app/themes/_components/ThemesFilterToolbar/index.test.tsx
@@ -17,4 +17,4 @@ describe("ThemesFilterToolbar", () => {
expect(container.querySelector('input[name="project"]')).toHaveValue("1")
expect(container.querySelector('input[name="status"]')).toHaveValue("pending")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/themes/_components/ThemesFilterToolbar/index.tsx b/frontend/src/app/themes/_components/ThemesFilterToolbar/index.tsx
index b74454ea..de2e6e37 100644
--- a/frontend/src/app/themes/_components/ThemesFilterToolbar/index.tsx
+++ b/frontend/src/app/themes/_components/ThemesFilterToolbar/index.tsx
@@ -62,4 +62,4 @@ export function ThemesFilterToolbar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/themes/_components/ThemesPageContent/index.stories.tsx b/frontend/src/app/themes/_components/ThemesPageContent/index.stories.tsx
index 8ac4556d..27b27e7e 100644
--- a/frontend/src/app/themes/_components/ThemesPageContent/index.stories.tsx
+++ b/frontend/src/app/themes/_components/ThemesPageContent/index.stories.tsx
@@ -48,4 +48,4 @@ export const WithFlashMessages: Story = {
errorMessage: "Unable to update theme.",
successMessage: "Theme updated.",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/themes/_components/ThemesPageContent/index.test.tsx b/frontend/src/app/themes/_components/ThemesPageContent/index.test.tsx
index e879cc0d..7df30c27 100644
--- a/frontend/src/app/themes/_components/ThemesPageContent/index.test.tsx
+++ b/frontend/src/app/themes/_components/ThemesPageContent/index.test.tsx
@@ -45,4 +45,4 @@ describe("ThemesPageContent", () => {
expect(screen.getByText(theme.title)).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Apply filter" })).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/themes/_components/ThemesPageContent/index.tsx b/frontend/src/app/themes/_components/ThemesPageContent/index.tsx
index 446b06a9..d85fb205 100644
--- a/frontend/src/app/themes/_components/ThemesPageContent/index.tsx
+++ b/frontend/src/app/themes/_components/ThemesPageContent/index.tsx
@@ -136,4 +136,4 @@ export function ThemesPageContent({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/themes/_components/ThemesQueueOverview/index.stories.tsx b/frontend/src/app/themes/_components/ThemesQueueOverview/index.stories.tsx
index 047040a5..2c4dacc6 100644
--- a/frontend/src/app/themes/_components/ThemesQueueOverview/index.stories.tsx
+++ b/frontend/src/app/themes/_components/ThemesQueueOverview/index.stories.tsx
@@ -23,4 +23,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/themes/_components/ThemesQueueOverview/index.test.tsx b/frontend/src/app/themes/_components/ThemesQueueOverview/index.test.tsx
index 00795861..892d6069 100644
--- a/frontend/src/app/themes/_components/ThemesQueueOverview/index.test.tsx
+++ b/frontend/src/app/themes/_components/ThemesQueueOverview/index.test.tsx
@@ -20,4 +20,4 @@ describe("ThemesQueueOverview", () => {
expect(screen.getByText("Total themes")).toBeInTheDocument()
expect(screen.getByText("6")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/themes/_components/ThemesQueueOverview/index.tsx b/frontend/src/app/themes/_components/ThemesQueueOverview/index.tsx
index 38c2a222..0875183c 100644
--- a/frontend/src/app/themes/_components/ThemesQueueOverview/index.tsx
+++ b/frontend/src/app/themes/_components/ThemesQueueOverview/index.tsx
@@ -53,4 +53,4 @@ export function ThemesQueueOverview({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/themes/_components/shared.ts b/frontend/src/app/themes/_components/shared.ts
index 2c539996..11c15956 100644
--- a/frontend/src/app/themes/_components/shared.ts
+++ b/frontend/src/app/themes/_components/shared.ts
@@ -10,4 +10,4 @@ export const themeStatusOptions = [
{ value: "accepted", label: "Accepted" },
{ value: "used", label: "Used" },
{ value: "dismissed", label: "Dismissed" },
-] as const
\ No newline at end of file
+] as const
diff --git a/frontend/src/app/trends/_components/TopicClusterCard/index.test.tsx b/frontend/src/app/trends/_components/TopicClusterCard/index.test.tsx
index 62ae74e1..53877508 100644
--- a/frontend/src/app/trends/_components/TopicClusterCard/index.test.tsx
+++ b/frontend/src/app/trends/_components/TopicClusterCard/index.test.tsx
@@ -19,4 +19,4 @@ describe("TopicClusterCard", () => {
)
expect(screen.getByText(`${cluster.member_count} members`)).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.stories.tsx b/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.stories.tsx
index 2cc1aadf..52d20336 100644
--- a/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.stories.tsx
+++ b/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.stories.tsx
@@ -33,4 +33,4 @@ export const Empty: Story = {
selectedCluster: null,
contentMap: new Map(),
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.test.tsx b/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.test.tsx
index 1a078e06..07adaf4a 100644
--- a/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.test.tsx
+++ b/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.test.tsx
@@ -36,4 +36,4 @@ describe("TrendClusterDetailPanel", () => {
`/content/${cluster.memberships[0]?.content.id}?project=1`,
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.tsx b/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.tsx
index 317162bd..f57b36cf 100644
--- a/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.tsx
+++ b/frontend/src/app/trends/_components/TrendClusterDetailPanel/index.tsx
@@ -131,4 +131,4 @@ export function TrendClusterDetailPanel({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/TrendsFilterToolbar/index.stories.tsx b/frontend/src/app/trends/_components/TrendsFilterToolbar/index.stories.tsx
index 5744a763..eb36027a 100644
--- a/frontend/src/app/trends/_components/TrendsFilterToolbar/index.stories.tsx
+++ b/frontend/src/app/trends/_components/TrendsFilterToolbar/index.stories.tsx
@@ -30,4 +30,4 @@ export const Filtered: Story = {
sourceFilter: "rss",
daysFilter: 30,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/TrendsFilterToolbar/index.test.tsx b/frontend/src/app/trends/_components/TrendsFilterToolbar/index.test.tsx
index d09faab0..c2188ced 100644
--- a/frontend/src/app/trends/_components/TrendsFilterToolbar/index.test.tsx
+++ b/frontend/src/app/trends/_components/TrendsFilterToolbar/index.test.tsx
@@ -23,4 +23,4 @@ describe("TrendsFilterToolbar", () => {
expect(container.querySelector('input[name="source"]')).toHaveValue("rss")
expect(container.querySelector('input[name="days"]')).toHaveValue("30")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/trends/_components/TrendsFilterToolbar/index.tsx b/frontend/src/app/trends/_components/TrendsFilterToolbar/index.tsx
index 0e9ebb89..60d96c0b 100644
--- a/frontend/src/app/trends/_components/TrendsFilterToolbar/index.tsx
+++ b/frontend/src/app/trends/_components/TrendsFilterToolbar/index.tsx
@@ -88,4 +88,4 @@ export function TrendsFilterToolbar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/TrendsPageContent/index.stories.tsx b/frontend/src/app/trends/_components/TrendsPageContent/index.stories.tsx
index c3e34b84..68d53ccc 100644
--- a/frontend/src/app/trends/_components/TrendsPageContent/index.stories.tsx
+++ b/frontend/src/app/trends/_components/TrendsPageContent/index.stories.tsx
@@ -53,4 +53,4 @@ export const Empty: Story = {
filteredClusterDetails: [],
selectedCluster: null,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/TrendsPageContent/index.test.tsx b/frontend/src/app/trends/_components/TrendsPageContent/index.test.tsx
index 8d1dc610..ad80e6b3 100644
--- a/frontend/src/app/trends/_components/TrendsPageContent/index.test.tsx
+++ b/frontend/src/app/trends/_components/TrendsPageContent/index.test.tsx
@@ -48,4 +48,4 @@ describe("TrendsPageContent", () => {
screen.getByRole("heading", { level: 2, name: cluster.label ?? "" }),
).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/trends/_components/TrendsPageContent/index.tsx b/frontend/src/app/trends/_components/TrendsPageContent/index.tsx
index 3ed80559..3233a0d8 100644
--- a/frontend/src/app/trends/_components/TrendsPageContent/index.tsx
+++ b/frontend/src/app/trends/_components/TrendsPageContent/index.tsx
@@ -115,4 +115,4 @@ export function TrendsPageContent({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/TrendsQueueOverview/index.stories.tsx b/frontend/src/app/trends/_components/TrendsQueueOverview/index.stories.tsx
index cf5ac069..a021e84f 100644
--- a/frontend/src/app/trends/_components/TrendsQueueOverview/index.stories.tsx
+++ b/frontend/src/app/trends/_components/TrendsQueueOverview/index.stories.tsx
@@ -23,4 +23,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/app/trends/_components/TrendsQueueOverview/index.test.tsx b/frontend/src/app/trends/_components/TrendsQueueOverview/index.test.tsx
index 20edc170..655c221e 100644
--- a/frontend/src/app/trends/_components/TrendsQueueOverview/index.test.tsx
+++ b/frontend/src/app/trends/_components/TrendsQueueOverview/index.test.tsx
@@ -18,4 +18,4 @@ describe("TrendsQueueOverview", () => {
expect(screen.getByText("Tracked content")).toBeInTheDocument()
expect(screen.getByText("18")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/trends/_components/TrendsQueueOverview/index.tsx b/frontend/src/app/trends/_components/TrendsQueueOverview/index.tsx
index d9141063..b86b7842 100644
--- a/frontend/src/app/trends/_components/TrendsQueueOverview/index.tsx
+++ b/frontend/src/app/trends/_components/TrendsQueueOverview/index.tsx
@@ -54,4 +54,4 @@ export function TrendsQueueOverview({
))}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/trends/_components/shared.test.ts b/frontend/src/app/trends/_components/shared.test.ts
index 87948675..3b66d742 100644
--- a/frontend/src/app/trends/_components/shared.test.ts
+++ b/frontend/src/app/trends/_components/shared.test.ts
@@ -10,4 +10,4 @@ describe("buildVelocityTrendPoints", () => {
"0.0,46.1 73.3,37.1 146.7,28.2 220.0,18.6",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/app/trends/_components/shared.ts b/frontend/src/app/trends/_components/shared.ts
index 6b3b6c30..dba08a54 100644
--- a/frontend/src/app/trends/_components/shared.ts
+++ b/frontend/src/app/trends/_components/shared.ts
@@ -27,4 +27,4 @@ export function buildVelocityTrendPoints(snapshots: TopicVelocitySnapshot[]) {
return `${x.toFixed(1)},${y.toFixed(1)}`
})
.join(" ")
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/elements/ThemeToggle/index.test.tsx b/frontend/src/components/elements/ThemeToggle/index.test.tsx
index e5740edd..9cdd8366 100644
--- a/frontend/src/components/elements/ThemeToggle/index.test.tsx
+++ b/frontend/src/components/elements/ThemeToggle/index.test.tsx
@@ -44,4 +44,4 @@ describe("ThemeToggle", () => {
expect(setThemeMock).toHaveBeenCalledWith("dark")
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/components/elements/UserAvatar/index.stories.tsx b/frontend/src/components/elements/UserAvatar/index.stories.tsx
index b287bf73..4b453d95 100644
--- a/frontend/src/components/elements/UserAvatar/index.stories.tsx
+++ b/frontend/src/components/elements/UserAvatar/index.stories.tsx
@@ -27,4 +27,4 @@ export const WithAvatar: Story = {
args: {
avatarUrl: "https://example.com/avatar-thumb.png",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/elements/UserAvatar/index.test.tsx b/frontend/src/components/elements/UserAvatar/index.test.tsx
index 62d65e00..31bf2a91 100644
--- a/frontend/src/components/elements/UserAvatar/index.test.tsx
+++ b/frontend/src/components/elements/UserAvatar/index.test.tsx
@@ -23,4 +23,4 @@ describe("UserAvatar", () => {
"https://example.com/avatar-thumb.png",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/components/elements/UserAvatar/index.tsx b/frontend/src/components/elements/UserAvatar/index.tsx
index 537ba96f..36fc20ed 100644
--- a/frontend/src/components/elements/UserAvatar/index.tsx
+++ b/frontend/src/components/elements/UserAvatar/index.tsx
@@ -71,4 +71,4 @@ export function UserAvatar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.stories.tsx b/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.stories.tsx
index 4d632b09..0cc3b5ef 100644
--- a/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.stories.tsx
+++ b/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.stories.tsx
@@ -12,6 +12,7 @@ const meta = {
docs: compactDocsParameters,
},
args: {
+ messagesHref: "/messages?project=1",
title: "Trend analysis",
description:
"Cluster velocity, member content, and editorial context for the topics accelerating inside this project.",
@@ -22,4 +23,4 @@ export default meta
type Story = StoryObj
-export const Default: Story = {}
\ No newline at end of file
+export const Default: Story = {}
diff --git a/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.test.tsx b/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.test.tsx
index 4d92fc58..48e3d5db 100644
--- a/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.test.tsx
+++ b/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.test.tsx
@@ -7,6 +7,10 @@ vi.mock("@/components/elements/ThemeToggle", () => ({
ThemeToggle: () => Theme toggle
,
}))
+vi.mock("@/components/layout/NotificationMenu", () => ({
+ NotificationMenu: () => Notification menu
,
+}))
+
vi.mock("@/components/layout/UserMenu", () => ({
UserMenu: () => User menu
,
}))
@@ -16,6 +20,7 @@ describe("AppShellHeader", () => {
render(
,
)
@@ -23,7 +28,12 @@ describe("AppShellHeader", () => {
expect(screen.getByRole("heading", { name: "Dashboard" })).toBeInTheDocument()
expect(screen.getByText("Minimal dashboard")).toBeInTheDocument()
expect(screen.getByText("A test description")).toBeInTheDocument()
+ expect(screen.getByRole("link", { name: "Start a new message" })).toHaveAttribute(
+ "href",
+ "/messages?project=7",
+ )
+ expect(screen.getByText("Notification menu")).toBeInTheDocument()
expect(screen.getByText("Theme toggle")).toBeInTheDocument()
expect(screen.getByText("User menu")).toBeInTheDocument()
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.tsx b/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.tsx
index f76851a2..f28a8e4a 100644
--- a/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.tsx
+++ b/frontend/src/components/layout/AppShell/_components/AppShellHeader/index.tsx
@@ -1,14 +1,32 @@
+import { MessageSquarePlus } from "lucide-react"
+import Link from "next/link"
+
import { ThemeToggle } from "@/components/elements/ThemeToggle"
+import { NotificationMenu } from "@/components/layout/NotificationMenu"
import { UserMenu } from "@/components/layout/UserMenu"
+import { buttonVariants } from "@/components/ui/button"
import { Separator } from "@/components/ui/separator"
+import { cn } from "@/lib/utils"
type AppShellHeaderProps = {
title: string
description: string
+ messagesHref: string
+}
+
+function buildNotificationsWebsocketUrl() {
+ const apiBaseUrl = process.env.NEWSLETTER_API_BASE_URL ?? "http://127.0.0.1:8080"
+ const websocketUrl = new URL("/ws/notifications/", apiBaseUrl)
+ websocketUrl.protocol = websocketUrl.protocol === "https:" ? "wss:" : "ws:"
+ return websocketUrl.toString()
}
/** Render the shared page header chrome for dashboard-style views. */
-export function AppShellHeader({ title, description }: AppShellHeaderProps) {
+export function AppShellHeader({
+ title,
+ description,
+ messagesHref,
+}: AppShellHeaderProps) {
return (
@@ -19,6 +37,15 @@ export function AppShellHeader({ title, description }: AppShellHeaderProps) {
{title}
+
+
+
New message
+
+
@@ -27,4 +54,4 @@ export function AppShellHeader({ title, description }: AppShellHeaderProps) {
{description}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.stories.tsx b/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.stories.tsx
index 2ab5cb6a..af3db573 100644
--- a/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.stories.tsx
+++ b/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.stories.tsx
@@ -2,6 +2,7 @@ import type { Meta, StoryObj } from "@storybook/nextjs-vite"
import { compactDocsParameters } from "@/lib/storybook-docs"
import { createProject } from "@/lib/storybook-fixtures"
+import type { MessageThread } from "@/lib/types"
import { AppShellSidebar } from "."
@@ -15,6 +16,27 @@ const projects = [
}),
]
+const initialMessageThreads: MessageThread[] = [
+ {
+ id: 1,
+ counterpart: null,
+ has_unread: true,
+ last_message_preview: "Draft ready",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ {
+ id: 2,
+ counterpart: null,
+ has_unread: false,
+ last_message_preview: "Looks good",
+ last_message_at: "2026-05-03T09:30:00Z",
+ last_read_at: "2026-05-03T09:31:00Z",
+ created_at: "2026-05-01T09:00:00Z",
+ },
+]
+
const meta = {
title: "Layout/AppShell/Components/AppShellSidebar",
component: AppShellSidebar,
@@ -24,6 +46,7 @@ const meta = {
layout: "fullscreen",
},
args: {
+ initialMessageThreads,
projects,
selectedProjectId: 1,
projectQuery: "?project=1",
@@ -43,4 +66,4 @@ export const MemberProjectSelected: Story = {
projectQuery: "?project=2",
canManageMembers: false,
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.test.tsx b/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.test.tsx
index 56dddd0d..53499ff6 100644
--- a/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.test.tsx
+++ b/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.test.tsx
@@ -1,10 +1,20 @@
+import { useQueryClient } from "@tanstack/react-query"
import { render, screen } from "@testing-library/react"
-import { describe, expect, it } from "vitest"
+import type { ReactNode } from "react"
+import { useEffect } from "react"
+import { beforeEach, describe, expect, it, vi } from "vitest"
+import { fetchMessageThreads, MESSAGE_THREADS_QUERY_KEY } from "@/lib/messages"
import type { Project } from "@/lib/types"
+import { QueryProvider } from "@/providers/QueryProvider"
import { AppShellSidebar } from "."
+vi.mock("@/lib/messages", () => ({
+ MESSAGE_THREADS_QUERY_KEY: ["message-threads"],
+ fetchMessageThreads: vi.fn(),
+}))
+
const projects: Project[] = [
{
id: 1,
@@ -24,21 +34,69 @@ const projects: Project[] = [
},
]
-describe("AppShellSidebar", () => {
- it("adds the selected project query string to navigation links and marks the active project", () => {
- render(
+function renderSidebar(
+ props: Partial
> = {},
+) {
+ return render(
+
,
- )
+ {...props}
+ />
+ ,
+ )
+}
+
+function CacheUpdater({ children }: { children: ReactNode }) {
+ const queryClient = useQueryClient()
+
+ useEffect(() => {
+ queryClient.setQueryData(MESSAGE_THREADS_QUERY_KEY, [
+ {
+ id: 1,
+ counterpart: null,
+ has_unread: true,
+ last_message_preview: "Draft ready",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ {
+ id: 2,
+ counterpart: null,
+ has_unread: false,
+ last_message_preview: "On it.",
+ last_message_at: "2026-05-03T10:01:00Z",
+ last_read_at: "2026-05-03T10:01:00Z",
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ ])
+ }, [queryClient])
+
+ return <>{children}>
+}
+
+describe("AppShellSidebar", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ vi.mocked(fetchMessageThreads).mockResolvedValue([])
+ })
+
+ it("adds the selected project query string to navigation links and marks the active project", () => {
+ renderSidebar()
expect(screen.getByRole("link", { name: "Dashboard" })).toHaveAttribute(
"href",
"/?project=2",
)
+ expect(screen.getByRole("link", { name: "Messages" })).toHaveAttribute(
+ "href",
+ "/messages?project=2",
+ )
expect(screen.getByRole("link", { name: "Trends" })).toHaveAttribute(
"href",
"/trends?project=2",
@@ -79,18 +137,115 @@ describe("AppShellSidebar", () => {
})
it("shows the members link when the selected project role is admin", () => {
- render(
- ,
- )
+ renderSidebar({
+ canManageMembers: true,
+ projectQuery: "?project=1",
+ selectedProjectId: 1,
+ })
expect(screen.getByRole("link", { name: "Members" })).toHaveAttribute(
"href",
"/projects/1/members?project=1",
)
})
-})
\ No newline at end of file
+
+ it("shows total and unread message badges on the messages link", () => {
+ vi.mocked(fetchMessageThreads).mockResolvedValue([
+ {
+ id: 1,
+ counterpart: null,
+ has_unread: true,
+ last_message_preview: "Can you review this draft?",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ {
+ id: 2,
+ counterpart: null,
+ has_unread: true,
+ last_message_preview: "Second thread",
+ last_message_at: "2026-05-03T10:03:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ {
+ id: 3,
+ counterpart: null,
+ has_unread: false,
+ last_message_preview: "Third thread",
+ last_message_at: "2026-05-03T10:02:00Z",
+ last_read_at: "2026-05-03T10:02:00Z",
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ ])
+
+ renderSidebar({
+ initialMessageThreads: [
+ {
+ id: 1,
+ counterpart: null,
+ has_unread: true,
+ last_message_preview: "Can you review this draft?",
+ last_message_at: "2026-05-03T10:00:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ {
+ id: 2,
+ counterpart: null,
+ has_unread: true,
+ last_message_preview: "Second thread",
+ last_message_at: "2026-05-03T10:03:00Z",
+ last_read_at: null,
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ {
+ id: 3,
+ counterpart: null,
+ has_unread: false,
+ last_message_preview: "Third thread",
+ last_message_at: "2026-05-03T10:02:00Z",
+ last_read_at: "2026-05-03T10:02:00Z",
+ created_at: "2026-05-01T10:00:00Z",
+ },
+ ],
+ })
+
+ expect(screen.getByRole("link", { name: /Messages/i })).toHaveAttribute(
+ "href",
+ "/messages?project=2",
+ )
+ expect(
+ screen.getByRole("link", { name: "Open latest unread message thread" }),
+ ).toHaveAttribute("href", "/messages?project=2&thread=2")
+ expect(screen.getAllByText("3")).toHaveLength(1)
+ expect(screen.getAllByText("2")).toHaveLength(1)
+ })
+
+ it("updates the message badges when the shared query cache changes", async () => {
+ vi.mocked(fetchMessageThreads).mockImplementation(
+ () => new Promise(() => {}),
+ )
+
+ render(
+
+
+
+
+ ,
+ )
+
+ expect(await screen.findByText("2")).toBeInTheDocument()
+ expect(screen.getAllByText("1")).toHaveLength(1)
+ expect(
+ screen.getByRole("link", { name: "Open latest unread message thread" }),
+ ).toHaveAttribute("href", "/messages?project=2&thread=1")
+ })
+})
diff --git a/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.tsx b/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.tsx
index c0c42900..814297af 100644
--- a/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.tsx
+++ b/frontend/src/components/layout/AppShell/_components/AppShellSidebar/index.tsx
@@ -1,41 +1,122 @@
+"use client"
+
+import { useQuery } from "@tanstack/react-query"
import Link from "next/link"
+import { Badge } from "@/components/ui/badge"
import { Card, CardContent, CardDescription } from "@/components/ui/card"
-import type { Project } from "@/lib/types"
+import { fetchMessageThreads, MESSAGE_THREADS_QUERY_KEY } from "@/lib/messages"
+import type { MessageThread, Project } from "@/lib/types"
import { cn } from "@/lib/utils"
type AppShellSidebarProps = {
+ initialMessageThreads: MessageThread[]
projects: Project[]
selectedProjectId: number | null
projectQuery: string
canManageMembers: boolean
}
+type BaseNavigationItem = {
+ href: string
+ label: string
+}
+
+type DefaultNavigationItem = BaseNavigationItem & {
+ kind: "default"
+}
+
+type MessagesNavigationItem = BaseNavigationItem & {
+ kind: "messages"
+ messageThreadCount: number
+ unreadMessageThreadCount: number
+}
+
+type NavigationItem = DefaultNavigationItem | MessagesNavigationItem
+
+function buildMessagesHref(projectQuery: string, threadId?: number) {
+ const searchParams = new URLSearchParams(projectQuery.replace(/^\?/, ""))
+ if (threadId !== undefined) {
+ searchParams.set("thread", String(threadId))
+ }
+
+ const query = searchParams.toString()
+ return `/messages${query ? `?${query}` : ""}`
+}
+
+function latestUnreadThreadId(messageThreads: MessageThread[]) {
+ return messageThreads
+ .filter((thread) => thread.has_unread)
+ .sort((left, right) => {
+ const leftTimestamp = new Date(
+ left.last_message_at ?? left.created_at,
+ ).getTime()
+ const rightTimestamp = new Date(
+ right.last_message_at ?? right.created_at,
+ ).getTime()
+
+ return rightTimestamp - leftTimestamp
+ })[0]?.id
+}
+
/** Render the shared dashboard navigation and project switcher. */
export function AppShellSidebar({
+ initialMessageThreads,
projects,
selectedProjectId,
projectQuery,
canManageMembers,
}: AppShellSidebarProps) {
- const navigationItems = [
- { href: `/${projectQuery}`, label: "Dashboard" },
- { href: `/trends${projectQuery}`, label: "Trends" },
- { href: `/themes${projectQuery}`, label: "Themes" },
- { href: `/ideas${projectQuery}`, label: "Ideas" },
- { href: `/drafts${projectQuery}`, label: "Drafts" },
- { href: `/entities${projectQuery}`, label: "Entities" },
- { href: `/admin/health${projectQuery}`, label: "Ingestion health" },
- { href: `/admin/sources${projectQuery}`, label: "Source configs" },
+ const messageThreadsQuery = useQuery({
+ queryKey: MESSAGE_THREADS_QUERY_KEY,
+ queryFn: fetchMessageThreads,
+ initialData: initialMessageThreads,
+ })
+ const messageThreads = messageThreadsQuery.data ?? []
+ const messageThreadCount = messageThreads.length
+ const unreadMessageThreadCount = messageThreads.filter(
+ (thread) => thread.has_unread,
+ ).length
+ const messagesHref = buildMessagesHref(projectQuery)
+ const latestUnreadHref = buildMessagesHref(
+ projectQuery,
+ latestUnreadThreadId(messageThreads),
+ )
+
+ const navigationItems: NavigationItem[] = [
+ { href: `/${projectQuery}`, kind: "default", label: "Dashboard" },
+ {
+ href: messagesHref,
+ kind: "messages",
+ label: "Messages",
+ messageThreadCount,
+ unreadMessageThreadCount,
+ },
+ { href: `/trends${projectQuery}`, kind: "default", label: "Trends" },
+ { href: `/themes${projectQuery}`, kind: "default", label: "Themes" },
+ { href: `/ideas${projectQuery}`, kind: "default", label: "Ideas" },
+ { href: `/drafts${projectQuery}`, kind: "default", label: "Drafts" },
+ { href: `/entities${projectQuery}`, kind: "default", label: "Entities" },
+ {
+ href: `/admin/health${projectQuery}`,
+ kind: "default",
+ label: "Ingestion health",
+ },
+ {
+ href: `/admin/sources${projectQuery}`,
+ kind: "default",
+ label: "Source configs",
+ },
...(canManageMembers && selectedProjectId
? [
{
href: `/projects/${selectedProjectId}/members${projectQuery}`,
+ kind: "default" as const,
label: "Members",
},
]
: []),
- { href: "/admin/projects/new", label: "New project" },
+ { href: "/admin/projects/new", kind: "default", label: "New project" },
]
return (
@@ -58,13 +139,45 @@ export function AppShellSidebar({
@@ -102,4 +215,4 @@ export function AppShellSidebar({
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/AppShell/index.test.tsx b/frontend/src/components/layout/AppShell/index.test.tsx
index 76dd4ccb..2418c070 100644
--- a/frontend/src/components/layout/AppShell/index.test.tsx
+++ b/frontend/src/components/layout/AppShell/index.test.tsx
@@ -1,12 +1,28 @@
import { render, screen } from "@testing-library/react"
-import { describe, expect, it } from "vitest"
+import { beforeEach, describe, expect, it, vi } from "vitest"
import { AppShell } from "@/components/layout/AppShell"
import type { Project } from "@/lib/types"
+const { getMessageThreadsMock } = vi.hoisted(() => ({
+ getMessageThreadsMock: vi.fn(),
+}))
+
+vi.mock("@/lib/api", () => ({
+ getMessageThreads: getMessageThreadsMock,
+}))
+
vi.mock("@/components/layout/AppShell/_components/AppShellHeader", () => ({
- AppShellHeader: ({ description, title }: { description: string; title: string }) => (
-
+ AppShellHeader: ({
+ description,
+ messagesHref,
+ title,
+ }: {
+ description: string
+ messagesHref: string
+ title: string
+ }) => (
+
{title}
{description}
@@ -16,21 +32,25 @@ vi.mock("@/components/layout/AppShell/_components/AppShellHeader", () => ({
vi.mock("@/components/layout/AppShell/_components/AppShellSidebar", () => ({
AppShellSidebar: ({
canManageMembers,
+ initialMessageThreads,
projectQuery,
projects,
selectedProjectId,
}: {
canManageMembers: boolean
+ initialMessageThreads: Array<{ id: number; has_unread: boolean }>
projectQuery: string
projects: Project[]
selectedProjectId: number | null
}) => (
thread.has_unread).length}
/>
),
}))
@@ -55,16 +75,24 @@ const projects: Project[] = [
]
describe("AppShell", () => {
- it("renders the extracted shell regions and child content", () => {
+ beforeEach(() => {
+ getMessageThreadsMock.mockReset()
+ getMessageThreadsMock.mockResolvedValue([
+ { id: 1, has_unread: true },
+ { id: 2, has_unread: false },
+ { id: 3, has_unread: true },
+ ])
+ })
+
+ it("renders the extracted shell regions, child content, and message summary", async () => {
render(
-
- Child content
- ,
+ await AppShell({
+ title: "Dashboard",
+ description: "A test description",
+ projects,
+ selectedProjectId: 1,
+ children:
Child content
,
+ }),
)
expect(screen.getByTestId("app-shell-sidebar")).toHaveAttribute(
@@ -75,21 +103,34 @@ describe("AppShell", () => {
"data-can-manage-members",
"true",
)
+ expect(screen.getByTestId("app-shell-sidebar")).toHaveAttribute(
+ "data-message-thread-count",
+ "3",
+ )
+ expect(screen.getByTestId("app-shell-sidebar")).toHaveAttribute(
+ "data-unread-message-thread-count",
+ "2",
+ )
expect(screen.getByTestId("app-shell-header")).toHaveTextContent("Dashboard")
expect(screen.getByTestId("app-shell-header")).toHaveTextContent("A test description")
+ expect(screen.getByTestId("app-shell-header")).toHaveAttribute(
+ "data-messages-href",
+ "/messages?project=1",
+ )
expect(screen.getByText("Child content")).toBeInTheDocument()
})
- it("passes member access and empty project query state into the sidebar", () => {
+ it("falls back to an empty message summary when the fetch fails", async () => {
+ getMessageThreadsMock.mockRejectedValue(new Error("boom"))
+
render(
-
- Child content
- ,
+ await AppShell({
+ title: "Dashboard",
+ description: "A test description",
+ projects,
+ selectedProjectId: 2,
+ children:
Child content
,
+ }),
)
expect(screen.getByTestId("app-shell-sidebar")).toHaveAttribute(
@@ -100,5 +141,17 @@ describe("AppShell", () => {
"data-can-manage-members",
"false",
)
+ expect(screen.getByTestId("app-shell-sidebar")).toHaveAttribute(
+ "data-message-thread-count",
+ "0",
+ )
+ expect(screen.getByTestId("app-shell-sidebar")).toHaveAttribute(
+ "data-unread-message-thread-count",
+ "0",
+ )
+ expect(screen.getByTestId("app-shell-header")).toHaveAttribute(
+ "data-messages-href",
+ "/messages?project=2",
+ )
})
})
diff --git a/frontend/src/components/layout/AppShell/index.tsx b/frontend/src/components/layout/AppShell/index.tsx
index 7aa9268b..c05ab670 100644
--- a/frontend/src/components/layout/AppShell/index.tsx
+++ b/frontend/src/components/layout/AppShell/index.tsx
@@ -1,6 +1,7 @@
import type { ReactNode } from "react"
-import type { Project } from "@/lib/types"
+import { getMessageThreads } from "@/lib/api"
+import type { MessageThread, Project } from "@/lib/types"
import { AppShellHeader } from "./_components/AppShellHeader"
import { AppShellSidebar } from "./_components/AppShellSidebar"
@@ -13,7 +14,7 @@ type AppShellProps = {
children: ReactNode
}
-export function AppShell({
+export async function AppShell({
title,
description,
projects,
@@ -24,18 +25,26 @@ export function AppShell({
const selectedProject =
projects.find((project) => project.id === selectedProjectId) ?? null
const canManageMembers = selectedProject?.user_role === "admin"
+ const initialMessageThreads: MessageThread[] = await getMessageThreads().catch(
+ () => [],
+ )
return (
diff --git a/frontend/src/components/layout/NotificationMenu/index.test.tsx b/frontend/src/components/layout/NotificationMenu/index.test.tsx
new file mode 100644
index 00000000..aa9dd60c
--- /dev/null
+++ b/frontend/src/components/layout/NotificationMenu/index.test.tsx
@@ -0,0 +1,165 @@
+import { act, render, screen, waitFor } from "@testing-library/react"
+import userEvent from "@testing-library/user-event"
+import type { ButtonHTMLAttributes, ReactNode } from "react"
+import { beforeEach, describe, expect, it, vi } from "vitest"
+
+import { NotificationMenu } from "@/components/layout/NotificationMenu"
+import {
+ fetchNotifications,
+ markAllNotificationsRead,
+ markNotificationRead,
+} from "@/lib/notifications"
+import { QueryProvider } from "@/providers/QueryProvider"
+
+const pushMock = vi.fn()
+const sockets: FakeWebSocket[] = []
+
+class FakeWebSocket {
+ onmessage: ((event: { data: string }) => void) | null = null
+ close = vi.fn()
+
+ constructor(public readonly url: string) {
+ sockets.push(this)
+ }
+
+ emit(payload: unknown) {
+ this.onmessage?.({ data: JSON.stringify(payload) })
+ }
+}
+
+vi.mock("next/navigation", () => ({
+ useRouter: () => ({
+ push: pushMock,
+ }),
+}))
+
+vi.mock("@/components/ui/dropdown-menu", () => ({
+ DropdownMenu: ({ children }: { children: ReactNode }) =>
{children}
,
+ DropdownMenuTrigger: ({ children, ...props }: ButtonHTMLAttributes
) => (
+
+ ),
+ DropdownMenuContent: ({ children }: { children: ReactNode }) => {children}
,
+ DropdownMenuItem: ({
+ children,
+ onClick,
+ }: {
+ children: ReactNode
+ onClick?: () => void
+ }) => (
+
+ ),
+}))
+
+vi.mock("@/lib/notifications", () => ({
+ NOTIFICATIONS_QUERY_KEY: ["notifications"],
+ fetchNotifications: vi.fn(),
+ markAllNotificationsRead: vi.fn(),
+ markNotificationRead: vi.fn(),
+}))
+
+function renderNotificationMenu(websocketUrl = "") {
+ return render(
+
+
+ ,
+ )
+}
+
+describe("NotificationMenu", () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ sockets.length = 0
+ vi.stubGlobal("WebSocket", FakeWebSocket)
+ vi.mocked(fetchNotifications).mockResolvedValue([
+ {
+ id: 1,
+ project: 4,
+ level: "info",
+ body: "Draft ready",
+ link_path: "/drafts",
+ metadata: {},
+ created_at: "2026-05-03T10:00:00Z",
+ read_at: null,
+ is_read: false,
+ },
+ {
+ id: 2,
+ project: 4,
+ level: "success",
+ body: "Source quality refreshed",
+ link_path: "",
+ metadata: {},
+ created_at: "2026-05-03T09:00:00Z",
+ read_at: "2026-05-03T09:05:00Z",
+ is_read: true,
+ },
+ ])
+ vi.mocked(markAllNotificationsRead).mockResolvedValue({ updated_count: 1 })
+ vi.mocked(markNotificationRead).mockImplementation(async (notificationId) => ({
+ id: notificationId,
+ project: 4,
+ level: "info",
+ body: "Draft ready",
+ link_path: "/drafts",
+ metadata: {},
+ created_at: "2026-05-03T10:00:00Z",
+ read_at: "2026-05-03T10:02:00Z",
+ is_read: true,
+ }))
+ })
+
+ it("renders unread count and marks all notifications as read", async () => {
+ const user = userEvent.setup()
+
+ renderNotificationMenu()
+
+ await waitFor(() => {
+ expect(screen.getByText("1")).toBeInTheDocument()
+ })
+
+ expect(screen.getByText("Notification inbox")).toBeInTheDocument()
+ expect(screen.getByText("Draft ready")).toBeInTheDocument()
+
+ await user.click(screen.getByRole("button", { name: "Mark all read" }))
+
+ await waitFor(() => {
+ expect(markAllNotificationsRead).toHaveBeenCalled()
+ })
+ expect(screen.queryByText("1")).not.toBeInTheDocument()
+ })
+
+ it("applies incoming websocket notifications to the query cache", async () => {
+ renderNotificationMenu("ws://api.example.com/ws/notifications/")
+
+ await waitFor(() => {
+ expect(sockets).toHaveLength(1)
+ })
+
+ act(() => {
+ sockets[0].emit({
+ type: "notification.created",
+ notification: {
+ id: 9,
+ project: null,
+ level: "error",
+ body: "Ingestion failed.",
+ link_path: "/sources",
+ metadata: { source_config_id: 8 },
+ created_at: "2026-05-03T11:00:00Z",
+ read_at: null,
+ is_read: false,
+ },
+ })
+ })
+
+ await waitFor(() => {
+ expect(screen.getByText("2")).toBeInTheDocument()
+ })
+
+ expect(screen.getByText("Ingestion failed.")).toBeInTheDocument()
+ })
+})
\ No newline at end of file
diff --git a/frontend/src/components/layout/NotificationMenu/index.tsx b/frontend/src/components/layout/NotificationMenu/index.tsx
new file mode 100644
index 00000000..9899e6d6
--- /dev/null
+++ b/frontend/src/components/layout/NotificationMenu/index.tsx
@@ -0,0 +1,199 @@
+"use client"
+
+import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
+import { Bell } from "lucide-react"
+import { useRouter } from "next/navigation"
+import { useEffect } from "react"
+
+import { Badge } from "@/components/ui/badge"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+import {
+ fetchNotifications,
+ markAllNotificationsRead,
+ markNotificationRead,
+ NOTIFICATIONS_QUERY_KEY,
+} from "@/lib/notifications"
+import type { Notification } from "@/lib/types"
+
+type NotificationMenuProps = {
+ /** Absolute websocket URL for the backend notifications consumer. */
+ websocketUrl: string
+}
+
+function upsertNotification(
+ currentNotifications: Notification[],
+ incomingNotification: Notification,
+) {
+ const remainingNotifications = currentNotifications.filter(
+ (notification) => notification.id !== incomingNotification.id,
+ )
+ return [incomingNotification, ...remainingNotifications]
+}
+
+/** Render the shared notification bell and persistent inbox dropdown. */
+export function NotificationMenu({ websocketUrl }: NotificationMenuProps) {
+ const queryClient = useQueryClient()
+ const router = useRouter()
+ const notificationsQuery = useQuery({
+ queryKey: NOTIFICATIONS_QUERY_KEY,
+ queryFn: () => fetchNotifications(),
+ })
+
+ const readMutation = useMutation({
+ mutationFn: markNotificationRead,
+ onSuccess: (notification) => {
+ queryClient.setQueryData(
+ NOTIFICATIONS_QUERY_KEY,
+ (currentNotifications = []) =>
+ currentNotifications.map((currentNotification) =>
+ currentNotification.id === notification.id
+ ? notification
+ : currentNotification,
+ ),
+ )
+ },
+ })
+
+ const readAllMutation = useMutation({
+ mutationFn: markAllNotificationsRead,
+ onSuccess: () => {
+ const readAt = new Date().toISOString()
+ queryClient.setQueryData(
+ NOTIFICATIONS_QUERY_KEY,
+ (currentNotifications = []) =>
+ currentNotifications.map((notification) => ({
+ ...notification,
+ is_read: true,
+ read_at: notification.read_at ?? readAt,
+ })),
+ )
+ },
+ })
+
+ useEffect(() => {
+ if (!websocketUrl) {
+ return undefined
+ }
+
+ const socket = new WebSocket(websocketUrl)
+ socket.onmessage = (event) => {
+ try {
+ const payload = JSON.parse(event.data) as {
+ type?: string
+ notification?: Notification
+ }
+ if (
+ payload.type !== "notification.created" ||
+ payload.notification === undefined
+ ) {
+ return
+ }
+ queryClient.setQueryData(
+ NOTIFICATIONS_QUERY_KEY,
+ (currentNotifications = []) =>
+ upsertNotification(currentNotifications, payload.notification as Notification),
+ )
+ } catch {
+ // Ignore malformed websocket frames and keep the inbox usable.
+ }
+ }
+
+ return () => {
+ socket.close()
+ }
+ }, [queryClient, websocketUrl])
+
+ const notifications = notificationsQuery.data ?? []
+ const unreadCount = notifications.filter(
+ (notification) => !notification.is_read,
+ ).length
+
+ async function handleNotificationSelect(notification: Notification) {
+ if (!notification.is_read) {
+ await readMutation.mutateAsync(notification.id)
+ }
+
+ if (notification.link_path) {
+ router.push(notification.link_path)
+ }
+ }
+
+ return (
+
+
+
+ {unreadCount > 0 ? (
+
+ {unreadCount > 99 ? "99+" : unreadCount}
+
+ ) : null}
+
+
+
+
+
+
Notification inbox
+
+ {unreadCount > 0 ? `${unreadCount} unread` : "All caught up"}
+
+
+
+
+
+
+ {notificationsQuery.isError ? (
+
+ Unable to load notifications.
+
+ ) : notifications.length === 0 ? (
+
+ No notifications yet.
+
+ ) : (
+ notifications.slice(0, 8).map((notification) => (
+
{
+ void handleNotificationSelect(notification)
+ }}
+ >
+
+
+
{notification.body}
+
+ {notification.created_at.replace("T", " ").replace("Z", " UTC")}
+
+
+
+ ))
+ )}
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.stories.tsx b/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.stories.tsx
index 45059846..df80c24b 100644
--- a/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.stories.tsx
+++ b/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.stories.tsx
@@ -50,4 +50,4 @@ export const GuestFallback: Story = {
const canvas = within(canvasElement)
await userEvent.click(canvas.getByRole("button", { name: "Open user menu" }))
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.test.tsx b/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.test.tsx
index 900ae7eb..68b8e332 100644
--- a/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.test.tsx
+++ b/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.test.tsx
@@ -71,4 +71,4 @@ describe("UserMenuContent", () => {
expect(signOutMock).toHaveBeenCalledWith({ callbackUrl: "/login" })
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.tsx b/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.tsx
index 7ef3f0d9..2a648017 100644
--- a/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.tsx
+++ b/frontend/src/components/layout/UserMenu/_components/UserMenuContent/index.tsx
@@ -77,4 +77,4 @@ export function UserMenuContent({
)}
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.stories.tsx b/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.stories.tsx
index 8312be4f..8eb2f278 100644
--- a/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.stories.tsx
+++ b/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.stories.tsx
@@ -35,4 +35,4 @@ export const WithAvatar: Story = {
args: {
avatarUrl: "https://images.example.com/avatar-thumb.jpg",
},
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.test.tsx b/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.test.tsx
index 0eb14560..15cd0e69 100644
--- a/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.test.tsx
+++ b/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.test.tsx
@@ -31,4 +31,4 @@ describe("UserMenuTrigger", () => {
"https://example.com/avatar-thumb.png",
)
})
-})
\ No newline at end of file
+})
diff --git a/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.tsx b/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.tsx
index 0e680c42..e07bfd12 100644
--- a/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.tsx
+++ b/frontend/src/components/layout/UserMenu/_components/UserMenuTrigger/index.tsx
@@ -23,4 +23,4 @@ export function UserMenuTrigger({
/>
)
-}
\ No newline at end of file
+}
diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts
index 7368a35b..8042aafe 100644
--- a/frontend/src/lib/api.ts
+++ b/frontend/src/lib/api.ts
@@ -8,6 +8,7 @@ import type {
BlueskyCredentials,
Content,
ContentSkillName,
+ DirectMessage,
Entity,
EntityAuthoritySnapshot,
EntityCandidate,
@@ -17,6 +18,8 @@ import type {
LinkedInOAuthAuthorization,
MastodonCredentials,
MembershipInvitation,
+ MessageThread,
+ MessageThreadReadResponse,
NewsletterDraft,
NewsletterDraftGenerationResponse,
NewsletterDraftItem,
@@ -24,6 +27,8 @@ import type {
NewsletterDraftSection,
NewsletterDraftSectionRegenerationResponse,
NewsletterIntake,
+ Notification,
+ NotificationReadAllResponse,
OriginalContentIdea,
OriginalContentIdeaGenerationResponse,
Project,
@@ -480,6 +485,119 @@ export async function deleteCurrentUserAvatar(): Promise {
})
}
+/**
+ * Fetch the current user's persistent notifications.
+ *
+ * @param options - Optional unread-only filter.
+ * @returns Notifications ordered newest first by the backend.
+ */
+export async function getNotifications(options: {
+ unread?: boolean
+} = {}): Promise {
+ const searchParams = new URLSearchParams()
+ if (options.unread) {
+ searchParams.set("unread", "true")
+ }
+ const query = searchParams.toString()
+
+ return apiFetch(
+ `/api/v1/notifications/${query ? `?${query}` : ""}`,
+ )
+}
+
+/**
+ * Mark one notification as read for the current user.
+ *
+ * @param notificationId - Numeric notification identifier.
+ * @returns The updated notification payload.
+ */
+export async function readNotification(
+ notificationId: number,
+): Promise {
+ return apiFetch(`/api/v1/notifications/${notificationId}/read/`, {
+ method: "POST",
+ })
+}
+
+/**
+ * Mark every unread notification as read for the current user.
+ *
+ * @returns The count of updated notification rows.
+ */
+export async function readAllNotifications(): Promise {
+ return apiFetch("/api/v1/notifications/read-all/", {
+ method: "POST",
+ })
+}
+
+/**
+ * Fetch the current user's direct-message threads.
+ *
+ * @returns Thread summaries ordered newest first.
+ */
+export async function getMessageThreads(): Promise {
+ return apiFetch("/api/v1/messaging/threads/")
+}
+
+/**
+ * Open or find a direct-message thread with another visible user.
+ *
+ * @param payload - Recipient id and optional opening message.
+ * @returns The created or existing thread summary.
+ */
+export async function createMessageThread(payload: {
+ recipient_user_id: number
+ opening_message?: string
+}): Promise {
+ return apiFetch("/api/v1/messaging/threads/", {
+ method: "POST",
+ body: JSON.stringify(payload),
+ })
+}
+
+/**
+ * Fetch all messages for one direct-message thread.
+ *
+ * @param threadId - Numeric thread identifier.
+ * @returns Messages ordered oldest to newest.
+ */
+export async function getThreadMessages(
+ threadId: number,
+): Promise {
+ return apiFetch(`/api/v1/messaging/threads/${threadId}/messages/`)
+}
+
+/**
+ * Send a new message into one direct-message thread.
+ *
+ * @param threadId - Numeric thread identifier.
+ * @param payload - Outbound message body.
+ * @returns The created message payload.
+ */
+export async function createThreadMessage(
+ threadId: number,
+ payload: { body: string },
+): Promise {
+ return apiFetch(`/api/v1/messaging/threads/${threadId}/messages/`, {
+ method: "POST",
+ body: JSON.stringify(payload),
+ })
+}
+
+/**
+ * Advance the current user's read cursor for one thread.
+ *
+ * @param threadId - Numeric thread identifier.
+ * @returns The updated read timestamp.
+ */
+export async function markThreadRead(
+ threadId: number,
+): Promise {
+ return apiFetch(`/api/v1/messaging/threads/${threadId}/read/`, {
+ method: "POST",
+ })
+}
+
/**
* Partially update one project record.
*
diff --git a/frontend/src/lib/messages.ts b/frontend/src/lib/messages.ts
new file mode 100644
index 00000000..1c0c3043
--- /dev/null
+++ b/frontend/src/lib/messages.ts
@@ -0,0 +1,134 @@
+import type {
+ DirectMessage,
+ MessageThread,
+ MessageThreadReadResponse,
+} from "@/lib/types"
+
+export const MESSAGE_THREADS_QUERY_KEY = ["message-threads"] as const
+
+export function threadMessagesQueryKey(threadId: number) {
+ return ["thread-messages", threadId] as const
+}
+
+type MessageThreadCreateRequest = {
+ recipient_user_id: number
+ opening_message?: string
+}
+
+function extractErrorMessage(payload: unknown, fallback: string) {
+ if (!payload || typeof payload !== "object") {
+ return fallback
+ }
+
+ if ("error" in payload && typeof payload.error === "string") {
+ return payload.error
+ }
+
+ if ("detail" in payload && typeof payload.detail === "string") {
+ return payload.detail
+ }
+
+ return fallback
+}
+
+async function parseMessagesResponse(
+ response: Response,
+ fallbackMessage: string,
+): Promise {
+ const text = await response.text()
+ const contentType = response.headers.get("content-type") ?? ""
+ const payload = text && contentType.includes("json") ? JSON.parse(text) : null
+
+ if (!response.ok) {
+ throw new Error(extractErrorMessage(payload, fallbackMessage))
+ }
+
+ return (payload ?? undefined) as T
+}
+
+/**
+ * Fetch the current user's direct-message threads through the internal Next route.
+ */
+export async function fetchMessageThreads(): Promise {
+ const response = await fetch("/api/messages/threads", {
+ cache: "no-store",
+ })
+
+ return parseMessagesResponse(
+ response,
+ "Unable to load message threads.",
+ )
+}
+
+/**
+ * Open or find a thread through the internal Next route.
+ */
+export async function openMessageThread(
+ payload: MessageThreadCreateRequest,
+): Promise {
+ const response = await fetch("/api/messages/threads", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(payload),
+ })
+
+ return parseMessagesResponse(
+ response,
+ "Unable to start a conversation.",
+ )
+}
+
+/**
+ * Fetch one thread's message history through the internal Next route.
+ */
+export async function fetchThreadMessages(
+ threadId: number,
+): Promise {
+ const response = await fetch(`/api/messages/threads/${threadId}/messages`, {
+ cache: "no-store",
+ })
+
+ return parseMessagesResponse(
+ response,
+ "Unable to load message history.",
+ )
+}
+
+/**
+ * Send one message through the internal Next route.
+ */
+export async function sendThreadMessage(
+ threadId: number,
+ body: string,
+): Promise {
+ const response = await fetch(`/api/messages/threads/${threadId}/messages`, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({ body }),
+ })
+
+ return parseMessagesResponse(
+ response,
+ "Unable to send message.",
+ )
+}
+
+/**
+ * Mark one thread as read through the internal Next route.
+ */
+export async function markMessageThreadRead(
+ threadId: number,
+): Promise {
+ const response = await fetch(`/api/messages/threads/${threadId}/read`, {
+ method: "POST",
+ })
+
+ return parseMessagesResponse(
+ response,
+ "Unable to mark thread as read.",
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/lib/notifications.ts b/frontend/src/lib/notifications.ts
new file mode 100644
index 00000000..d6d32c84
--- /dev/null
+++ b/frontend/src/lib/notifications.ts
@@ -0,0 +1,121 @@
+import type {
+ Notification,
+ NotificationReadAllResponse,
+} from "@/lib/types"
+
+export const NOTIFICATIONS_QUERY_KEY = ["notifications"] as const
+
+type NotificationMutationRequest =
+ | {
+ action: "read"
+ notification_id: number
+ }
+ | {
+ action: "read_all"
+ }
+
+function extractErrorMessage(payload: unknown, fallback: string) {
+ if (!payload || typeof payload !== "object") {
+ return fallback
+ }
+
+ if ("error" in payload && typeof payload.error === "string") {
+ return payload.error
+ }
+
+ if ("detail" in payload && typeof payload.detail === "string") {
+ return payload.detail
+ }
+
+ return fallback
+}
+
+async function parseNotificationsResponse(
+ response: Response,
+ fallbackMessage: string,
+): Promise {
+ const text = await response.text()
+ const contentType = response.headers.get("content-type") ?? ""
+ const payload = text && contentType.includes("json") ? JSON.parse(text) : null
+
+ if (!response.ok) {
+ throw new Error(extractErrorMessage(payload, fallbackMessage))
+ }
+
+ return (payload ?? undefined) as T
+}
+
+/**
+ * Fetch the current user's notifications through the internal Next route.
+ *
+ * @param options - Optional unread-only filter.
+ * @returns The user's notifications ordered newest first.
+ */
+export async function fetchNotifications(options: {
+ unread?: boolean
+} = {}): Promise {
+ const searchParams = new URLSearchParams()
+ if (options.unread) {
+ searchParams.set("unread", "true")
+ }
+
+ const response = await fetch(
+ `/api/notifications${searchParams.size ? `?${searchParams.toString()}` : ""}`,
+ {
+ cache: "no-store",
+ },
+ )
+
+ return parseNotificationsResponse(
+ response,
+ "Unable to load notifications.",
+ )
+}
+
+/**
+ * Mark one notification as read through the internal Next route.
+ *
+ * @param notificationId - Numeric notification identifier.
+ * @returns The updated notification payload.
+ */
+export async function markNotificationRead(
+ notificationId: number,
+): Promise {
+ const response = await fetch("/api/notifications", {
+ method: "PATCH",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ action: "read",
+ notification_id: notificationId,
+ } satisfies NotificationMutationRequest),
+ })
+
+ return parseNotificationsResponse(
+ response,
+ "Unable to mark notification as read.",
+ )
+}
+
+/**
+ * Mark all notifications as read through the internal Next route.
+ *
+ * @returns The count of updated notifications.
+ */
+export async function markAllNotificationsRead(): Promise {
+ const response = await fetch("/api/notifications", {
+ method: "PATCH",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ action: "read_all",
+ } satisfies NotificationMutationRequest),
+ })
+
+ return parseNotificationsResponse(
+ response,
+ "Unable to mark notifications as read.",
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts
index bd0d8fb8..b143dcb6 100644
--- a/frontend/src/lib/types.ts
+++ b/frontend/src/lib/types.ts
@@ -51,6 +51,58 @@ export type UserProfile = {
last_name: string
}
+export type NotificationLevel = "info" | "success" | "error"
+
+export type Notification = {
+ id: number
+ project: number | null
+ level: NotificationLevel
+ body: string
+ link_path: string
+ metadata: Record
+ created_at: string
+ read_at: string | null
+ is_read: boolean
+}
+
+export type NotificationReadAllResponse = {
+ updated_count: number
+}
+
+export type MessageThreadCounterpart = {
+ id: number
+ username: string
+ display_name: string
+ avatar_url: string | null
+ avatar_thumbnail_url: string | null
+}
+
+export type MessageThread = {
+ id: number
+ counterpart: MessageThreadCounterpart | null
+ has_unread: boolean
+ last_message_preview: string
+ last_message_at: string | null
+ last_read_at: string | null
+ created_at: string
+}
+
+export type DirectMessage = {
+ id: number
+ thread: number
+ sender: number
+ sender_username: string
+ sender_display_name: string
+ body: string
+ created_at: string
+ edited_at: string | null
+}
+
+export type MessageThreadReadResponse = {
+ thread_id: number
+ last_read_at: string | null
+}
+
export type ProjectMembership = {
id: number
project: number
diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo
index 92d16ad9..f903aa29 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.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.es2025.d.ts","./node_modules/typescript/lib/lib.esnext.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.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.es2025.collection.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.es2025.intl.d.ts","./node_modules/typescript/lib/lib.es2025.iterator.d.ts","./node_modules/typescript/lib/lib.es2025.promise.d.ts","./node_modules/typescript/lib/lib.es2025.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.date.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.esnext.temporal.d.ts","./node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.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/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.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-stats.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/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.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/snapshot-agent.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/cache-interceptor.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/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/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.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/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/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.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/path/posix.d.ts","./node_modules/@types/node/path/win32.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/quic.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/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.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/test/reporters.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/util/types.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/@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/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.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/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.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/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/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/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/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/client/components/readonly-url-search-params.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/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.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/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.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/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.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/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.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/lib/async-callback-set.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/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.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/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/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.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/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.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/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.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/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.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/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.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.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.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/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/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/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.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/unrecognized-action-error.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/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.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/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/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/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./storybook.shims.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/index.d.ts","./node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/tasks.d-Bh0IjN67.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/@vitest/browser/aria-role.d.ts","./node_modules/@vitest/browser/jest-dom.d.ts","./node_modules/@vitest/browser/matchers.d.ts","./node_modules/@vitest/browser/context.d.ts","./node_modules/@vitest/browser-playwright/context.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.CEnv6XRv.d.ts","./node_modules/vitest/dist/chunks/plugin.d.BM2TCi12.d.ts","./node_modules/vitest/dist/coverage.d.ts","./node_modules/obug/dist/core.d.ts","./node_modules/obug/dist/node.d.ts","./node_modules/vitest/dist/node.d.ts","./node_modules/@vitest/browser/dist/index.d.ts","./node_modules/playwright-core/types/protocol.d.ts","./node_modules/playwright-core/types/structs.d.ts","./node_modules/zod/v4/core/json-schema.d.cts","./node_modules/zod/v4/core/standard-schema.d.cts","./node_modules/zod/v4/core/registries.d.cts","./node_modules/zod/v4/core/to-json-schema.d.cts","./node_modules/zod/v4/core/util.d.cts","./node_modules/zod/v4/core/versions.d.cts","./node_modules/zod/v4/core/schemas.d.cts","./node_modules/zod/v4/core/checks.d.cts","./node_modules/zod/v4/core/errors.d.cts","./node_modules/zod/v4/core/core.d.cts","./node_modules/zod/v4/core/parse.d.cts","./node_modules/zod/v4/core/regexes.d.cts","./node_modules/zod/v4/locales/ar.d.cts","./node_modules/zod/v4/locales/az.d.cts","./node_modules/zod/v4/locales/be.d.cts","./node_modules/zod/v4/locales/bg.d.cts","./node_modules/zod/v4/locales/ca.d.cts","./node_modules/zod/v4/locales/cs.d.cts","./node_modules/zod/v4/locales/da.d.cts","./node_modules/zod/v4/locales/de.d.cts","./node_modules/zod/v4/locales/en.d.cts","./node_modules/zod/v4/locales/eo.d.cts","./node_modules/zod/v4/locales/es.d.cts","./node_modules/zod/v4/locales/fa.d.cts","./node_modules/zod/v4/locales/fi.d.cts","./node_modules/zod/v4/locales/fr.d.cts","./node_modules/zod/v4/locales/fr-CA.d.cts","./node_modules/zod/v4/locales/he.d.cts","./node_modules/zod/v4/locales/hu.d.cts","./node_modules/zod/v4/locales/hy.d.cts","./node_modules/zod/v4/locales/id.d.cts","./node_modules/zod/v4/locales/is.d.cts","./node_modules/zod/v4/locales/it.d.cts","./node_modules/zod/v4/locales/ja.d.cts","./node_modules/zod/v4/locales/ka.d.cts","./node_modules/zod/v4/locales/kh.d.cts","./node_modules/zod/v4/locales/km.d.cts","./node_modules/zod/v4/locales/ko.d.cts","./node_modules/zod/v4/locales/lt.d.cts","./node_modules/zod/v4/locales/mk.d.cts","./node_modules/zod/v4/locales/ms.d.cts","./node_modules/zod/v4/locales/nl.d.cts","./node_modules/zod/v4/locales/no.d.cts","./node_modules/zod/v4/locales/ota.d.cts","./node_modules/zod/v4/locales/ps.d.cts","./node_modules/zod/v4/locales/pl.d.cts","./node_modules/zod/v4/locales/pt.d.cts","./node_modules/zod/v4/locales/ru.d.cts","./node_modules/zod/v4/locales/sl.d.cts","./node_modules/zod/v4/locales/sv.d.cts","./node_modules/zod/v4/locales/ta.d.cts","./node_modules/zod/v4/locales/th.d.cts","./node_modules/zod/v4/locales/tr.d.cts","./node_modules/zod/v4/locales/ua.d.cts","./node_modules/zod/v4/locales/uk.d.cts","./node_modules/zod/v4/locales/ur.d.cts","./node_modules/zod/v4/locales/uz.d.cts","./node_modules/zod/v4/locales/vi.d.cts","./node_modules/zod/v4/locales/zh-CN.d.cts","./node_modules/zod/v4/locales/zh-TW.d.cts","./node_modules/zod/v4/locales/yo.d.cts","./node_modules/zod/v4/locales/index.d.cts","./node_modules/zod/v4/core/doc.d.cts","./node_modules/zod/v4/core/api.d.cts","./node_modules/zod/v4/core/json-schema-processors.d.cts","./node_modules/zod/v4/core/json-schema-generator.d.cts","./node_modules/zod/v4/core/index.d.cts","./node_modules/zod/v4/classic/errors.d.cts","./node_modules/zod/v4/classic/parse.d.cts","./node_modules/zod/v4/classic/schemas.d.cts","./node_modules/zod/v4/classic/checks.d.cts","./node_modules/zod/v4/classic/compat.d.cts","./node_modules/zod/v4/classic/from-json-schema.d.cts","./node_modules/zod/v4/classic/iso.d.cts","./node_modules/zod/v4/classic/coerce.d.cts","./node_modules/zod/v4/classic/external.d.cts","./node_modules/zod/index.d.cts","./node_modules/zod/v3/helpers/typeAliases.d.cts","./node_modules/zod/v3/helpers/util.d.cts","./node_modules/zod/v3/ZodError.d.cts","./node_modules/zod/v3/locales/en.d.cts","./node_modules/zod/v3/errors.d.cts","./node_modules/zod/v3/helpers/parseUtil.d.cts","./node_modules/zod/v3/helpers/enumUtil.d.cts","./node_modules/zod/v3/helpers/errorUtil.d.cts","./node_modules/zod/v3/helpers/partialUtil.d.cts","./node_modules/zod/v3/standard-schema.d.cts","./node_modules/zod/v3/types.d.cts","./node_modules/zod/v3/external.d.cts","./node_modules/zod/v3/index.d.cts","./node_modules/playwright-core/types/types.d.ts","./node_modules/playwright-core/index.d.ts","./node_modules/playwright/index.d.ts","./node_modules/@vitest/browser-playwright/dist/index.d.ts","./vitest.shims.d.ts","./next.config.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./node_modules/@storybook/addon-vitest/dist/vitest-plugin/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionalTypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/jest-dom/types/matchers.d.ts","./node_modules/@testing-library/jest-dom/types/jest.d.ts","./node_modules/@testing-library/jest-dom/types/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./vitest.setup.ts","./src/lib/types.ts","./src/lib/storybook-fixtures.ts","./src/lib/view-helpers.ts","./src/lib/dashboard-view.ts","./src/app/(home)/_components/shared.ts","./src/app/(home)/_components/shared.test.ts","./node_modules/next-auth/adapters.d.ts","./node_modules/jose/dist/types/types.d.ts","./node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/verify.d.ts","./node_modules/jose/dist/types/jws/flattened/verify.d.ts","./node_modules/jose/dist/types/jws/general/verify.d.ts","./node_modules/jose/dist/types/jwt/verify.d.ts","./node_modules/jose/dist/types/jwt/decrypt.d.ts","./node_modules/jose/dist/types/jwt/produce.d.ts","./node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/sign.d.ts","./node_modules/jose/dist/types/jws/flattened/sign.d.ts","./node_modules/jose/dist/types/jws/general/sign.d.ts","./node_modules/jose/dist/types/jwt/sign.d.ts","./node_modules/jose/dist/types/jwt/encrypt.d.ts","./node_modules/jose/dist/types/jwk/thumbprint.d.ts","./node_modules/jose/dist/types/jwk/embedded.d.ts","./node_modules/jose/dist/types/jwks/local.d.ts","./node_modules/jose/dist/types/jwks/remote.d.ts","./node_modules/jose/dist/types/jwt/unsecured.d.ts","./node_modules/jose/dist/types/key/export.d.ts","./node_modules/jose/dist/types/key/import.d.ts","./node_modules/jose/dist/types/util/decode_protected_header.d.ts","./node_modules/jose/dist/types/util/decode_jwt.d.ts","./node_modules/jose/dist/types/util/errors.d.ts","./node_modules/jose/dist/types/key/generate_key_pair.d.ts","./node_modules/jose/dist/types/key/generate_secret.d.ts","./node_modules/jose/dist/types/util/base64url.d.ts","./node_modules/jose/dist/types/util/runtime.d.ts","./node_modules/jose/dist/types/index.d.ts","./node_modules/openid-client/types/index.d.ts","./node_modules/next-auth/providers/oauth-types.d.ts","./node_modules/next-auth/providers/oauth.d.ts","./node_modules/next-auth/providers/email.d.ts","./node_modules/next-auth/core/lib/cookie.d.ts","./node_modules/next-auth/core/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/next-auth/providers/index.d.ts","./node_modules/next-auth/jwt/types.d.ts","./node_modules/next-auth/jwt/index.d.ts","./node_modules/next-auth/utils/logger.d.ts","./node_modules/next-auth/core/types.d.ts","./node_modules/next-auth/next/index.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/github.d.ts","./node_modules/next-auth/providers/google.d.ts","./src/lib/auth.ts","./src/lib/api.ts","./src/app/admin/sources/_components/helpers.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/app/api/auth/[...nextauth]/route.test.ts","./src/app/api/content-skills/route.ts","./src/app/api/content-skills/route.test.ts","./src/app/api/entities/route.ts","./src/app/api/entities/route.test.ts","./src/app/api/entities/[id]/route.ts","./src/app/api/entities/[id]/route.test.ts","./src/app/api/entity-candidates/[id]/route.ts","./src/app/api/entity-candidates/[id]/route.test.ts","./src/app/api/feedback/route.ts","./src/app/api/feedback/route.test.ts","./src/app/api/invitations/[token]/accept/route.ts","./src/app/api/invitations/[token]/accept/route.test.ts","./src/app/api/profile/route.ts","./src/app/api/profile/route.test.ts","./src/app/api/profile/avatar/route.ts","./src/app/api/profile/avatar/route.test.ts","./src/app/api/projects/route.ts","./src/app/api/projects/route.test.ts","./src/app/api/projects/[id]/draft-action-helpers.ts","./src/app/api/projects/[id]/trend-action-helpers.ts","./src/app/api/projects/[id]/authority-settings/route.ts","./src/app/api/projects/[id]/authority-settings/route.test.ts","./src/app/api/projects/[id]/bluesky-credentials/route.ts","./src/app/api/projects/[id]/bluesky-credentials/route.test.ts","./src/app/api/projects/[id]/draft-items/[itemId]/route.ts","./src/app/api/projects/[id]/draft-items/[itemId]/route.test.ts","./src/app/api/projects/[id]/draft-original-pieces/[pieceId]/route.ts","./src/app/api/projects/[id]/draft-original-pieces/[pieceId]/route.test.ts","./src/app/api/projects/[id]/draft-sections/[sectionId]/route.ts","./src/app/api/projects/[id]/draft-sections/[sectionId]/route.test.ts","./src/app/api/projects/[id]/drafts/[draftId]/route.ts","./src/app/api/projects/[id]/drafts/[draftId]/route.test.ts","./src/app/api/projects/[id]/drafts/[draftId]/regenerate-section/route.ts","./src/app/api/projects/[id]/drafts/[draftId]/regenerate-section/route.test.ts","./src/app/api/projects/[id]/drafts/generate/route.ts","./src/app/api/projects/[id]/drafts/generate/route.test.ts","./src/app/api/projects/[id]/entity-candidate-bulk/route.ts","./src/app/api/projects/[id]/entity-candidate-bulk/route.test.ts","./src/app/api/projects/[id]/ideas/generate/route.ts","./src/app/api/projects/[id]/ideas/route.test.ts","./src/app/api/projects/[id]/ideas/[ideaId]/accept/route.ts","./src/app/api/projects/[id]/ideas/[ideaId]/dismiss/route.ts","./src/app/api/projects/[id]/ideas/[ideaId]/mark-written/route.ts","./src/app/api/projects/[id]/ideas/[ideaId]/route.test.ts","./src/app/api/projects/[id]/intake/route.ts","./src/app/api/projects/[id]/intake/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/route.ts","./src/app/api/projects/[id]/intake-allowlist/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.test.ts","./src/app/api/projects/[id]/invitations/route.ts","./src/app/api/projects/[id]/invitations/route.test.ts","./src/app/api/projects/[id]/invitations/[invitationId]/revoke/route.ts","./src/app/api/projects/[id]/invitations/[invitationId]/revoke/route.test.ts","./src/app/api/projects/[id]/linkedin-oauth/start/route.ts","./src/app/api/projects/[id]/linkedin-oauth/start/route.test.ts","./src/app/api/projects/[id]/linkedin-source-configs/route.ts","./src/app/api/projects/[id]/linkedin-source-configs/route.test.ts","./src/app/api/projects/[id]/mastodon-credentials/route.ts","./src/app/api/projects/[id]/mastodon-credentials/route.test.ts","./src/app/api/projects/[id]/members/[membershipId]/route.ts","./src/app/api/projects/[id]/members/[membershipId]/route.test.ts","./src/app/api/projects/[id]/rotate-intake-token/route.ts","./src/app/api/projects/[id]/rotate-intake-token/route.test.ts","./src/app/api/projects/[id]/themes/[themeId]/accept/route.ts","./src/app/api/projects/[id]/themes/[themeId]/dismiss/route.ts","./src/app/api/projects/[id]/themes/[themeId]/route.test.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.test.ts","./src/app/api/projects/[id]/verify-linkedin-credentials/route.ts","./src/app/api/projects/[id]/verify-linkedin-credentials/route.test.ts","./src/app/api/projects/[id]/verify-mastodon-credentials/route.ts","./src/app/api/projects/[id]/verify-mastodon-credentials/route.test.ts","./src/app/api/review/[id]/route.ts","./src/app/api/review/[id]/route.test.ts","./src/app/api/skills/[skillName]/route.ts","./src/app/api/skills/[skillName]/route.test.ts","./src/app/api/source-configs/route.ts","./src/app/api/source-configs/route.test.ts","./src/app/api/source-configs/[id]/route.ts","./src/app/api/source-configs/[id]/route.test.ts","./src/app/entities/candidates/_components/shared.ts","./src/app/ideas/_components/shared.ts","./src/app/themes/_components/shared.ts","./src/app/trends/_components/shared.ts","./src/app/trends/_components/shared.test.ts","./src/lib/profile.ts","./node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/lib/useRole.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./src/lib/utils.ts","./src/lib/__tests__/api.test.ts","./src/lib/__tests__/auth.test.ts","./src/lib/__tests__/dashboard-view.test.ts","./src/lib/__tests__/view-helpers.test.ts","./test-support/server-only.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/providers/QueryProvider/index.tsx","./node_modules/next-themes/dist/index.d.ts","./src/providers/ThemeProvider/index.tsx","./src/app/layout.tsx","./node_modules/storybook/dist/router/index.d.ts","./node_modules/storybook/dist/theming/index.d.ts","./node_modules/storybook/dist/channels/index.d.ts","./node_modules/storybook/dist/preview-api/index.d.ts","./node_modules/storybook/dist/core-events/index.d.ts","./node_modules/ast-types/lib/gen/namedTypes.d.ts","./node_modules/ast-types/lib/gen/kinds.d.ts","./node_modules/ast-types/lib/gen/builders.d.ts","./node_modules/ast-types/lib/types.d.ts","./node_modules/ast-types/lib/path.d.ts","./node_modules/ast-types/lib/scope.d.ts","./node_modules/ast-types/lib/node-path.d.ts","./node_modules/ast-types/lib/path-visitor.d.ts","./node_modules/ast-types/lib/gen/visitor.d.ts","./node_modules/ast-types/lib/main.d.ts","./node_modules/recast/lib/options.d.ts","./node_modules/recast/lib/parser.d.ts","./node_modules/recast/lib/printer.d.ts","./node_modules/recast/main.d.ts","./node_modules/storybook/dist/babel/index.d.ts","./node_modules/storybook/dist/csf-tools/index.d.ts","./node_modules/@webcontainer/env/dist/environment.d.ts","./node_modules/@webcontainer/env/dist/url.d.ts","./node_modules/@webcontainer/env/dist/index.d.ts","./node_modules/storybook/dist/common/index.d.ts","./node_modules/storybook/dist/telemetry/index.d.ts","./node_modules/storybook/dist/core-server/index.d.ts","./node_modules/storybook/dist/node-logger/index.d.ts","./node_modules/storybook/dist/types/index.d.ts","./node_modules/storybook/dist/csf/index.d.ts","./node_modules/@storybook/react/dist/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@rollup/pluginutils/types/index.d.ts","./node_modules/vite-plugin-storybook-nextjs/dist/index.d.ts","./node_modules/@storybook/builder-vite/dist/index.d.ts","./node_modules/typescript/lib/typescript.d.ts","./node_modules/react-docgen-typescript/lib/parser.d.ts","./node_modules/react-docgen-typescript/lib/index.d.ts","./node_modules/@joshwooding/vite-plugin-react-docgen-typescript/dist/index.d.ts","./node_modules/@storybook/react-vite/dist/index.d.ts","./node_modules/@storybook/nextjs-vite/dist/index.d.ts","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/@base-ui/react/esm/internals/reason-parts.d.ts","./node_modules/@base-ui/react/esm/internals/reasons.d.ts","./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.d.ts","./node_modules/@base-ui/react/esm/types/index.d.ts","./node_modules/@base-ui/react/esm/internals/types.d.ts","./node_modules/@base-ui/react/esm/button/Button.d.ts","./node_modules/@base-ui/react/esm/button/index.d.ts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./src/components/ui/button.tsx","./src/components/elements/ThemeToggle/index.tsx","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTreeStore.d.ts","./node_modules/reselect/dist/reselect.d.ts","./node_modules/@base-ui/utils/esm/store/createSelector.d.ts","./node_modules/@base-ui/utils/esm/store/createSelectorMemoized.d.ts","./node_modules/@base-ui/utils/esm/fastHooks.d.ts","./node_modules/@base-ui/utils/esm/store/Store.d.ts","./node_modules/@base-ui/utils/esm/store/useStore.d.ts","./node_modules/@base-ui/utils/esm/store/ReactStore.d.ts","./node_modules/@base-ui/utils/esm/store/StoreInspector.d.ts","./node_modules/@base-ui/utils/esm/store/index.d.ts","./node_modules/@base-ui/react/esm/internals/useTransitionStatus.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.d.ts","./node_modules/@base-ui/react/esm/utils/popups/store.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.d.ts","./node_modules/@base-ui/react/esm/utils/popups/index.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.d.ts","./node_modules/@base-ui/utils/esm/useEnhancedClickHandler.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.d.ts","./node_modules/@base-ui/react/esm/internals/getStateAttributesProps.d.ts","./node_modules/@base-ui/react/esm/internals/useRenderElement.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClientPoint.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFocus.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverShared.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHover.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useListNavigation.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useTypeahead.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloatingRootContext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/safePolygon.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/types.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/index.d.ts","./node_modules/@base-ui/react/esm/utils/useAnchorPositioning.d.ts","./node_modules/@base-ui/react/esm/menu/arrow/MenuArrow.d.ts","./node_modules/@base-ui/react/esm/menu/backdrop/MenuBackdrop.d.ts","./node_modules/@base-ui/react/esm/menu/store/MenuStore.d.ts","./node_modules/@base-ui/react/esm/menu/root/MenuRootContext.d.ts","./node_modules/@base-ui/react/esm/menubar/MenubarContext.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRoot.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRootContext.d.ts","./node_modules/@base-ui/react/esm/menu/store/MenuHandle.d.ts","./node_modules/@base-ui/react/esm/menu/root/MenuRoot.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item/MenuCheckboxItem.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.d.ts","./node_modules/@base-ui/react/esm/menu/group/MenuGroup.d.ts","./node_modules/@base-ui/react/esm/menu/group-label/MenuGroupLabel.d.ts","./node_modules/@base-ui/react/esm/menu/item/MenuItem.d.ts","./node_modules/@base-ui/react/esm/menu/link-item/MenuLinkItem.d.ts","./node_modules/@base-ui/react/esm/menu/popup/MenuPopup.d.ts","./node_modules/@base-ui/react/esm/menu/portal/MenuPortal.d.ts","./node_modules/@base-ui/react/esm/menu/positioner/MenuPositioner.d.ts","./node_modules/@base-ui/react/esm/menu/radio-group/MenuRadioGroup.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item/MenuRadioItem.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item-indicator/MenuRadioItemIndicator.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRootContext.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRoot.d.ts","./node_modules/@base-ui/react/esm/menu/trigger/MenuTrigger.d.ts","./node_modules/@base-ui/react/esm/menu/viewport/MenuViewport.d.ts","./node_modules/@base-ui/react/esm/separator/Separator.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-trigger/MenuSubmenuTrigger.d.ts","./node_modules/@base-ui/react/esm/menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/menu/index.d.ts","./src/components/ui/dropdown-menu.tsx","./node_modules/next-auth/client/_utils.d.ts","./node_modules/next-auth/react/types.d.ts","./node_modules/next-auth/react/index.d.ts","./node_modules/@base-ui/react/esm/avatar/root/AvatarRoot.d.ts","./node_modules/@base-ui/react/esm/avatar/image/useImageLoadingStatus.d.ts","./node_modules/@base-ui/react/esm/avatar/image/AvatarImage.d.ts","./node_modules/@base-ui/react/esm/avatar/fallback/AvatarFallback.d.ts","./node_modules/@base-ui/react/esm/avatar/index.parts.d.ts","./node_modules/@base-ui/react/esm/avatar/index.d.ts","./src/components/ui/avatar.tsx","./src/components/elements/UserAvatar/index.tsx","./src/components/layout/UserMenu/_components/UserMenuContent/index.tsx","./src/components/layout/UserMenu/_components/UserMenuTrigger/index.tsx","./src/components/layout/UserMenu/index.tsx","./node_modules/@base-ui/react/esm/separator/index.d.ts","./src/components/ui/separator.tsx","./src/components/layout/AppShell/_components/AppShellHeader/index.tsx","./src/components/ui/card.tsx","./src/components/layout/AppShell/_components/AppShellSidebar/index.tsx","./src/components/layout/AppShell/index.tsx","./src/components/ui/alert.tsx","./node_modules/@base-ui/react/esm/merge-props/mergeProps.d.ts","./node_modules/@base-ui/react/esm/merge-props/index.d.ts","./node_modules/@base-ui/react/esm/use-render/useRender.d.ts","./node_modules/@base-ui/react/esm/use-render/index.d.ts","./src/components/ui/badge.tsx","./src/components/elements/StatusBadge/index.tsx","./src/app/(home)/_components/ContentFeed/index.tsx","./src/components/ui/label.tsx","./node_modules/@base-ui/react/esm/internals/resolveValueLabel.d.ts","./node_modules/@base-ui/react/esm/select/root/SelectRoot.d.ts","./node_modules/@base-ui/react/esm/internals/form-context/FormContext.d.ts","./node_modules/@base-ui/react/esm/form/Form.d.ts","./node_modules/@base-ui/react/esm/form/index.d.ts","./node_modules/@base-ui/react/esm/field/root/FieldRoot.d.ts","./node_modules/@base-ui/react/esm/select/label/SelectLabel.d.ts","./node_modules/@base-ui/react/esm/select/trigger/SelectTrigger.d.ts","./node_modules/@base-ui/react/esm/select/value/SelectValue.d.ts","./node_modules/@base-ui/react/esm/select/icon/SelectIcon.d.ts","./node_modules/@base-ui/react/esm/select/portal/SelectPortal.d.ts","./node_modules/@base-ui/react/esm/select/backdrop/SelectBackdrop.d.ts","./node_modules/@base-ui/react/esm/select/positioner/SelectPositioner.d.ts","./node_modules/@base-ui/react/esm/select/popup/SelectPopup.d.ts","./node_modules/@base-ui/react/esm/select/list/SelectList.d.ts","./node_modules/@base-ui/react/esm/select/item/SelectItem.d.ts","./node_modules/@base-ui/react/esm/select/item-indicator/SelectItemIndicator.d.ts","./node_modules/@base-ui/react/esm/select/item-text/SelectItemText.d.ts","./node_modules/@base-ui/react/esm/select/arrow/SelectArrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-down-arrow/SelectScrollDownArrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-up-arrow/SelectScrollUpArrow.d.ts","./node_modules/@base-ui/react/esm/select/group/SelectGroup.d.ts","./node_modules/@base-ui/react/esm/select/group-label/SelectGroupLabel.d.ts","./node_modules/@base-ui/react/esm/select/index.parts.d.ts","./node_modules/@base-ui/react/esm/select/index.d.ts","./src/components/ui/select.tsx","./src/app/(home)/_components/DashboardFilterToolbar/index.tsx","./src/app/(home)/_components/DashboardOverview/index.tsx","./src/app/(home)/_components/DashboardSidebar/index.tsx","./src/components/ui/table.tsx","./src/app/(home)/_components/ReviewQueueTable/index.tsx","./src/app/(home)/_components/HomePageContent/index.tsx","./src/lib/storybook-docs.tsx","./src/app/(home)/page.stories.tsx","./src/app/(home)/page.tsx","./src/app/(home)/page.test.tsx","./src/app/(home)/_components/ContentFeed/index.stories.tsx","./src/app/(home)/_components/ContentFeed/index.test.tsx","./src/app/(home)/_components/DashboardFilterToolbar/index.stories.tsx","./src/app/(home)/_components/DashboardFilterToolbar/index.test.tsx","./src/app/(home)/_components/DashboardOverview/index.stories.tsx","./src/app/(home)/_components/DashboardOverview/index.test.tsx","./src/app/(home)/_components/DashboardSidebar/index.stories.tsx","./src/app/(home)/_components/DashboardSidebar/index.test.tsx","./src/app/(home)/_components/HomePageContent/index.stories.tsx","./src/app/(home)/_components/HomePageContent/index.test.tsx","./src/app/(home)/_components/ReviewQueueTable/index.stories.tsx","./src/app/(home)/_components/ReviewQueueTable/index.test.tsx","./src/app/admin/health/_components/SourceDiversityPanel/index.tsx","./src/app/admin/health/_components/SourceHealthPanel/index.tsx","./src/app/admin/health/_components/TopicCentroidPanel/index.tsx","./src/app/admin/health/_components/TrendTaskRunsPanel/index.tsx","./src/app/admin/health/page.stories.tsx","./src/app/admin/health/page.tsx","./src/app/admin/health/page.test.tsx","./src/app/admin/health/_components/SourceDiversityPanel/index.stories.tsx","./src/app/admin/health/_components/SourceDiversityPanel/index.test.tsx","./src/app/admin/health/_components/SourceHealthPanel/index.stories.tsx","./src/app/admin/health/_components/SourceHealthPanel/index.test.tsx","./src/app/admin/health/_components/TopicCentroidPanel/index.stories.tsx","./src/app/admin/health/_components/TopicCentroidPanel/index.test.tsx","./src/app/admin/health/_components/TrendTaskRunsPanel/index.stories.tsx","./src/app/admin/health/_components/TrendTaskRunsPanel/index.test.tsx","./node_modules/@base-ui/react/esm/field/label/FieldLabel.d.ts","./node_modules/@base-ui/react/esm/field/error/FieldError.d.ts","./node_modules/@base-ui/react/esm/field/description/FieldDescription.d.ts","./node_modules/@base-ui/react/esm/field/control/FieldControl.d.ts","./node_modules/@base-ui/react/esm/field/validity/FieldValidity.d.ts","./node_modules/@base-ui/react/esm/field/item/FieldItem.d.ts","./node_modules/@base-ui/react/esm/field/index.parts.d.ts","./node_modules/@base-ui/react/esm/field/index.d.ts","./node_modules/@base-ui/react/esm/input/Input.d.ts","./node_modules/@base-ui/react/esm/input/index.d.ts","./src/components/ui/input.tsx","./src/components/ui/textarea.tsx","./src/app/admin/projects/new/_components/NewProjectFormCard/index.tsx","./src/app/admin/projects/new/_components/ProjectFlashNotice/index.tsx","./src/app/admin/projects/new/page.stories.tsx","./src/app/admin/projects/new/page.tsx","./src/app/admin/projects/new/page.test.tsx","./src/app/admin/projects/new/_components/NewProjectFormCard/index.stories.tsx","./src/app/admin/projects/new/_components/NewProjectFormCard/index.test.tsx","./src/app/admin/projects/new/_components/ProjectFlashNotice/index.stories.tsx","./src/app/admin/projects/new/_components/ProjectFlashNotice/index.test.tsx","./src/components/elements/CopyButton/index.tsx","./src/app/admin/sources/_components/NewsletterIntakePanel/index.tsx","./src/app/admin/sources/_components/ProviderSetupPanel/index.tsx","./src/app/admin/sources/_components/SourceConfigList/index.tsx","./src/app/admin/sources/page.stories.tsx","./src/app/admin/sources/page.tsx","./src/app/admin/sources/page.test.tsx","./src/app/admin/sources/_components/NewsletterIntakePanel/index.stories.tsx","./src/app/admin/sources/_components/NewsletterIntakePanel/index.test.tsx","./src/app/admin/sources/_components/ProviderSetupPanel/index.stories.tsx","./src/app/admin/sources/_components/ProviderSetupPanel/index.test.tsx","./src/app/admin/sources/_components/SourceConfigList/index.stories.tsx","./src/app/admin/sources/_components/SourceConfigList/index.test.tsx","./src/app/content/[id]/_components/SkillActionBar/index.tsx","./src/app/content/[id]/_components/ContentDetailMainColumn/index.tsx","./src/app/content/[id]/_components/ContentDetailSidebar/index.tsx","./src/app/content/[id]/page.stories.tsx","./src/app/content/[id]/page.tsx","./src/app/content/[id]/page.test.tsx","./src/app/content/[id]/_components/ContentDetailMainColumn/index.stories.tsx","./src/app/content/[id]/_components/ContentDetailMainColumn/index.test.tsx","./src/app/content/[id]/_components/ContentDetailSidebar/index.stories.tsx","./src/app/content/[id]/_components/ContentDetailSidebar/index.test.tsx","./src/app/content/[id]/_components/SkillActionBar/index.stories.tsx","./src/app/content/[id]/_components/SkillActionBar/index.test.tsx","./src/app/drafts/_components/DraftsList/index.tsx","./src/app/drafts/_components/DraftsOverviewCards/index.tsx","./src/app/drafts/_components/DraftsToolbar/index.tsx","./src/app/drafts/page.stories.tsx","./src/app/drafts/page.tsx","./src/app/drafts/page.test.tsx","./src/app/drafts/[draftId]/_components/DraftEditor/index.tsx","./src/app/drafts/[draftId]/_components/DraftOverviewCards/index.tsx","./src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.tsx","./src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.tsx","./src/app/drafts/[draftId]/page.stories.tsx","./src/app/drafts/[draftId]/page.tsx","./src/app/drafts/[draftId]/page.test.tsx","./src/app/drafts/[draftId]/_components/DraftEditor/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftEditor/index.test.tsx","./src/app/drafts/[draftId]/_components/DraftOverviewCards/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftOverviewCards/index.test.tsx","./src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.test.tsx","./src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.test.tsx","./src/app/drafts/_components/DraftsList/index.stories.tsx","./src/app/drafts/_components/DraftsList/index.test.tsx","./src/app/drafts/_components/DraftsOverviewCards/index.stories.tsx","./src/app/drafts/_components/DraftsOverviewCards/index.test.tsx","./src/app/drafts/_components/DraftsToolbar/index.stories.tsx","./src/app/drafts/_components/DraftsToolbar/index.test.tsx","./src/app/entities/_components/shared.tsx","./src/app/entities/_components/CreateEntityCard/index.tsx","./src/app/entities/_components/EntityCandidatesCard/index.tsx","./src/app/entities/_components/EntityCard/index.tsx","./src/app/entities/_components/EntitiesPageContent/index.tsx","./src/app/entities/page.stories.tsx","./src/app/entities/page.tsx","./src/app/entities/page.test.tsx","./node_modules/@base-ui/react/esm/slider/root/SliderRoot.d.ts","./node_modules/@base-ui/react/esm/slider/label/SliderLabel.d.ts","./node_modules/@base-ui/react/esm/slider/value/SliderValue.d.ts","./node_modules/@base-ui/react/esm/slider/control/SliderControl.d.ts","./node_modules/@base-ui/react/esm/slider/track/SliderTrack.d.ts","./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.d.ts","./node_modules/@base-ui/react/esm/slider/thumb/SliderThumb.d.ts","./node_modules/@base-ui/react/esm/slider/indicator/SliderIndicator.d.ts","./node_modules/@base-ui/react/esm/slider/index.parts.d.ts","./node_modules/@base-ui/react/esm/slider/index.d.ts","./src/components/ui/slider.tsx","./src/app/entities/[id]/_components/AuthorityWeightControls/index.tsx","./src/app/entities/[id]/_components/AuthorityHistoryPanel/index.tsx","./src/app/entities/[id]/_components/EntityMentionsPanel/index.tsx","./src/app/entities/[id]/_components/EntityOverviewCard/index.tsx","./src/app/entities/[id]/_components/EntitySidebar/index.tsx","./src/app/entities/[id]/_components/EntityDetailPageContent/index.tsx","./src/app/entities/[id]/page.stories.tsx","./src/app/entities/[id]/page.tsx","./src/app/entities/[id]/page.test.tsx","./src/app/entities/[id]/_components/AuthorityHistoryPanel/index.stories.tsx","./src/app/entities/[id]/_components/AuthorityHistoryPanel/index.test.tsx","./src/app/entities/[id]/_components/AuthorityWeightControls/index.stories.tsx","./src/app/entities/[id]/_components/AuthorityWeightControls/index.test.tsx","./src/app/entities/[id]/_components/EntityDetailPageContent/index.test.tsx","./src/app/entities/[id]/_components/EntityMentionsPanel/index.stories.tsx","./src/app/entities/[id]/_components/EntityMentionsPanel/index.test.tsx","./src/app/entities/[id]/_components/EntityOverviewCard/index.stories.tsx","./src/app/entities/[id]/_components/EntityOverviewCard/index.test.tsx","./src/app/entities/[id]/_components/EntitySidebar/index.stories.tsx","./src/app/entities/[id]/_components/EntitySidebar/index.test.tsx","./src/app/entities/_components/CreateEntityCard/index.stories.tsx","./src/app/entities/_components/CreateEntityCard/index.test.tsx","./src/app/entities/_components/EntitiesPageContent/index.test.tsx","./src/app/entities/_components/EntityCandidatesCard/index.stories.tsx","./src/app/entities/_components/EntityCandidatesCard/index.test.tsx","./src/app/entities/_components/EntityCard/index.stories.tsx","./src/app/entities/_components/EntityCard/index.test.tsx","./src/app/entities/candidates/_components/CandidateClusterCard/index.tsx","./src/app/entities/candidates/_components/CandidateQueueOverview/index.tsx","./src/app/entities/candidates/_components/ResolvedCandidateList/index.tsx","./src/app/entities/candidates/page.stories.tsx","./src/app/entities/candidates/page.tsx","./src/app/entities/candidates/page.test.tsx","./src/app/entities/candidates/_components/CandidateClusterCard/index.stories.tsx","./src/app/entities/candidates/_components/CandidateClusterCard/index.test.tsx","./src/app/entities/candidates/_components/CandidateQueueOverview/index.stories.tsx","./src/app/entities/candidates/_components/CandidateQueueOverview/index.test.tsx","./src/app/entities/candidates/_components/ResolvedCandidateList/index.stories.tsx","./src/app/entities/candidates/_components/ResolvedCandidateList/index.test.tsx","./src/app/ideas/_components/IdeasQueueOverview/index.tsx","./src/app/ideas/_components/IdeasToolbarCard/index.tsx","./src/app/ideas/_components/OriginalContentIdeaCard/index.tsx","./src/app/ideas/page.stories.tsx","./src/app/ideas/page.tsx","./src/app/ideas/page.test.tsx","./src/app/ideas/_components/IdeasQueueOverview/index.stories.tsx","./src/app/ideas/_components/IdeasQueueOverview/index.test.tsx","./src/app/ideas/_components/IdeasToolbarCard/index.stories.tsx","./src/app/ideas/_components/IdeasToolbarCard/index.test.tsx","./src/app/ideas/_components/OriginalContentIdeaCard/index.stories.tsx","./src/app/ideas/_components/OriginalContentIdeaCard/index.test.tsx","./src/app/invite/[token]/_components/InvitationDetailsCard/index.tsx","./src/app/invite/[token]/_components/InvitePageContent/index.tsx","./src/app/invite/[token]/page.stories.tsx","./src/app/invite/[token]/page.tsx","./src/app/invite/[token]/page.test.tsx","./src/app/invite/[token]/_components/InvitationDetailsCard/index.stories.tsx","./src/app/invite/[token]/_components/InvitationDetailsCard/index.test.tsx","./src/app/invite/[token]/_components/InvitePageContent/index.stories.tsx","./src/app/invite/[token]/_components/InvitePageContent/index.test.tsx","./node_modules/@base-ui/react/esm/checkbox/root/CheckboxRoot.d.ts","./node_modules/@base-ui/react/esm/checkbox/indicator/CheckboxIndicator.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.parts.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.d.ts","./src/components/ui/checkbox.tsx","./src/app/login/_components/LoginForm/index.tsx","./src/app/login/_components/SocialAuthButtons/index.tsx","./src/app/login/_components/LoginPageContent/index.tsx","./src/app/login/page.stories.tsx","./src/app/login/page.tsx","./src/app/login/page.test.tsx","./src/app/login/_components/LoginForm/index.stories.tsx","./src/app/login/_components/LoginForm/index.test.tsx","./src/app/login/_components/LoginPageContent/index.stories.tsx","./src/app/login/_components/LoginPageContent/index.test.tsx","./src/app/login/_components/SocialAuthButtons/index.stories.tsx","./src/app/login/_components/SocialAuthButtons/index.test.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/app/profile/_components/AvatarDropzone/index.tsx","./src/app/profile/_components/AvatarPreview/index.tsx","./src/app/profile/_components/ProfileForm/index.tsx","./src/app/profile/_components/ProfileSettingsWorkspace/index.tsx","./src/app/profile/page.stories.tsx","./src/app/profile/_components/ProfileSettingsPanel/index.tsx","./src/app/profile/page.tsx","./src/app/profile/page.test.tsx","./src/app/profile/_components/AvatarDropzone/index.stories.tsx","./src/app/profile/_components/AvatarDropzone/index.test.tsx","./src/app/profile/_components/AvatarPreview/index.stories.tsx","./src/app/profile/_components/AvatarPreview/index.test.tsx","./src/app/profile/_components/ProfileForm/index.stories.tsx","./src/app/profile/_components/ProfileForm/index.test.tsx","./src/app/profile/_components/ProfileSettingsPanel/index.test.tsx","./src/app/profile/_components/ProfileSettingsWorkspace/index.stories.tsx","./src/app/profile/_components/ProfileSettingsWorkspace/index.test.tsx","./src/app/projects/[id]/members/_components/InvitationsCard/index.tsx","./src/app/projects/[id]/members/_components/shared.tsx","./src/app/projects/[id]/members/_components/MembershipsCard/index.tsx","./src/app/projects/[id]/members/_components/MembersPageContent/index.tsx","./src/app/projects/[id]/members/page.stories.tsx","./src/app/projects/[id]/members/page.tsx","./src/app/projects/[id]/members/page.test.tsx","./src/app/projects/[id]/members/_components/InvitationsCard/index.stories.tsx","./src/app/projects/[id]/members/_components/InvitationsCard/index.test.tsx","./src/app/projects/[id]/members/_components/MembersPageContent/index.stories.tsx","./src/app/projects/[id]/members/_components/MembersPageContent/index.test.tsx","./src/app/projects/[id]/members/_components/MembershipsCard/index.stories.tsx","./src/app/projects/[id]/members/_components/MembershipsCard/index.test.tsx","./src/app/projects/[id]/members/invite/_components/shared.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.tsx","./src/app/projects/[id]/members/invite/page.stories.tsx","./src/app/projects/[id]/members/invite/page.tsx","./src/app/projects/[id]/members/invite/page.test.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.stories.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.test.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.stories.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.test.tsx","./src/app/themes/_components/ThemesFilterToolbar/index.tsx","./src/app/themes/_components/ThemesQueueOverview/index.tsx","./src/app/themes/_components/ThemeSuggestionCard/index.tsx","./src/app/themes/_components/ThemesPageContent/index.tsx","./src/app/themes/page.stories.tsx","./src/app/themes/page.tsx","./src/app/themes/page.test.tsx","./src/app/themes/_components/ThemeSuggestionCard/index.stories.tsx","./src/app/themes/_components/ThemeSuggestionCard/index.test.tsx","./src/app/themes/_components/ThemesFilterToolbar/index.stories.tsx","./src/app/themes/_components/ThemesFilterToolbar/index.test.tsx","./src/app/themes/_components/ThemesPageContent/index.stories.tsx","./src/app/themes/_components/ThemesPageContent/index.test.tsx","./src/app/themes/_components/ThemesQueueOverview/index.stories.tsx","./src/app/themes/_components/ThemesQueueOverview/index.test.tsx","./src/app/trends/_components/TopicClusterCard/index.tsx","./src/app/trends/_components/TrendClusterDetailPanel/index.tsx","./src/app/trends/_components/TrendsFilterToolbar/index.tsx","./src/app/trends/_components/TrendsQueueOverview/index.tsx","./src/app/trends/_components/TrendsPageContent/index.tsx","./src/app/trends/page.stories.tsx","./src/app/trends/page.tsx","./src/app/trends/page.test.tsx","./src/app/trends/_components/TopicClusterCard/index.stories.tsx","./src/app/trends/_components/TopicClusterCard/index.test.tsx","./src/app/trends/_components/TrendClusterDetailPanel/index.stories.tsx","./src/app/trends/_components/TrendClusterDetailPanel/index.test.tsx","./src/app/trends/_components/TrendsFilterToolbar/index.stories.tsx","./src/app/trends/_components/TrendsFilterToolbar/index.test.tsx","./src/app/trends/_components/TrendsPageContent/index.stories.tsx","./src/app/trends/_components/TrendsPageContent/index.test.tsx","./src/app/trends/_components/TrendsQueueOverview/index.stories.tsx","./src/app/trends/_components/TrendsQueueOverview/index.test.tsx","./src/components/elements/CopyButton/index.stories.tsx","./src/components/elements/CopyButton/index.test.tsx","./src/components/elements/StatusBadge/index.stories.tsx","./src/components/elements/StatusBadge/index.test.tsx","./src/components/elements/ThemeToggle/index.stories.tsx","./src/components/elements/ThemeToggle/index.test.tsx","./src/components/elements/UserAvatar/index.stories.tsx","./src/components/elements/UserAvatar/index.test.tsx","./src/components/layout/AppShell/index.stories.tsx","./src/components/layout/AppShell/index.test.tsx","./src/components/layout/AppShell/_components/AppShellHeader/index.stories.tsx","./src/components/layout/AppShell/_components/AppShellHeader/index.test.tsx","./src/components/layout/AppShell/_components/AppShellSidebar/index.stories.tsx","./src/components/layout/AppShell/_components/AppShellSidebar/index.test.tsx","./node_modules/@testing-library/jest-dom/types/matchers-standalone.d.ts","./node_modules/storybook/node_modules/@vitest/spy/dist/index.d.ts","./node_modules/storybook/node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/types.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/storybook/node_modules/tinyrainbow/dist/index-8b61d5bc.d.ts","./node_modules/storybook/node_modules/tinyrainbow/dist/node.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/index.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/storybook/node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@testing-library/user-event/dist/types/event/eventMap.d.ts","./node_modules/@testing-library/user-event/dist/types/event/types.d.ts","./node_modules/@testing-library/user-event/dist/types/event/dispatchEvent.d.ts","./node_modules/@testing-library/user-event/dist/types/event/focus.d.ts","./node_modules/@testing-library/user-event/dist/types/event/input.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/click/isClickableInput.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/Blob.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/DataTransfer.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/FileList.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/Clipboard.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/timeValue.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/isContentEditable.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/isEditable.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/maxLength.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/setFiles.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/cursor.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/getActiveElement.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/getTabDestination.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/isFocusable.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/selection.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/selector.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/keyDef/readNextDescriptor.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/cloneEvent.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/findClosest.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/getDocumentFromNode.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/getTreeDiff.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/getWindow.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isDescendantOrSelf.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isElementType.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isVisible.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isDisabled.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/level.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/wait.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/pointer/cssPointerEvents.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/index.d.ts","./node_modules/@testing-library/user-event/dist/types/document/UI.d.ts","./node_modules/@testing-library/user-event/dist/types/document/getValueOrTextContent.d.ts","./node_modules/@testing-library/user-event/dist/types/document/copySelection.d.ts","./node_modules/@testing-library/user-event/dist/types/document/trackValue.d.ts","./node_modules/@testing-library/user-event/dist/types/document/index.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/getInputRange.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/modifySelection.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/moveSelection.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/setSelectionPerMouse.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/modifySelectionPerMouse.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/selectAll.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/setSelectionRange.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/setSelection.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/updateSelectionOnFocus.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/index.d.ts","./node_modules/@testing-library/user-event/dist/types/event/index.d.ts","./node_modules/@testing-library/user-event/dist/types/system/pointer/buttons.d.ts","./node_modules/@testing-library/user-event/dist/types/system/pointer/shared.d.ts","./node_modules/@testing-library/user-event/dist/types/system/pointer/index.d.ts","./node_modules/@testing-library/user-event/dist/types/system/index.d.ts","./node_modules/@testing-library/user-event/dist/types/system/keyboard.d.ts","./node_modules/@testing-library/user-event/dist/types/options.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/click.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/hover.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/tab.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/index.d.ts","./node_modules/@testing-library/user-event/dist/types/keyboard/index.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/copy.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/cut.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/paste.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/index.d.ts","./node_modules/@testing-library/user-event/dist/types/pointer/index.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/clear.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/selectOptions.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/type.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/upload.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/index.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/api.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/directApi.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/setup.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/index.d.ts","./node_modules/@testing-library/user-event/dist/types/index.d.ts","./node_modules/storybook/dist/test/index.d.ts","./src/components/layout/UserMenu/index.stories.tsx","./src/components/layout/UserMenu/index.test.tsx","./src/components/layout/UserMenu/_components/UserMenuContent/index.stories.tsx","./src/components/layout/UserMenu/_components/UserMenuContent/index.test.tsx","./src/components/layout/UserMenu/_components/UserMenuTrigger/index.stories.tsx","./src/components/layout/UserMenu/_components/UserMenuTrigger/index.test.tsx","./src/lib/__tests__/useRole.test.tsx","./src/providers/QueryProvider/index.test.tsx","./src/providers/ThemeProvider/index.test.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[101,164,172,176,179,181,182,183,195,512,513,514,515,554,561,1555],[101,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,255,553,554,556,561,865,867,869,871,873,875,877,879,881,883,887,889,891,893,895,897,899,901,903,905,907,908,909,911,913,915,917,919,921,923,925,927,929,931,932,934,936,938,940,942,944,946,973,1168,1187,1212,1223,1235,1247,1254,1276,1296,1320,1332,1343,1358,1376,1392,1404,1431,1555,1557,1558],[101,164,172,176,179,181,182,183,195,512,513,514,515,554,561,1557],[101,164,172,176,179,181,182,183,195,255,553,554,556,559,561,865,867,869,871,873,875,877,879,881,883,887,889,891,893,895,897,899,901,903,905,907,908,909,911,913,915,917,919,921,923,925,927,929,931,932,934,936,938,940,942,944,946,973,1168,1187,1212,1223,1235,1247,1254,1276,1296,1320,1332,1343,1358,1376,1392,1404,1431,1555,1557],[101,164,172,176,179,181,182,183,195,554,557,558,559,561,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,557,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1108,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1044,1108,1109,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1108,1110,1111,1112,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1108,1110,1111,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1021,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1349,1350,1351,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1349,1350,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1044,1349,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1017,1018,1020,1139,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1019,1083,1103,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1080,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1139,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1044,1139,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1139,1197,1198,1199,1200,1201,1202,1203,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1139,1197,1198,1199,1200,1201,1202,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1138,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1044,1139,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1068,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1034,1050,1068,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1053,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1018,1043,1044,1048,1068,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1034,1068,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1068,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1017,1068,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1034,1068,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1018,1049,1068,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1058,1068,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1034,1058,1068,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1032,1068,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1019,1043,1048,1049,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1031,1033,1034,1051,1054,1055,1056,1057,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1058,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1018,1031,1033,1034,1049,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1069,1073,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1017,1018,1020,1136,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1137,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1204,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1205,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1017,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1137,1139,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1016,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1019,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1052,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1074,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1044,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1083,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1075,1076,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1097,1098,1099,1101,1102,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1075,1076,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1097,1098,1099,1100,1101,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1044,1050,1074,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1073,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,1017,1018,1048,1077,1078,1079,1081,1082,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1077,1083,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1077,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1034,1043,1044,1048,1049,1050,1073,1083,1103,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1083,1096,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1077,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1082,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1083,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1126,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1135,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1100,1135,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1017,1018,1134,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1100,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1278,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1278,1279,1280,1281,1282,1284,1285,1286,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1278,1279,1280,1281,1282,1284,1285,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1020,1278,1283,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1018,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1020,1128,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1045,1046,1047,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1043,1044,1046,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1020,1044,1045,1049,1073,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1027,1073,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1039,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,1039,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1035,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1036,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1036,1037,1039,1040,1041,1042,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1038,1039,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1027,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1028,1029,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,614,777,1009,1011,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1005,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,778,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,614,777,1002,1555,1557],[101,164,172,176,179,181,182,183,195,547,554,561,1002,1003,1004,1007,1008,1013,1545,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1002,1004,1008,1012,1555,1557],[92,101,164,172,176,179,181,182,183,195,225,488,554,561,1002,1003,1545,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,954,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,955,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,956,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,790,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,787,788,789,790,791,794,795,796,797,798,799,800,801,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,783,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,793,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,787,788,789,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,787,788,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,790,791,793,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,788,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,785,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,784,1555,1557],[92,101,164,172,176,179,181,182,183,195,225,488,554,561,802,803,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1530,1531,1532,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1525,1526,1527,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1503,1504,1505,1506,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1469,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1469,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1469,1470,1471,1472,1517,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1507,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1502,1508,1509,1510,1511,1512,1513,1514,1515,1516,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1517,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1468,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1521,1523,1524,1542,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1521,1523,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1518,1521,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1528,1529,1533,1534,1539,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1522,1524,1534,1542,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1541,1542,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1518,1522,1524,1540,1541,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1522,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1520,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1520,1522,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1518,1519,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1535,1536,1537,1538,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1524,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1479,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1473,1480,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1499,1543,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,638,639,1555,1557],[101,161,162,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,163,164,172,176,179,181,182,183,195,554,561,1555,1557],[164,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,203,554,561,1555,1557],[101,164,165,170,172,175,176,179,181,182,183,185,195,200,212,554,561,1555,1557],[101,164,165,166,172,175,176,179,181,182,183,195,554,561,1555,1557],[101,164,167,172,176,179,181,182,183,195,213,554,561,1555,1557],[101,164,168,169,172,176,179,181,182,183,186,195,554,561,1555,1557],[101,164,169,172,176,179,181,182,183,195,200,209,554,561,1555,1557],[101,164,170,172,175,176,179,181,182,183,185,195,554,561,1555,1557],[101,163,164,171,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,173,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,174,175,176,179,181,182,183,195,554,561,1555,1557],[101,163,164,172,175,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,175,176,177,179,181,182,183,195,200,212,554,561,1555,1557],[101,164,172,175,176,177,179,181,182,183,195,200,203,554,561,1555,1557],[101,151,164,172,175,176,178,179,181,182,183,185,195,200,212,554,561,1555,1557],[101,164,172,175,176,178,179,181,182,183,185,195,200,209,212,554,561,1555,1557],[101,164,172,176,178,179,180,181,182,183,195,200,209,212,554,561,1555,1557],[99,100,101,102,103,104,105,106,107,108,109,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,554,561,1555,1557],[101,164,172,175,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,184,195,212,554,561,1555,1557],[101,164,172,175,176,179,181,182,183,185,195,200,554,561,1555,1557],[101,164,172,176,179,181,182,183,186,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,187,195,554,561,1555,1557],[101,164,172,175,176,179,181,182,183,190,195,554,561,1555,1557],[101,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,554,561,1555,1557],[101,164,172,176,179,181,182,183,192,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,193,195,554,561,1555,1557],[101,164,169,172,176,179,181,182,183,185,195,203,554,561,1555,1557],[101,164,172,175,176,179,181,182,183,195,196,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,197,213,216,554,561,1555,1557],[101,164,172,175,176,179,181,182,183,195,200,202,203,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,201,203,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,203,213,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,204,554,561,1555,1557],[101,161,164,172,176,179,181,182,183,195,200,206,212,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,200,205,554,561,1555,1557],[101,164,172,175,176,179,181,182,183,195,207,208,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,207,208,554,561,1555,1557],[101,164,169,172,176,179,181,182,183,185,195,200,209,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,210,554,561,1555,1557],[101,164,172,176,179,181,182,183,185,195,211,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,212,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,213,214,554,561,1555,1557],[101,164,169,172,176,179,181,182,183,195,214,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,200,215,554,561,1555,1557],[101,164,172,176,179,181,182,183,184,195,216,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,217,554,561,1555,1557],[101,164,167,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,169,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,213,554,561,1555,1557],[101,151,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,218,554,561,1555,1557],[101,164,172,176,179,181,182,183,190,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,208,554,561,1555,1557],[101,151,164,172,175,176,177,179,181,182,183,190,195,200,203,212,215,216,218,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,200,219,554,561,1555,1557],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,225,507,552,554,561,1555,1557],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,224,488,507,552,554,561,1555,1557],[92,96,101,164,172,176,179,181,182,183,195,221,222,224,225,507,552,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,225,488,489,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,225,488,554,561,1555,1557],[92,96,101,164,172,176,179,181,182,183,195,222,223,224,225,507,552,554,561,1555,1557],[92,96,101,164,172,176,179,181,182,183,195,221,223,224,225,507,552,554,561,1555,1557],[90,91,101,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,614,777,780,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,668,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,670,677,678,773,774,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,660,664,665,667,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,668,677,678,774,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,665,668,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,660,666,667,668,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,616,622,635,636,637,640,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,646,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,646,647,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,620,622,623,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,620,622,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,620,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,620,626,627,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,620,626,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,634,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,621,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,617,621,662,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,617,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,616,617,618,619,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,995,996,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,979,980,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,979,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,980,982,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,979,985,986,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,979,981,982,983,985,986,987,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,982,983,984,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,982,985,987,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,982,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,982,985,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,979,981,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,959,1023,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,959,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,655,656,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,655,656,657,658,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,655,657,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,655,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1366,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1366,1367,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,813,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,813,823,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,607,608,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,859,1555,1557],[101,164,172,176,178,179,181,182,183,195,220,554,561,859,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,850,857,1555,1557],[101,164,172,176,179,181,182,183,195,553,554,557,561,857,859,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,812,846,853,855,856,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,851,857,858,1555,1557],[101,164,172,176,179,181,182,183,195,553,554,557,561,854,859,1555,1557],[101,164,172,176,179,181,182,183,195,220,554,561,859,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,851,853,859,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,853,857,859,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,853,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,848,849,852,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,845,846,847,853,859,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,853,859,1105,1106,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,853,859,1555,1557],[101,164,172,176,179,181,182,183,195,510,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,512,513,514,515,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,458,521,522,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,230,231,233,245,269,384,395,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,264,265,266,268,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,401,403,405,406,408,503,505,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,267,304,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,231,233,244,245,251,257,262,383,384,385,394,503,505,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,246,265,285,380,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,226,240,246,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,412,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,409,410,412,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,409,411,503,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,285,482,500,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,356,359,375,380,500,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,328,500,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,388,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,387,388,389,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,387,554,561,1555,1557],[98,101,164,172,176,178,179,181,182,183,195,226,233,245,251,257,263,265,269,270,283,284,351,381,382,395,503,507,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,230,233,267,304,401,402,407,503,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,267,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,230,284,453,503,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,267,268,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,404,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,270,383,386,393,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,458,554,561,1555,1557],[101,164,172,176,179,181,182,183,193,195,240,255,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,255,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,325,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,246,255,458,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,311,325,326,537,544,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,310,538,539,540,541,543,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,361,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,361,362,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,244,246,313,314,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,320,321,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,315,323,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,320,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,238,246,313,314,315,316,317,318,319,320,323,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,313,320,321,322,324,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,314,316,317,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,314,316,319,321,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,542,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,234,531,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,267,302,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,267,395,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,300,305,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,301,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,967,1555,1557],[92,96,101,164,172,176,178,179,181,182,183,195,221,222,223,224,225,507,551,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,246,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,245,250,331,348,390,391,395,450,452,503,504,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,283,392,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,507,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,232,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,237,240,455,471,473,554,561,1555,1557],[101,164,172,176,179,181,182,183,193,195,240,455,470,471,472,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,464,465,466,467,468,469,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,466,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,470,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,255,419,420,422,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,246,413,414,415,416,421,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,419,421,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,417,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,418,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,301,509,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,508,509,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,348,349,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,349,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,504,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,378,554,561,1555,1557],[101,163,164,172,176,179,181,182,183,195,377,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,246,252,254,356,369,373,375,452,455,492,493,500,504,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,295,317,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,356,367,370,375,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,237,240,356,359,375,378,412,459,460,461,462,463,474,475,476,477,478,479,480,481,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,237,240,265,356,363,364,365,368,369,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,200,246,265,367,374,455,456,500,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,371,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,234,246,250,260,292,293,296,348,351,416,450,451,492,503,504,505,507,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,237,238,240,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,356,554,561,1555,1557],[101,163,164,172,176,179,181,182,183,195,265,292,293,350,351,352,353,354,355,504,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,375,554,561,1555,1557],[101,163,164,172,176,179,181,182,183,195,239,240,250,254,290,356,363,364,365,366,367,370,371,372,373,374,493,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,290,291,363,504,505,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,265,293,348,351,356,452,504,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,503,505,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,200,500,504,505,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,226,240,245,252,254,257,260,267,287,292,293,294,295,296,331,332,334,337,339,342,343,344,345,347,395,450,452,500,503,504,505,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,200,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,234,235,263,500,501,502,507,509,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,195,230,231,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,424,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,200,212,242,408,412,413,414,415,416,422,423,554,555,561,1555,1557],[101,164,172,176,179,181,182,183,193,195,212,226,240,242,254,257,293,332,337,347,348,401,428,429,430,436,439,440,450,452,500,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,257,263,270,283,293,351,503,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,212,234,245,254,293,434,500,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,454,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,424,437,438,447,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,500,503,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,353,493,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,254,292,395,509,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,232,337,397,401,430,436,439,442,500,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,270,283,401,443,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,233,294,395,445,503,505,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,212,416,503,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,267,294,395,396,397,406,424,444,446,503,554,561,1555,1557],[98,101,164,172,176,178,179,181,182,183,195,292,449,507,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,346,450,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,240,243,245,246,252,254,260,269,270,283,293,296,332,334,344,347,348,395,428,429,430,431,433,435,450,452,500,509,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,200,270,436,441,447,500,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,273,274,275,276,277,278,279,280,281,282,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,287,338,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,340,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,338,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,340,341,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,244,245,246,250,251,504,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,232,234,252,256,292,295,296,330,450,500,505,507,509,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,193,195,212,236,243,244,254,256,293,448,493,499,504,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,363,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,364,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,246,257,492,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,365,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,239,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,241,253,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,241,245,252,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,248,253,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,249,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,241,242,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,241,297,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,241,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,243,287,336,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,335,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,242,243,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,243,333,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,242,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,292,395,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,492,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,212,252,254,258,292,395,449,452,455,456,457,483,484,487,491,493,500,504,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,306,309,311,312,325,326,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,490,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,379,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,265,286,291,292,356,357,358,359,360,362,375,376,378,381,449,452,503,505,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,325,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,330,500,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,330,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,252,298,327,329,331,449,500,507,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,306,307,308,309,311,312,325,326,508,554,561,1555,1557],[98,101,164,172,176,178,179,181,182,183,193,195,212,241,242,254,260,292,293,296,395,447,448,450,500,503,504,507,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,237,240,247,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,291,293,425,428,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,291,426,494,495,496,497,498,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,287,503,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,290,375,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,289,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,291,344,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,288,290,503,554,561,1555,1557],[101,164,172,176,178,179,181,182,183,195,236,291,425,426,427,500,503,504,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,240,246,324,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,238,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,228,229,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,234,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,240,310,554,561,1555,1557],[92,98,101,164,172,176,179,181,182,183,195,292,296,507,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,234,531,532,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,305,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,193,195,212,232,299,301,303,304,509,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,267,504,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,240,432,554,561,1555,1557],[92,101,164,172,176,178,179,181,182,183,193,195,230,232,305,403,507,508,554,561,1555,1557],[92,101,164,172,176,179,181,182,183,195,221,222,223,224,225,507,552,554,561,1555,1557],[92,93,94,95,96,101,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,398,399,400,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,398,554,561,1555,1557],[92,96,101,164,172,176,178,179,180,181,182,183,193,195,220,221,222,223,224,225,226,232,260,265,442,470,505,506,509,552,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,517,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,519,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,523,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,968,1555,1557],[101,164,172,176,179,181,182,183,195,525,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,527,528,529,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,533,554,561,1555,1557],[97,101,164,172,176,179,181,182,183,195,511,516,518,520,524,526,530,534,536,546,547,549,553,554,555,556,561,1555,1557],[101,164,172,176,179,181,182,183,195,535,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,545,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,301,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,548,554,561,1555,1557],[101,163,164,172,176,179,181,182,183,195,291,425,426,428,494,495,497,498,550,552,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,220,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,675,1555,1557],[101,164,169,172,176,178,179,180,181,182,183,195,212,213,220,554,561,845,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,771,1555,1557],[101,164,165,172,176,179,181,182,183,195,200,554,561,679,680,757,770,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,772,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,602,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,600,602,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,591,599,600,601,603,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,589,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,592,597,602,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,588,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,592,593,596,597,598,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,592,593,594,596,597,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,589,590,591,592,593,597,598,599,601,602,603,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,587,589,590,591,592,593,594,596,597,598,599,600,601,602,603,604,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,587,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,592,594,595,597,598,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,596,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,597,598,602,605,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,590,600,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,792,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1010,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1009,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1368,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,989,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,988,989,990,991,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,573,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,565,567,573,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,566,567,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,567,573,577,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,566,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,567,573,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,565,566,567,572,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,565,567,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,566,567,579,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,568,569,570,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,571,1555,1557],[101,164,172,176,179,181,182,183,195,200,220,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,992,1555,1557],[101,164,165,172,176,179,181,182,183,186,195,200,203,554,561,993,994,997,1002,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,977,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,976,978,998,999,1002,1003,1545,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,993,1002,1003,1545,1555,1557],[92,101,164,172,176,179,181,182,183,195,554,561,1002,1003,1545,1555,1557],[101,164,165,172,175,176,179,181,182,183,186,195,200,203,220,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,976,978,1002,1003,1545,1555,1557],[101,164,169,172,176,179,181,182,183,195,554,561,1002,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1003,1457,1458,1467,1541,1542,1544,1555,1557],[92,101,164,172,176,178,179,181,182,183,185,195,554,561,974,975,976,978,994,998,1000,1001,1002,1003,1545,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1458,1463,1464,1466,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1459,1465,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1460,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1459,1460,1461,1463,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1459,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,1462,1555,1557],[101,116,119,122,123,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[101,119,164,172,176,179,181,182,183,195,200,212,554,561,1555,1557],[101,119,123,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,200,554,561,1555,1557],[101,113,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,117,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,115,116,119,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[101,164,172,176,179,181,182,183,185,195,209,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,220,554,561,1555,1557],[101,113,164,172,176,179,181,182,183,195,220,554,561,1555,1557],[101,115,119,164,172,176,179,181,182,183,185,195,212,554,561,1555,1557],[101,110,111,112,114,118,164,172,175,176,179,181,182,183,195,200,212,554,561,1555,1557],[101,119,128,136,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,111,117,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,119,145,146,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,111,114,119,164,172,176,179,181,182,183,195,203,212,220,554,561,1555,1557],[101,119,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,115,119,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[101,110,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,119,138,141,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,119,128,129,130,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,117,119,129,131,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,118,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,111,113,119,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,119,123,129,131,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,123,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,117,119,122,164,172,176,179,181,182,183,195,212,554,561,1555,1557],[101,111,115,119,128,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,119,138,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,131,164,172,176,179,181,182,183,195,554,561,1555,1557],[101,113,119,145,164,172,176,179,181,182,183,195,203,218,220,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,614,777,1006,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,562,1555,1557],[101,164,172,175,176,178,179,180,181,182,183,185,195,200,209,212,219,220,554,561,562,563,564,574,575,576,578,580,582,584,585,586,606,610,611,612,613,614,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,562,563,564,581,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,564,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,583,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,609,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,574,585,614,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,574,614,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,664,669,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,641,650,777,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,616,618,619,620,622,624,625,628,629,635,649,650,661,663,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,624,643,644,650,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,624,625,632,650,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,622,624,625,628,650,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,582,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,624,625,628,641,645,650,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,614,672,777,1555,1557],[101,164,167,172,176,179,181,182,183,195,200,554,561,614,615,620,622,624,625,628,629,632,633,641,642,645,648,649,650,661,670,671,774,777,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,582,624,625,628,650,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,624,643,644,645,650,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,582,624,629,630,631,650,1555,1557],[101,164,167,172,176,179,181,182,183,195,200,554,561,582,614,615,620,622,624,625,628,629,630,631,632,633,641,642,643,644,645,648,649,650,661,670,671,672,673,774,777,1555,1557],[101,164,167,172,176,179,181,182,183,195,200,554,561,582,614,615,620,622,624,625,628,629,630,631,632,633,641,642,643,644,645,648,649,650,661,670,671,672,774,777,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,582,615,620,622,624,625,628,629,630,631,632,633,635,641,643,644,645,648,650,651,652,653,654,659,1555,1557],[101,164,167,172,176,178,179,181,182,183,195,200,554,561,582,614,615,620,622,624,625,628,629,630,631,632,633,641,642,643,644,645,648,649,650,661,670,671,672,673,674,676,774,777,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,615,622,624,625,628,629,643,644,645,650,652,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,660,667,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,756,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,758,759,770,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,760,761,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,758,759,760,762,763,768,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,759,760,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,768,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,769,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,760,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,758,759,760,763,764,765,766,767,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,747,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,747,750,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,742,745,747,748,749,750,751,752,753,754,755,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,681,683,750,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,747,748,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,682,747,749,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,683,685,687,688,689,690,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,685,687,689,690,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,685,687,689,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,682,685,687,688,690,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,681,683,684,685,686,687,688,689,690,691,692,742,743,744,745,746,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,681,683,684,687,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,683,684,687,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,687,690,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,681,682,684,685,686,688,689,690,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,681,682,683,687,747,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,687,688,689,690,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,689,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,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,741,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1132,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1132,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,810,961,1025,1122,1125,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1160,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1160,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,809,810,961,1025,1122,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1161,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1161,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1162,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1162,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1165,1166,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,807,1165,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,809,810,1124,1125,1132,1160,1161,1162,1164,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1164,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,807,1164,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1025,1125,1163,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,807,810,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,809,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1168,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,809,810,863,1124,1125,1165,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1182,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1182,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,808,1122,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1183,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1183,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,808,1122,1131,1163,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1184,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1184,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1122,1131,1163,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1185,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1185,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1124,1166,1182,1183,1184,1185,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1187,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,863,1124,1182,1183,1184,1185,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1209,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1209,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1025,1122,1133,1207,1208,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1210,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1210,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1125,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1124,1166,1209,1210,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1212,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1209,1210,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1219,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1219,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,864,961,1025,1122,1131,1133,1159,1207,1218,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1220,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1220,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,864,1025,1122,1131,1133,1159,1207,1208,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1221,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1221,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1025,1122,1131,1133,1159,1207,1208,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,863,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1124,1125,1166,1219,1220,1221,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1223,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,864,1124,1125,1219,1220,1221,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,865,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,862,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,863,867,1555,1557],[101,164,172,176,179,181,182,183,195,255,553,554,561,863,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,871,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,869,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,863,873,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,875,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,877,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,881,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,879,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,887,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,889,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,891,1555,1557],[101,164,172,176,179,181,182,183,195,255,553,554,561,863,885,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,893,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,895,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,899,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,897,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,901,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,903,1555,1557],[101,164,172,176,179,181,182,183,195,255,553,554,561,863,886,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,907,908,909,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,905,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,915,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,913,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,911,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,919,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,917,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,921,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,923,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,925,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,927,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,929,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,931,932,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,934,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,936,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,938,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,883,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,940,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,863,942,1555,1557],[101,164,172,176,179,181,182,183,195,255,553,554,561,806,863,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,946,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,944,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1166,1232,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1232,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,961,1025,1122,1131,1231,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1166,1233,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1233,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,961,1025,1122,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,970,1014,1166,1231,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,970,1231,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,806,957,1025,1125,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1124,1125,1166,1232,1233,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1235,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1232,1233,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1249,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1249,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,536,546,554,561,806,961,1025,1122,1125,1133,1207,1208,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1250,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1250,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1122,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1252,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1252,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1122,1251,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1251,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1251,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,961,1025,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1124,1125,1166,1249,1250,1251,1252,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1254,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1249,1250,1251,1252,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1243,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1243,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1014,1166,1244,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1244,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1245,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1245,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,961,1025,1122,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1014,1124,1125,1166,1243,1244,1245,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1247,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1243,1244,1245,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1290,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1290,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1122,1130,1289,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1289,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1289,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,806,1025,1122,1125,1133,1207,1288,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1294,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1124,1125,1290,1291,1292,1293,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1291,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1291,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1122,1130,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1292,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1292,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1293,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1293,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,961,1025,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1294,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1296,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1294,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1271,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1271,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1025,1122,1133,1207,1208,1270,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1274,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1124,1125,1271,1272,1273,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1272,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1272,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,961,1025,1122,1125,1131,1133,1159,1270,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1273,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1273,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1025,1122,1125,1131,1133,1207,1208,1270,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,948,1014,1166,1316,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,948,1316,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,948,1025,1122,1130,1131,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1317,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1317,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1318,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1318,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1122,1125,1130,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,948,1014,1124,1125,1166,1316,1317,1318,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1320,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,948,1124,1125,1316,1317,1318,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1274,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1276,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1274,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1328,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1328,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1329,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1329,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,949,961,1025,1122,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1330,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1330,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,949,961,1025,1122,1130,1131,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1124,1125,1166,1328,1329,1330,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1332,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,949,1124,1125,1328,1329,1330,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1340,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1340,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,961,1025,1122,1130,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1341,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1341,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1122,1125,1340,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1343,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,859,862,863,1341,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,557,561,961,969,970,972,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1354,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1354,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,1025,1107,1125,1133,1207,1353,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1356,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1356,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,1120,1122,1354,1355,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1355,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1355,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1025,1107,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1358,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1356,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1370,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1370,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,1122,1125,1369,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1371,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1371,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1025,1115,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1372,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1372,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,1025,1122,1133,1207,1208,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,807,957,1375,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,953,957,1125,1373,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1373,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1373,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1125,1370,1371,1372,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1124,1166,1373,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1376,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1375,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1387,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1387,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,961,1025,1122,1125,1130,1218,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1390,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1390,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,961,1025,1122,1124,1125,1387,1389,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1389,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1389,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1025,1122,1133,1159,1388,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1401,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1401,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,961,1025,1122,1133,1159,1207,1400,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1402,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1402,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1124,1125,1401,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1404,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1402,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1392,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1390,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1412,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1412,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,950,961,1025,1122,1131,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1410,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1410,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,950,961,1025,1122,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1413,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1413,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,950,1124,1125,1410,1411,1412,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1411,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1411,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1415,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1124,1125,1413,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1425,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1425,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,961,1122,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1426,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1426,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,951,961,1025,1122,1125,1131,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1427,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1427,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,951,961,1025,1122,1133,1159,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1166,1429,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1429,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,1124,1125,1425,1426,1427,1428,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1428,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1428,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,807,951,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1431,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,951,1124,1125,1429,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,1014,1166,1218,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1218,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,1015,1025,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1131,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1131,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1024,1130,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1026,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1026,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1015,1025,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1115,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1115,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,961,1114,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1121,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1121,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1026,1118,1120,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1123,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1123,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,961,1122,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,807,1014,1122,1124,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1124,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,1121,1123,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1104,1116,1166,1545,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1104,1116,1555,1557],[101,164,172,176,179,181,182,183,195,255,536,554,561,961,1025,1104,1107,1115,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1014,1104,1117,1166,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1104,1117,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,1104,1115,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,953,957,1014,1118,1166,1545,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,970,1118,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,953,957,1104,1116,1117,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1024,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1113,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,961,1024,1127,1129,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,961,1022,1024,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,961,1015,1352,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1015,1103,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1206,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,961,1015,1158,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,961,1119,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,961,1287,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,862,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,809,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,957,958,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,808,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,859,862,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,852,859,860,861,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,806,957,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,959,960,1555,1557],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,957,970,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,957,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,972,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1555,1557],[101,164,172,176,179,181,182,183,195,554,1555,1557],[101,164,172,176,179,181,182,183,187,195,212,255,554,561,774,778,779,781,1555,1557],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1555,1557],[101,164,172,176,179,181,182,183,195,554,561,774,1555,1557]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"d828ff531a832da354516464c5e25ca4970561f97ed02c77cb02d91aec4e80a6","affectsGlobalScope":true},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651","68937fe95088ffe97ac986edf4dcfb88cfe71df2e67db91ba03ee165779dedd7",{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","impliedFormat":99},{"version":"51d2ffea2d1ee4a81c775938588c1e16620281adb60cbc26579a2fc6baa10bd2","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"a413e4b0b99280e1e58f5fe7b2b585e8a9be4996df8c58585399c9e2ca8a683e","impliedFormat":99},{"version":"609ab2c225766bc0851251c1db0fd5492673e190074045d21dc5dc7c3c46d785","impliedFormat":99},{"version":"c074e054c9db79055d37d7d70131e9a3234b8186773b3edb617c13f80bcf8774","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"7f3857dc5cfe1e5e977edb14e931d9939a952e8e41997263a927f8f0299ea652","impliedFormat":99},{"version":"3559624d0102d10d7765c292c60ccbc229541534db32061e06df88bfe1064636","impliedFormat":99},{"version":"5a9834c603c65aee5cba0c1d6b3c7aee85cdc7862832a23165c6aa4139c165f2","impliedFormat":99},{"version":"a7d7b5fa83cd7b3b4c2aa73bc29e7cbd53d5690b74f6fb39a5558af0a94967ba","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"f093d4bd6a9267be5f8ecbfbca19f4f3359b3839883206150c5d833606569e84","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"4a13397dffad4475c45c70fde584c925fe8c9218b3c7ab94397b68fc434f63b6","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","impliedFormat":99},{"version":"2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","impliedFormat":99},{"version":"7cd92bc6808967f175063fce65f8d1d60a07d752b79ed20aa2eba9a2b8ed0820","impliedFormat":99},{"version":"59de9e07114b1da6421bf15359a951f1b762cb19c3a6abfc2e671a5ac2599dff","impliedFormat":99},{"version":"84e977ab810a75dc103b38cad1e019d3ab8f4ec9042b8f09f117b7d18c4076f0","impliedFormat":99},{"version":"9b98988fc27cbf7f08598871f275999540bcc267a8a47453866a198f93601959","impliedFormat":99},{"version":"2b1795d67cf9aa20167c72d795d4db6badea9cea646d9181869b5ca08c778479","impliedFormat":99},{"version":"860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","impliedFormat":99},{"version":"7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","impliedFormat":99},{"version":"07ad8a597ac75084e3dd9f9fadf5e8d7ccdcfe2f0c94ea0cf1cd8aa027a6c46e","impliedFormat":99},{"version":"94ddb4a2bb0c69e8efea22c58c2b6f84017eba469a4e433f5396ea8619d051cb","impliedFormat":99},{"version":"e903e44f2e300eea6d162c5481ef5cef28e18c3c7e165740090a65be6c80f437","impliedFormat":99},{"version":"632711a108accd4533a327ac3b60d0518fa536dfdc2d9e146222c16aa348506e","impliedFormat":99},{"version":"81b5530dfc39e1946dd771dd5526b84710e11d6a371812b1dc2e8eef9e12aa61","impliedFormat":99},{"version":"50230eca200a864bc52fd87a82c6085f1bcac19bf9865d98c3ec1d9b5672c118","impliedFormat":99},{"version":"cd71a7eb14e09b7962e8955c6b0376be99044d814e7d60d7d1e9d095716b89f3","impliedFormat":99},{"version":"e08660f21d0e8b367414e78706ae69a19b078fb67b0fe8c818ccaeeeedc00272","impliedFormat":1},{"version":"32727845ab5bd8a9ef3e4844c567c09f6d418fcf0f90d381c00652a6f23e7f6e","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"82919acbb38870fcf5786ec1292f0f5afe490f9b3060123e48675831bd947192","impliedFormat":1},{"version":"e222701788ec77bd57c28facbbd142eadf5c749a74d586bc2f317db7e33544b1","impliedFormat":1},{"version":"09154713fae0ed7befacdad783e5bd1970c06fc41a5f866f7f933b96312ce764","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"a91c8d28d10fee7fe717ddf3743f287b68770c813c98f796b6e38d5d164bd459","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"a270a1a893d1aee5a3c1c8c276cd2778aa970a2741ee2ccf29cc3210d7da80f5","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"ed8763205f02fb65e84eff7432155258df7f93b7d938f01785cb447d043d53f3","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"36eb5babc665b890786550d4a8cb20ef7105673a6d5551fbdd7012877bb26942","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"8324f3861a7a8db0f9d294f6a189182b2d231840cebb7f3ea5f4635773cdaf41","impliedFormat":1},{"version":"7a8ec10b0834eb7183e4bfcd929838ac77583828e343211bb73676d1e47f6f01","impliedFormat":1},{"version":"b07f64ff6ec710998a62b07377fbda0ab4c313ba1f0055bfe9faa22cffedd47c","impliedFormat":1},{"version":"72ef861333c7870a29fc0e248129c4afc0741c0716a74c3da409d05e41ff1322","impliedFormat":99},"49641a5eaa0ab31c12d312d53b724213afccbbbcc8e43a1119479d5e71858e61",{"version":"168aa44771e55cda628eeb5fbb6f626f6f263d827967b119e8c06abd7f1362ec","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"064499a671b662b25675beccdd04fb0bdebb6bd49bdb90d448e4b1ce3db20526","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"54460343eae2288e42a041a096da60709dc8150684cb79679770b68a46a33601","impliedFormat":99},{"version":"2faebfa830ae4cfbfb58e48b0ec20a2a63882d776f0ca36ec7155d45cf1b7f2d","impliedFormat":99},{"version":"b478fad6cb2c66bfbfc027983240b416a7733013f878056ba92cf809020018a0","impliedFormat":99},{"version":"10a7c14e787e6b77f7079b80a8013f8349b37d115673f59bb7d5c17616df4e09","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"ad763fa0c24ede2b818eb6598c12dd581451f94688fb9ed963beba20d513a7ec","signature":"90ec9100c29e008c3d9194acd818e2cfa6dc6e177154bc8e10c5959aa35619ed"},{"version":"46fbec06cd7fe845803db91db5a9bf5b2aa8c369d58546fd01af3846e7862be5","signature":"6c1a92ef7e824a897b9a0b64e42cefce8d9d68df35769f9c37df64ded70b9b6b"},{"version":"32ffc97bd9635972ee63e77eff2ef2839aeb2e842822a492136d822f70681655","signature":"83eb632f831cb93e76e3e2cc7d8f4917d3893481ce5a15751bd0685330881ad9"},{"version":"0f55b5907842f16784dca83f2c82ac05e1e8740f2ec866c95289e05061384e4b","signature":"93bf045e7f996840ff1a3e1fa340836585224d394c52de4e98ff79f8be816dd1"},{"version":"7c8545a7c4ec6978ebb4af07475d76007eb084c4f7f45aeba7ee817eeb4316e1","signature":"37eeb4730a8634d70c51bd1933939e66cba31f30600246487f3568cee7742b9c"},{"version":"e367b9ac0e658790fdd74353cfcc2690e2b8a7ac33480b93620e258582587dcd","signature":"c7ebc7a24a51984ec8231424b974dbbacc456090c53301dd1d8502ed95083a1b"},"4dc9f132f712688baa75a3908249bf99d19c99dde90b8b015eb52c06814a0b0a",{"version":"b7ca2f47522d4ea41e65ff92c4c6dd9c4c8260da7c456a7631a9c88dc056b4d0","impliedFormat":1},{"version":"4f01e4d0959f9125b89e5737eb1ca2bfa69fd6b7d6126eba22feb8b505b00cde","impliedFormat":1},{"version":"4363a1adb9c77f2ed1ca383a41fbab1afadd35d485c018b2f84e834edde6a2c7","impliedFormat":1},{"version":"1d6458533adb99938d041a93e73c51d6c00e65f84724e9585e3cc8940b25523f","impliedFormat":1},{"version":"b0878fbd194bdc4d49fc9c42bfeeb25650842fe1412c88e283dc80854b019768","impliedFormat":1},{"version":"a892ea0b88d9d19281e99d61baba3155200acced679b8af290f86f695b589b16","impliedFormat":1},{"version":"03b42e83b3bcdf5973d28641d72b81979e3ce200318e4b46feb8347a1828cd5d","impliedFormat":1},{"version":"8a3d57426cd8fb0d59f6ca86f62e05dde8bfd769de3ba45a1a4b2265d84bac5a","impliedFormat":1},{"version":"afc6e1f323b476fdf274e61dab70f26550a1be2353e061ab34e6eed180d349b6","impliedFormat":1},{"version":"7c14483430d839976481fe42e26207f5092f797e1a4190823086f02cd09c113c","impliedFormat":1},{"version":"828a3bea78921789cbd015e968b5b09b671f19b1c14c4bbf3490b58fbf7d6841","impliedFormat":1},{"version":"69759c42e48938a714ee2f002fe5679a7ab56f0b5f29d571e4c31a5398d038fe","impliedFormat":1},{"version":"6e5e666fa6adeb60774b576084eeff65181a40443166f0a46ae9ba0829300fcb","impliedFormat":1},{"version":"1a4d43bdc0f2e240395fd204e597349411c1141dd08f5114c37d6268c3c9d577","impliedFormat":1},{"version":"874e58f8d945c7ac25599128a40ec9615aa67546e91ca12cbf12f97f6baf54ff","impliedFormat":1},{"version":"da2627da8d01662eb137ccd84af7ffa8c94cf2b2547d4970f17802324e54defc","impliedFormat":1},{"version":"07af06b740c01ed0473ebdd3f2911c8e4f5ebf4094291d31db7c1ab24ff559aa","impliedFormat":1},{"version":"ba1450574b1962fcf595fc53362b4d684c76603da5f45b44bc4c7eeed5de045b","impliedFormat":1},{"version":"b7903668ee9558d758c64c15d66a89ed328fee5ac629b2077415f0b6ca2f41bc","impliedFormat":1},{"version":"c7628425ee3076c4530b4074f7d48f012577a59f5ddade39cea236d6405c36ba","impliedFormat":1},{"version":"28c8aff998cc623ab0864a26e2eb1a31da8eb04e59f31fa80f02ec78eb225bcd","impliedFormat":1},{"version":"78d542989bdf7b6ba5410d5a884c0ab5ec54aa9ce46916d34267f885fcf65270","impliedFormat":1},{"version":"4d95060af2775a3a86db5ab47ca7a0ed146d1f6f13e71d96f7ac3b321718a832","impliedFormat":1},{"version":"6708cd298541a89c2abf66cceffc6c661f8ee31c013f98ddb58d2ec4407d0876","impliedFormat":1},{"version":"2e90928c29c445563409d89a834662c2ba6a660204fb3d4dc181914e77f8e29d","impliedFormat":1},{"version":"84be1b8b8011c2aab613901b83309d017d57f6e1c2450dfda11f7b107953286a","impliedFormat":1},{"version":"d7af890ef486b4734d206a66b215ebc09f6743b7fb2f3c79f2fb8716d1912d27","impliedFormat":1},{"version":"7e82c1d070c866eaf448ac7f820403d4e1b86112de582901178906317efc35ad","impliedFormat":1},{"version":"c5c4f547338457f4e8e2bec09f661af14ee6e157c7dc711ccca321ab476dbc6d","impliedFormat":1},{"version":"223e233cb645b44fa058320425293e68c5c00744920fc31f55f7df37b32f11ad","impliedFormat":1},{"version":"1394fe4da1ab8ab3ea2f2b0fcbfd7ccbb8f65f5581f98d10b037c91194141b03","impliedFormat":1},{"version":"086d9e59a579981bdf4f3bfa6e8e893570e5005f7219292bf7d90c153066cdfc","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"cd66a32437a555f7eb63490509a038d1122467f77fe7a114986186d156363215","impliedFormat":1},{"version":"f53d243499acfacc46e882bbf0bf1ae93ecea350e6c22066a062520b94055e47","impliedFormat":1},{"version":"65522e30a02d2720811b11b658c976bff99b553436d99bafd80944acba5b33b4","impliedFormat":1},{"version":"76b3244ec0b2f5b09b4ebf0c7419260813820f128d2b592b07ea59622038e45c","impliedFormat":1},{"version":"66eb7e876b49beff61e33f746f87b6e586382b49f3de21d54d41313aadb27ee6","impliedFormat":1},{"version":"69e8dc4b276b4d431f5517cd6507f209669691c9fb2f97933e7dbd5619fd07b7","impliedFormat":1},{"version":"361a647c06cec2e7437fa5d7cdf07a0dcce3247d93fbf3b6de1dc75139ff5700","impliedFormat":1},{"version":"fe5726291be816d0c89213057cd0c411bb9e39e315ed7e1987adc873f0e26856","impliedFormat":1},{"version":"1b76990de23762eb038e8d80b3f9c810974a7ed2335caa97262c5b752760f11a","impliedFormat":1},{"version":"5e050e05fe99cd06f2d4ad70e73aa4a72961d0df99525e9cad4a78fa588f387b","impliedFormat":1},{"version":"4ff327e8b16da9d54347b548f85675e35a1dc1076f2c22b2858e276771010dd2","impliedFormat":1},{"version":"f767787945b5c51c0c488f50b3b3aeb2804dfd2ddafcb61125d8d8857c339f5a","impliedFormat":1},{"version":"14ab21a9aeff5710d1d1262459a6d49fb42bed835aa0f4cfc36b75aa36faddcd","impliedFormat":1},{"version":"ba3c4682491b477c63716864a035b2cfdd727e64ec3a61f2ca0c9af3c0116cfd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b222d32836d745e1e021bb10f6a0f4a562dd42206203060a8539a6b9f16523f0","impliedFormat":1},{"version":"a3f6d8995864820a0207b7ef4ce1ed6a8dd2fccc7e70d015da15034807c38e1c","impliedFormat":1},{"version":"651df11341eff0b769fb83af75b1872e6cedf406674c5eaa2650551aceb5a816","impliedFormat":1},{"version":"774a466295d26eddab911b9f567040364e7b7d0eb8003ad3bfc92b97eeecf066","signature":"f15b4a91c10bf30ff3708a5e3968c0a52ca4e86a4b9a5b1c4fc8e9b5f1292f21"},{"version":"16992ee74b4badfbf4ca9f7833b1db0850d0b1f10ea546376b5946bba6ab8401","signature":"29f8c555f5371153c1c3ec0d64235c1650b52cec47431ec93b6c629b994a10a8"},{"version":"5cb9b60c0f0e1b1a68b59d1cb63a26bb40695eb40aef31c8d6afd2bbb7150641","signature":"f8da50cd80c40c61a7cccdcb36106cb8221bd19d4525d30d75575526310f35c2"},{"version":"1e9d4c3b066e0228765cef074a9bf49d0b8d3af461c97f2c511e8f7110b56235","signature":"e59faabf094dd75dcf08847ca1b8ae16daf269ca02c744c521b38ed5d297578c"},{"version":"9e8f19cd697c9fdfeadb3559f0ca26514075f7054ae1ba17e8fbc8684d12eb5a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9dfe98d745dfc706198852e032c3c936092a4484951872c0d18639cf2ab698cf","signature":"326009db2b0a0f3290cbde2271f91e51869148a3e286ccc3ac41559f6c830642"},{"version":"44310bdd7b563dd9b2df0e1b0c45a789492e6620b4718778fca88e029f1765f5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"030523c514236148e0f25975ef74b2490c391cb9596cd668728f7db5b0702e08","signature":"411166ca21d7ae80b737bb1c7e9900e897ac7b27c06647063730ba8207522e46"},{"version":"4109b1fb0cffaf1f2bcaaecb49378d7971b795502484bc2dbe0d4deae60c8057","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ca52a606c31ddaae5f7c4055fccb3563cf7e85601c96dbf28b7d0795d2d21af0","signature":"82d82e5e9d2c282a1dddebbcc73d9ff5c89f60859cd8769d0f6eae7b76f3f4d1"},{"version":"edadad7db67a0db1a7d474ab075cc15b975d78780218a1860e14516208d7389c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"78b3214dba4e86c41e4cdf5de5dcc853806ff74fad5df3dc1087cdbe19ad00e0","signature":"5c4de1b33c2b0c5b0b823fca5ba9e5dde3c995aa8a2c42db12b2e8b64f408805"},{"version":"37702123f9a2c93d39aeeec210394811ee157b6e32b600c5e083d271370f7733","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"45b82fd88270dd3d0aff39220b341eca789f77c82813dc6695b2058479d8dc28","signature":"3d67e5bdef7b1039301b51fc5ba5303c133b863f30e0de39c8aa1db5d897f1b6"},{"version":"15631c00468c358645d55b6267edf935ab0e94dea8748d619ae23a76f7388912","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f212078a0ecefabbbbc627b89e28c871b559c1c57a4dcae32c8d7c2b6c4f0a00","signature":"b495b6770d46b4ebe3dbe0c1f6d64e8b50ea14ea8d2b63377813ae35672a4535"},{"version":"ec4e1ceba158e76dce8afd51f6b13caa6b67fe8e9d0c0686448b77fb76586adf","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"cadbf01db107d2e9cceb5ecdd3f8f0084d996f07f2fca714409247deb26f0b85","signature":"ed905f29ff05cd1d3cf260949314ca896356f5c8bc011fdee9d75cde0404c6a0"},{"version":"a1d1b662c8d1e1d8a20612adb2c4cecd718f3b0e57d283cad95afbee8a61d132","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ea7a4796f350344bbf39b19518d78169bd66a819f787b0a4d1a6ad642dbce7a2","signature":"8f6ef9414b1d23dc0a927160ed27770f93c1fe749a9af0e626f5a0e8918d5fc1"},{"version":"1941ed0a7c9ff9106612c8fcc6ce92f24d656769a5d739599e4a6c34ad478df0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"cc5bfa36a8f86eea23a84b78f27ba0f842426cefb5a13d4b53b80a331aaaa268","signature":"3dcde6c75b6c7fc3bc7fca2ca1273467974a8b54061edd648ed854bc4c5d842a"},{"version":"246ed9157ed5791bffc9037a1aa2a1b709a0fc75e67102d13e71d899dbbb5e0a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"27494de6a730122abf7b860cc02bf6ce805359bdcdf09095d6e9c9c63418aba2","signature":"959594ee2bcc74404b29a3049c85d0c7f2ae48df7e2b725160708a4a725fda88"},{"version":"5c7afbe31fb1e68671c798cfc06221cbade2f174e243566cf5b8fd0763e4ed52","signature":"233c0355b5b37601f3d2cb2fb9b35829c28220fbf3acc7314eb1d67509c3a2ce"},{"version":"433609291756b990304a258d06f4cf73d1a677643a8053d3a99fb435c668a4bd","signature":"9b3d204f4e4f901d253d5847771729af0cb7c39742f7be0ad468623b34612284"},{"version":"8062a9596b370d008b1cd13429487a2ed9d35b28dca9a0f0aa78609fd0a96f9d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fcc8fb0967eda9256921f3cfc521d49f3d473232d4c754c09de1d50faa996e35","signature":"37e053a2b54ed97cab1c0e0e6a0ed4d610d6011b24e4cef7633007fb573468e1"},{"version":"b28e8eddf4e5bc7659dd8369e31a71ee482d55ecfa6b84831fcc80228518b701","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"21382d3d9886a24696afabde6ba98ac0f2caedc6e62d848be109d4e2025bbf80","signature":"1cb1eafc264cf66f6de9548387f23915f3ae8d9c9d09a61e2fb253f96bac2397"},{"version":"1b04df451640794168e4fffb092f9823a6694c11d3daf55b4994f847a2987322","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fac17c78b79e957a330460096e2c511a77d7c22835a137659c599427ee68fb5e","signature":"c9b3903dbe7bb883044f93988644ad26177b48141ba87185d1961e89dcbe12e1"},{"version":"662d45c385c6903b15921917388cbcbf6fe34fa1720ab9c073e628496af5e56d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"50fd5c95036fcdd7101e2cdd2a336fe0d11b9cbfdcbd474d74a917c355ebc7ea","signature":"fc1013b6b18ebb6c273407c0999e92a60c29dd73779f14f7177a2635eb2cfceb"},{"version":"72121c537d221078e87c97dab842628674750a9d6aa2cf1b6166cfa664ed7382","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ef6f6d882e73aeae8a7cce4a2492cbf0e4829fc963e79312e443a7a16a6cfb3f","signature":"3ef82075343927dd481ff965c2af0f6ed87106013a8e27638a4df73e242a6592"},{"version":"c8d012f3fdd6a52336f10bec7e4509ea2dbb0ed1f2e996eac4b1eede14f9f88d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7f59d410bcaf6b219caf38e6e9a39866eabbcc1106f74ad50c914e7e40cb4a24","signature":"0df22e821771646f47f81523421585e601758795cd91a75d41f4979d1f4519de"},{"version":"c71ae4fc28d6b2f5b78a95af5335129851cac857d19b25d5f06c8b014d3feea4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6bbcb670c4632ba69c7910572999840ac47a10cb49a1c437c5a52a40cbcdf10b","signature":"7df0381f3f4101bc88fad9da0c420421e97430cef4742bb04cbf41cdadb1da6f"},{"version":"8b59281611e7ebf3a35207733d85f8b50a33cdb5d08492334db32622e0cd3212","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"044b593c01d82184a7e0fb5c2ac98447d44ae217f1405f239c3e1e62ae379abd","signature":"922164a6b539bf53726ce54aac6bce9f648e478e5708604f3987fac02099f050"},{"version":"ab88aa6a3eb5f4f91c1a097e6b6002d35bb3b7517e1ce49c742a96d203758de2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1008e6f116f8169e368d70feccb510f8400b9fb204a699cd25cfeee835c88cc6","signature":"b0a0d651b6a03d5b1ef718277284d2b4a765def58e205311d2f1b825eea30c64"},{"version":"4455c74ed4fddb9ae9ba8eb37188fa934b6cf7fcd005053ddfb7dae7e5a6f072","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3eb6dafdd02c962b39b09be9e31c695603b58c794e141d4eed2f49318f0af433","signature":"1b21d73c687df72e347c8f38b456988260af0b5423ac03d9aa92966719676d87"},{"version":"9b44504aab0385b4934bf502c8c06a5540c50a0090a34f4c2fb50e43e03f5505","signature":"eb8914c7f3c2b49544d286aff55eba63c69d013385296fb3ad07e586e76000be"},{"version":"1f08dcb29ad688246447d04e3b7e2d5dcf65311c36c09db4bce1bca316f0201c","signature":"35ad6df8b0834debb0585c63d2bb84bb81802a7a0424a8f4ce6b0acb0513619f"},{"version":"61cb83a110e7a89d2ad5a0a4bd91fadb619619a98a16437189a856b51e1e9e0d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a794572bfb0885ec1de20b701e498a415c0480e4fb6c20dbaa125b374ae691cb","signature":"46d3c81ba82aaaeabab3baa813cbb84b4c9808ec7ad495ad5fdc27d9358aa314"},{"version":"1b5be2e53f79f1f20967a235c011841152b2ca9f79b3b0640468ba8a8cf5cd7c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"016e4353e0414c98c2ed2eb75df1509a38b457ddf000e9ff98125f82ea42c335","signature":"767c0245753b6e027a6f0550eb7b69bbd09d3f758aa1e9a07dcfe0992c0f629e"},{"version":"f76cdd7b076354cf26a7414ce5ebcef0a2a3384fdb6e406d4976c522349b6c93","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3ef6579bdd5883302539b5370c5670331f3584dff9e2ef14bab39991f00a29cb","signature":"1e894cd9840e407527a3f67119371f90d7ae5f8179905de7776a345ed4af6d32"},{"version":"325d7dc15c789cc6358327f36e7cf2a916e969017c2b78decf9475af91dc86c3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3b642738f6cd019494d207949a63b67b6ad9013bb3f1fb5f8fa36687879db5c4","signature":"f583f64899de9c7804febba31f2808aad09101b0d3342e42793c8588ed608f63"},{"version":"492bb2bed9c43e010cd0a50263969a75a72c6279f67654a6bb7def1a9cf74571","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"35a644763f50424937b17109eb552ddc767270a5526a0a827810ab86585dc53a","signature":"1b4159a10366adf4fd777a6bd595b4b846f1d3d37d07498c3498fd4b71e0f813"},{"version":"2e8ff3406c54b9e6ab83cde71a8e02eec9796f58626bfb39825d11e4e03d8bbb","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"eac3a35ef0fe0ab083e8cf36a29a821e014dce98f56d597ed2dd815ff4cace46","signature":"7a79bbeb7030ac58672abb37f4776cade6988cd7cf9a535cffd548658d85f1bc"},{"version":"628364563c513db63865187fbf6afd635d3dc6cdbb8472e639a2c60fc3c13b86","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c39c138e6eafd63689438247533cbd792f2487cfccf0ae812f9cde3087d5c1b8","signature":"2a88f7e64f6f67e4eb7770b1678fc459b8ddb3bed0cb40734c9c257313affd02"},{"version":"dd81cddda6088f01807ea61dcc81cb09805f09cd222c1cdc07783262cea74cd9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c81045d6db59c1c83c84797bc1f78422a691ced9ca9a3554e2f8ef9aacc7dcfa","signature":"441f2bb4f78eb9fb86d27aceee4d92908b532110aa6b7fac80adede58bab926d"},{"version":"0496434a31fc8cf9e490e135e87ec3202dd0298290fcffbfbe4d93b3c180756d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bce05280900b4eb3333d10064531569c9fcfce6aa7aeca1ca03b2120539892a5","signature":"c96264be178c5e42597043c462b21cbc073618f43d5e1e88bd32a516068a2380"},{"version":"13c1ff47b7b02fad7d84109dc37613ba445a7a084561485dc9aef335c4c94a84","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f5a22523635ca6f47c20b386b010ca1258aa19af5f4299f8752809c599315bcf","signature":"48c3a71b54800c134fcff4becfedca8347ff86645e004f8754d1e2b1385d1e9c"},{"version":"4895c3e936eb6d99b94541c611983585d9b5d805ff5a83b8f710e27f52dbafed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4f8f48136b4a2c472edf03e168e658ac758173fb38773f7849009ee0b39a81e5","signature":"d5b2231a838d0dbe8d3c0076afbb7e0544b2e318632b638adfe8c5743ddab6e2"},{"version":"cb12e3fd9be59bf0e28d6f18ebecbb52f8bd90258cf6dd2af77f7b12545a45bf","signature":"ff15a056114c88b5f7e043ca0ba2cc2a62b4154e462c09a965df6cbb91cfa4b6"},{"version":"1bbd283b943af0cce0c72cde1e843e55093235b7dd3fa7d22dbe957039c0ec76","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4f69209ce0e934946c859c4cc6248ef4a2dc528f5baf9b4fcdea5cf3e08d9d38","signature":"e8f8aa08e63443a0cc63ce2f9fc9582addd622528fad2ecfc413b2a91c688fac"},{"version":"b1a319734a490e072da3cdb0e53c3d90aa63250323e29ef7d7d554acf5a174d1","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8e79adf7f7c76bf3874257d3692b76744e5a6784c91cd27f93c30a8a5cc842eb","signature":"2c6835a2dd6319674e4b339215c071bf5896757157ae471324b1bd95868a5285"},{"version":"117c70fd7a19a5369ac35034f89ab731c6f6629d791e35334fb307b7042f89a7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ad15d915012090304670ff62dd5e48d7694c11787f4884f51cf80f873dd40aa4","signature":"ef3c092bb7ed970d2273e55a61b12bc4741bca2219e1fe703350550c99ca6f42"},{"version":"38786de27bad4d667abb5f948b2357fce8de7448a52feb500965735a5f3a5a6e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fb5ce2f104fde415289b4febf27da970e40afefe42b87b15db28818ca9f94132","signature":"ccefe690307d556c5e44dd7ffb7d23faa0a3388926925ed0352107cd2efc4d9c"},{"version":"cb504109f1c6b549fde2eed46b44eaedb73ee7754b3f3a1c1c32bc5dd1693a8c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3613723853e81414c2e1220e3e0a696a997cc49e4390060b6ac7fd91aec150e4","signature":"0334a8b41901a52fc9195c66c97cee6aaaecc5aae79b9fc31f245a5df48b3ecc"},{"version":"d63995951dabffa413e3114fc0d39108a1c183939ef54616a8019d6061ad0651","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"082900437524e8bc6903f0d26479f590af1814cc5080fc502e07d38c951500be","signature":"24564adc2074d75d218bfe8b711580df8848afbd3ce2890184cd98e76529d387"},{"version":"1bbff9fec02470dc8837722310fbcb7de786f75d442f3e3116a291dba247caaf","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"34eb44fd7813a487540b6afa04da3175388b1841aa3612569e8aa07652363b69","signature":"9bada675e959a3571ad60f30eaee87c92b05fea94beca1f7fd212dc65734177a"},{"version":"fb371cac529d70b2eb453e41a785acab5429502dbc8655db1bd8ad27e0808825","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e3e8f1e18650180be1e59088b3901acf043464a271aa47bb39cf38a25276d817","signature":"b7413fd54558e031b6420ceb9db9ca01c5da8fda68e3d1ef2bc0eebf6f2e5a94"},{"version":"bbde6d00697f97a01889e162035d81a4be294c37a7927777de0602fefe2c37d2","signature":"6bbfc87823c7147744279311f07f07e119a162844e380b5ee7cfbfb7fc9c6273"},{"version":"72410786e409bab518e57d12293981fc0283f9ce75d26adc7d6549d4ae4e5bae","signature":"a9779efd000ab950e2097f789266a26af006c56a54d7bac966f2162262d4bbc7"},{"version":"ea59bbe42fed61608416b742d658176dbe73437bca7f46cec55df5abcc24a82f","signature":"cf4519b131be7adbfefddb180ea2e0a1f5d2f520954d1acc4646aa4dedcc0eb0"},"2667aad7a3d60d3201c46cc5a53be1315e4c0d290f148effe2c073d94b541122",{"version":"852c367110c2934ed35a33ad276111aa9b3016ec92b36b86a37b43642ad9458d","signature":"92a24950b269736d532ea9daf0cdd8ea7361b70095f3468e59afea80af884516"},{"version":"5a2cdf6adeec348bbc876221be4367e8adff0bb78a5680ebd7d71e5c3bad6cc0","impliedFormat":99},{"version":"e004826eac62081f867c66dabd92d3ef7d126d93a70430a2c88429228c3ecc50","impliedFormat":99},{"version":"38d6857b58d2ac42442e396311c542062d4f0dad40f2adb496dd5fd0756ee400","impliedFormat":99},{"version":"34b7d1e2d15845cf08bcf5e3c01adbb92cea1ec27564ee249ba486cdfb28526c","impliedFormat":99},{"version":"0d0861810ff9d344ab37f055edbc4d14e68e2fa18e113ce8cc33aef9bb500b5f","signature":"2791178671f71d9b41ed9ef814e549d85cc6a77c61e2f8a87ec25f2176d9a3fc"},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"8658354b90861a76abc7b3c04ece2124295c7da0cc4c4d31c2c78d8607188d03","impliedFormat":1},{"version":"f1b1170112db2e1a93ea317419a35652f0e9a87ca1612674f514e6f93791d4c2","signature":"512960c0e955a2324b34354dac25e3e4d431a1af4cd33077935eda5e95c8b7e1"},{"version":"992404964e9cefb3143cde9bc8e5eb5e7010c3a207f5bfa52df49287fce758be","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"968043e1fd7bb3c6b1c22d3341ede621d16a628b2bc4c35d1e43f0064ff7c1a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6d261c7be483027c9d281ba71314350ad8ce66efabf46f7b6099f39fe3b8d218","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c02d45c2a6bc50186c1972f44c31ff22e887b30205ce84607bb4661c0fdc9846","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7fc06e1e53688bb32ccd86e730e08bacd38d9ad7ad006a234211b230825efb2d","signature":"d95aac1823e54b4183acab8f7fe3bec5dd7bd4aa297f56004fbcb972d299e377"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"c2175e53ec5b411439a03c757c499d2bb30c48bef05e83f372b5095fc2f8fb3e","signature":"2c2a937dc3435a48e0ac2cc67072dad512dc5240282c217955d3fb55e2b6a4eb"},{"version":"6c05d0fcee91437571513c404e62396ee798ff37a2d8bef2104accdc79deb9c0","impliedFormat":1},{"version":"5990e5575acfc932889f3720cf5915b1f3514d66b9d0dbcb55d2b62130b2afd5","signature":"ec851dc73402d7cce3fe5da65eb1f2e56235ce4533de1c561ea9edd6ac4b941d"},{"version":"ff19b24ffa97285a1178436c099096fc61588573b02b0591a55667dc72376daf","signature":"1493f2b02d2b0d3a61c10e1ef4da30f36eded81b57a4480dc8e23ce2eeadc4cf"},{"version":"9da2b0eebf78cfa1a8bfda7ff79b81b488805c9b663cc313824413b402d0dc8b","affectsGlobalScope":true,"impliedFormat":99},{"version":"b51bca9749817b5ca6f945534921cff40d00fb1e44378011e8f0033ddb27a9cc","impliedFormat":99},{"version":"2e82d0ebe6ce039ec74ca4d1df4facdebda4efa23e60a6216b4176bc8f4a0aac","impliedFormat":99},{"version":"f92f4e4f821a787525611edfd46e7376c1bcb4565f70b20cc5f055b1164a8f17","affectsGlobalScope":true,"impliedFormat":99},{"version":"6cafea37fea0c60b8977c7e0d59634db0df134c7a51de02064594de3de805ec8","affectsGlobalScope":true,"impliedFormat":99},{"version":"0295c7a5d5d956391ab9bf0410e73a89e25fe26810f9a1d823cc794d682cdafc","impliedFormat":1},{"version":"19826a846db870c2261a3c4cf0695df889d9fe3eebe7775f3f5bc76fe7ad07a7","impliedFormat":1},{"version":"e04cafd03370139cdb0c846273cb19eb4264be0073c7baf78e9b2c16ffb74813","impliedFormat":1},{"version":"7c01c77fb7d8664daa64819245d785e106e0a3cb6e43da64346e4400d7fa9401","impliedFormat":1},{"version":"8c2ca98f4713d989d610fbd38a44316bc43c50aa26983e62dc31002f32ce63fa","impliedFormat":1},{"version":"ee931610d1cf7a6e666fad138187751392fc88bee931b94ac8c4571208dc7370","impliedFormat":1},{"version":"53543b3b64e624a81fc5876da6d72c94dd87655e7afc10988cf82ce7cbc74180","impliedFormat":1},{"version":"967e68e99b8a80551837321442a0e2f12ef50aa1ce567ec991ac6bf062a0c7cf","impliedFormat":1},{"version":"144ab2f3ef7404caf39c6acc88d248d7e55ab3dd1c4c0d89367ad12169aec113","impliedFormat":1},{"version":"759002d4454b851c51b3585e0837c77d159c59957fc519c876449ee5d80a6643","impliedFormat":1},{"version":"07c50b6db67b8b943aed3e410bfeebfb6d3ba1fd1e2819bc889e48f81e94ed2d","impliedFormat":1},{"version":"e3a5287471fb08f053c06fd998632792aa5f022e45278f1e6dd55fb2fa9e7362","impliedFormat":1},{"version":"28a6c8eeb48e165920067b9193555649fc43c2a28c450f23f622e5eb043d9463","impliedFormat":1},{"version":"1147c3efa5a256bcd6a3d2cfaf764185b7120bf985f8412d9bae596a0348f77b","impliedFormat":1},{"version":"490cb6f5e6c90c4eeab1d237242901fc418bd1f08345523beaccc7357122166e","impliedFormat":99},{"version":"cd4908c240506b0aa278c4c8d6bc1705acb41b03fc5b1d86a47f7a9f76f0b075","impliedFormat":99},{"version":"e663cd7abf76422500d57d6500a546fb51e79a095c23914efc33ef73a32f4f8f","impliedFormat":1},{"version":"1ac8996804c14b6ad107fa17f47cfba0f9a4e6f5bfc3ca8b6e6f6a4cfa636398","impliedFormat":1},{"version":"7a317ff3b65c289d4344ea7b6e0a9793168703a79bf1ee889b3ce379b58a54a3","impliedFormat":1},{"version":"543898906d542e8d0631f6861268286722ee148c5f847d33d01cf8bb8b56414d","affectsGlobalScope":true,"impliedFormat":99},{"version":"68ff3225eb855a861e887d0855235b5ac0dd4eacd64f4f4582e48dfde7a192ae","impliedFormat":99},{"version":"3252a756534812804c43800a431da5cae9b641d7849ced2251ac2e711920e38d","affectsGlobalScope":true,"impliedFormat":99},{"version":"06a54bbd0060db53427dd3bb3dd58e3f266a5896e84396ada2e8ff1d299a27ae","impliedFormat":99},{"version":"fabe432191f85afa382dfb08ce4519938c4365eb5c2bb2149405d88151583fc5","affectsGlobalScope":true,"impliedFormat":99},{"version":"29db2c1e2e934e0c8cdbaf8f7f5601e1b4dfdac35f0c839ebf585ab242f1476e","affectsGlobalScope":true,"impliedFormat":99},{"version":"8663fa4279da9eaddb386c1bc28de7f5b433dd2518763ebf185ed198b4b60aec","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"58eb22ce690f7941a952f307d51a210195798c9fbc381470fe7e0adb228d4c92","impliedFormat":1},{"version":"49a70606a1a2e65aa6daa491d863c7ff09336c69eccbfd88800bcfb487933fb8","impliedFormat":99},{"version":"3c1100ec1393484b2c486ccb4dd8c8988af1fc1c0e61c2f892e5c370e41b63ea","impliedFormat":99},{"version":"c967e03c8dbb4770f7e2f0b71b5d13593de679a41cc2b60266c4b69f1342a263","impliedFormat":1},{"version":"af5fd0c8cde550fc2c081a18517fb30954461a16daf2ed7969db3805e5a8d7d9","impliedFormat":1},{"version":"d4da3464d2c4b7d80d203ae64bb5c75a66221db5eee12a4ef2c4ce2c9d19a821","impliedFormat":1},{"version":"db820c42ed9b21f2d81ba48889aeb1317c710959346b042f07cee69a545f1326","impliedFormat":1},{"version":"695f2b1040663810ccac946cc87dea5236e3a74efb4bf5964def8961309634b1","impliedFormat":99},{"version":"8cf30ed8685586888fe2a1f781c7bf433c07422648a24c05aa4761253f8e8fec","impliedFormat":99},{"version":"c226530483794a0a83c1afb189213a2bfe109a1c0716331e5df9664471ca8d64","impliedFormat":1},{"version":"7459d85c80f2971be954b562724106b13d5a2a57e8bfde51723e94e838f6fcbf","impliedFormat":99},{"version":"c24ab9ac84d65b417a807ada25456697bb2adf1189fa80cb240625dfb3e61c42","impliedFormat":99},{"version":"03952163760a479246853f7ee56fd231d703e8d6f78deb353c7892efeef3db3e","impliedFormat":99},{"version":"0d121799b2cbac398e84a4708fcd82f980f33bf3ac7721a3cf9db9f28d9eb2b2","impliedFormat":99},{"version":"b45c2c7da9952665f78397fccb03f67535535939497b11308c9409c8505eb32a","impliedFormat":99},{"version":"9c3663fa36fb976609d8fc43372ae38dc2e066dab014a955f40ae6430733fb71","impliedFormat":99},{"version":"e38a172f8912eebc79671e07b81687a304a9d366a47933fde9f97ad79f8ac08a","impliedFormat":99},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"f3aef38b4236eba6dc8305c57a73deef526acc480e86b502ef702a4a3faea496","signature":"bf2a96598469ac5172e826a5498d1d36a9cde815881a71b98bc59047709f0b24"},{"version":"cdc56b163f9af283176368c33457f1aa84c5aa6cc8de51e296a81fc702f75ee3","signature":"53e6a8c9b6e07251a846bd666ac8edd440de1348020dad87cbfd1c5c97e42d90"},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"ad98c359284db8c984e88949b2c3394e4a35158880767b772491489788a6c5a0","impliedFormat":99},{"version":"5c117cca0b75ed634fe3085142a931df2e2214e26f2bbcb34c592b767f13c1e8","impliedFormat":99},{"version":"773c18e2bcc18598df8f8b2be930eb26b22608edf368e42e9ca3484828ec4122","impliedFormat":99},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"4faca872dbd194a17b3ee267bd8ddc3daf3d16df96f4e43a02c7d9a862022c4f","impliedFormat":99},{"version":"f89aeba83b1744a0d697c1b7fb8a06d8dc4cf7c0d469d2419772121f499efa8e","impliedFormat":99},{"version":"144a4e5780b800c0553949169f50be285eccbdb0298afd83ef2ae03fef77e2d2","impliedFormat":99},{"version":"66aeb47bf8638d6767f7b4ff684c2d794391c981590073025e98f98e1afed499","impliedFormat":99},{"version":"26748898fec8579096c776866e8e6f07754845b3d08f5ae98c3a59baa9e85c2e","impliedFormat":99},{"version":"6d805abd62920edbd9ed4b20be26d040d01529f3ce53fdab9ca4d0fa9b589f02","impliedFormat":99},{"version":"edbeff52e73b0ff82898142aaf8ffb336910a8ccdfc31b79960ea4ad4c9f407b","impliedFormat":99},{"version":"b64a8c7a27133db3f181199d21c0c582e86f38ba57a031a126b77229526b4916","impliedFormat":99},{"version":"4d857105510df8011cfb5b3769dec55624a1df92e85d399cd03bc82bb89d090c","impliedFormat":99},{"version":"8eca47167dadd486582ecd4e41f7fba6ae66cc4a4c5202f1f7acf34129a0dadf","impliedFormat":99},{"version":"755fc4f6a7aca9da7b38e1f7a39abd36538a72711763c741f1bbbf36f999b654","impliedFormat":99},{"version":"c4e79e849fd94553e07d7386552c472ea4f4fbfc9d280c012018fe7a6c50e598","impliedFormat":99},{"version":"062c0cf9641ca90ff3ad8edc61c2e06299fe6585fb9a4014a8acdf7f11810d51","impliedFormat":99},{"version":"f68896096cba0f06ffbf39a67c2280f6f2e5b90c75db56a3f9ae5f7f3bb54460","impliedFormat":99},{"version":"97b02501eb45f487174d5a0ff89b6a95690d50e9eae242e2162118edd5f2705c","impliedFormat":99},{"version":"425a03d68f43164e0214b1c333cd58e777d4186f412b530467c18ef0d2b37a80","impliedFormat":99},{"version":"26cfaec143443411bc7d5363f274f885ced430b8f4bee25a81f7827248848d7b","impliedFormat":99},{"version":"f9a591e5fe0be6728cc84e70325aacafffcf203b051ddef37d65651b43c05056","impliedFormat":99},{"version":"293c0a3e323608f4e20667acc74d7bdba727db954b840ee1db03f2fd5807c761","impliedFormat":99},{"version":"de8b4c367880fe92a0a740b706f08a46d1cf9e3981d55c2701e82423e81ef0ef","impliedFormat":99},{"version":"4a056a71ffda9ff3f2adec60c0189c906f7e46976a0c6650fa196674ff8c4dff","impliedFormat":99},{"version":"3a3fd6f5ca85ceeb293f2a010125f9455404958122b6dd0ba0b34f7dab74feb5","impliedFormat":99},{"version":"42b58bc8da11e9181ecf4ac498d41c74930c73c8ebef091474d0f8cf971b50ac","impliedFormat":99},{"version":"9e003336714371c98108af3dc53342829039327f8b1db97d826ca81805746b7f","impliedFormat":99},{"version":"d8954254110123f6f5c9fda6280674f6b853d47df7fc41c2090e741dc8b6b627","impliedFormat":99},{"version":"cc141bc69488825723b0d638491da8779c4c3e515712d5e1e63709e0136dfb2b","impliedFormat":99},{"version":"df600fddb7f36e4c4b3cc4e36073d0099a5b6352b88be02decf63869c8886313","impliedFormat":99},{"version":"9fe94c8f6b36cb41acd30d89567761a52246932dece21e1ce104baa2e84b07ac","impliedFormat":99},{"version":"5560b9471d610c2543dfaa66a88f7b7cf05cdac61a698d4106b3845b7b7b3b29","impliedFormat":99},{"version":"e80a0ca19ba1ea6d815b5017ce248fc817c076522d1b0f42f062a784897a30a7","impliedFormat":99},{"version":"e96bd939a55117abe6ccbc02839f2f4d9ce3893368fea528ca91c59ebddf496f","impliedFormat":99},{"version":"81f6bf27eedb1ed92466abfcee33795a6b2304691ae01f42e60f8c76894fade7","impliedFormat":99},{"version":"8ae2e6733fc535c43c514f871d28cb0fe5926238dbc3d64c978a1f6f00d73296","impliedFormat":99},{"version":"26a0c2d883e1ed55ba00810d957dedcde5d16d637e33063686e2bc3f58a5c64a","impliedFormat":99},{"version":"68099697ac4e919f6f1832389f32eb67d3d94fae744967f33e0cbc049a222a3a","impliedFormat":99},{"version":"bfb900f7de2066a4be644c269285fda8ccca40b065476a27b082173014d00467","impliedFormat":99},{"version":"fea750ade335a63f707e7fd7410cc11b81805f6b454880e1ed0e178c08fae8ee","impliedFormat":99},{"version":"7e2b8299e85423435784cc6244e2d559ea862d226e7b0ec871c6a53f88e5139f","impliedFormat":99},{"version":"51b6335f5a8e177306647558a3eefa1f6abe259b283c6462223be3d7d0f33300","impliedFormat":99},{"version":"31a63b6b49338cc6ddb1a318beda72d3d8fd523e50f8dd5d5ff3accd39a490d7","impliedFormat":99},{"version":"8fc7615fb8fa095406f5a58b1b817b9a685c516058877a3d2c06d4545fdf5dbe","impliedFormat":99},{"version":"f70e9fcb8172de822a729503eefece37f169e063cd7f97a978e3913dc872a82f","impliedFormat":99},{"version":"d5da26af31358a4883edb6112879018b14c7c1fbcc457aa36961b03ee17bedea","impliedFormat":99},{"version":"4e93fb2d2c59bbc1f1a5211b36c447efe4d0af568d682ef1e5eb5f84ca6ccc2e","impliedFormat":99},{"version":"b6cc07bc56c7418ab500421d2629c26acdb6ec2e9af85c5e2c5d7e8c9f92566d","impliedFormat":99},{"version":"3d13fe973e92e708ad3dbbf1b2385bb799f8e70c8da71a1ac72fcb5521c8a5e9","impliedFormat":99},{"version":"16f3f66b5182e57c554d0e374e29fdc0a899c1321b3f94fa997d19abf9faf931","impliedFormat":99},{"version":"df459c67b9eef71318851331b23926961f0476b4b9d1674addcb627eabe583b2","impliedFormat":99},{"version":"b93915733f1802a8d9093116a5e660385afda0f72a5bab9c9bd356549a61f1cd","impliedFormat":99},{"version":"1dfb1491b28cf3734f3c07745a56d7758a12d546f81a70fbfe8ee9faeb528c54","impliedFormat":99},{"version":"42b00a511331c7f79039ae3be83fd5941b212ce193654c3ac5d82157227b69ad","impliedFormat":99},{"version":"1a5914065c7c6e2b6e98437c4ba6059bfeda3441f0f55cb07189df1e78698922","impliedFormat":99},{"version":"66d3f42196f32c639d8240bbd520852abc024d673c713bc5ab26b4bdde750a74","impliedFormat":99},{"version":"18ce9175445b3edec11bbca1c682a8f3919e74fb3504abd883ac462ea8089a0d","impliedFormat":99},{"version":"aec96f94a27fc61d5f4ead202628e811199f887d48bb7614b7e1706b629cd1ba","impliedFormat":99},{"version":"2ab01a0368f65b3b891e25416ae785dca54808f70d8f6204b99589ed4f7f1d2f","impliedFormat":99},{"version":"efd87ca2190e2d0f905e30343443c8d2f0d32cb2b1c9e05b2cb97b0061abec08","impliedFormat":99},{"version":"3323edd649d2c85d3528912cdf6fb770258d59d75241575fcf25c7850837de79","impliedFormat":99},{"version":"e0c8deca5262879f11ee84fe6664dcd197a60f546930363bf2d78d37c3138c69","impliedFormat":99},{"version":"3b8ba0456ce7763676505d103eb336a6b97659d6fc8a7d7d186558ea0b8c7ea5","impliedFormat":99},{"version":"7bae4a3f50a844fcbdc504d717f5f13dd7178ca99f131b230305db6b55e1dbc3","impliedFormat":99},{"version":"f3a4668046e42e9f5ebfdc8b79238eb27c399443dd1dcfcd4c4c3652692ed031","impliedFormat":99},{"version":"07160ad59d49c6f2999f9703542918df3eb1ef93857bc560b4baa7c6775d22ce","impliedFormat":99},{"version":"642d33e1e66ab109cdcc5a5b5535535768c8b642fd5ef75de4d77de3a5632601","impliedFormat":99},{"version":"c23b9684ab48ea6956f0a510c3cf724277fa457efa7ff85d5907f4e4290ba0aa","impliedFormat":99},{"version":"3859635347ecc10d4ff5dd68bde66420f5a8539b7313dd62020aa025208d2222","impliedFormat":99},{"version":"f49e8feb6d7473579a5ceb5872598bbc1be3723da653993472720629c72fa0ba","impliedFormat":99},{"version":"14c727434cfe6a078b51a88d005033ad01a76bec36292d7b47369d82e48e1cb0","impliedFormat":99},{"version":"ab48218964fb2f2713948fde8f501a80d0453c961bc23b7b37198294e0992f5e","signature":"b9acca28c776aec8d087257885a24491333a1727c1c7068f5de67816e6b85de2"},{"version":"c3d577953f04c0188d8b9c63b2748b814efda6440336fa49557f0079f5cf748a","impliedFormat":1},{"version":"787fe950e18951b7970ec98cb05b3d0b11fcdfeb2091a7ea481ac9e52bf6c086","impliedFormat":1},{"version":"13ceda04874f09091da1994ba5f58bf1e9439af93336616257691863560b3f13","impliedFormat":1},{"version":"47039aa29dad4b33704e9ab56ca4ea4c918aaf86afdcd4e059f9dc6045850b6d","impliedFormat":99},{"version":"433839016857a5a785134d2d5e760fdcc9819d241a3ffb5cb76985e666a34a8c","impliedFormat":99},{"version":"ef23a7b386401847e3b4c3ed1b087c32d56e7307b2782aa2f0d0ff4f02d70473","impliedFormat":99},{"version":"2dfa6d1aea770ef46bd51a79cfb7aa10b9ae90c9971eb53b4f5def028425c800","impliedFormat":99},{"version":"66cd137411911fea6db4b352a98279470e386eb3b1cac5db3de1efad678a9015","impliedFormat":99},{"version":"f8d95db2d66d268765d447b554dffdb3f1cd2a22e8da7f6f57dfdcad6a19a1e8","impliedFormat":99},{"version":"449e9856b59558abb085380a4ba7720ff0c62b52145efd29289bc8ca5777a6ee","signature":"9a38ce0e9264512c2af793453b7a0503e44a60a25100f53e3fb8d7b0c1c95d53"},{"version":"bc2b3d6a3f97ce3aacb130a30dcc5c860c839d23c069517bea46b7d96d44f27f","signature":"cdd90dec979b4367fcb144d5b08f8311cbf35a855f5aa80182bc418dbb3cce10"},"49cb155fb4279be23a8d0d896f8260c400ac096740852b5508a9d732f9cdd866","438fe7c614ee01cd911eceb1524a64c7b7a169dc00d6337ca08e8befacd13fb1","532069a8eae99274aabc8f7eddb0562f92390ff4f63ee88165b81e7f41ce6b96",{"version":"15abcaa279117eb516a90c09c4b60c53fb29c1242c7f67bb1003e0cce06f7d19","impliedFormat":99},{"version":"75085bd84ff6965e4a356c53a4689799cabf65caa93c0bba064d5a0c6fa78f13","signature":"bb4b02b4dd58d4e434c952da55797cf052d30d36b09bd14aadfbc70a037c84ce"},"5f5c74402211699a34f9f18742c363d274020d0bacea851a34f1d40cea2808fd",{"version":"fa46a73bf9fd98d5e7a45e36dc7b7d8957f8c8ac6d4a0de833860c8870a92486","signature":"9bc26c030aef4b75d3bf757291b79add9c525e1ed6a83579c53c5077feaab77d"},{"version":"52e491f43f865863368c20ecf43cd8312b1d6224d551edb382e126f151140076","signature":"7e3b2ae2ffd2f502ff036fffd80babe732280ca3b6d2a3bed830acd85e7562ab"},"2f0eadedd08a0b94a759550b9e1cf37c775cafaa869ddf9f1c66eb39bab0b4b9",{"version":"488c2eab6b0f3b8949f4a2458c60a8e8768549c9c2227b6b7c885ccca3261d8d","signature":"2dc7085a3856beb3291a4eb024a77421349c5b201844fa96a88b879ea9ade85d"},{"version":"c840e12da509f2c771dbc356a23750227a43d1864640c7e6404b8f9ec86b3871","impliedFormat":99},{"version":"6ae92eaaaef30fae975de604d3af31d5b00eca7f02d89fab589152df926685fd","impliedFormat":99},{"version":"e3b3780b68c70ff42894b68ee8f49186ef3335fc86a9106dd07e11580b460cc1","impliedFormat":99},{"version":"459fda119c27213d3defde220c051414020029abd52fb6fb9aea0beedc512c6b","impliedFormat":99},{"version":"968b0403af74a785c9408ca69a677235e49d0c80b2c27fb9858ad421a8778c7d","signature":"d80059fa0b24af7ba6783b3c35e18868187c0295a66c5d775aeefdf8f12b9f6e"},{"version":"7a909af0bbc8a2631cc3bdc78cd02ec02ceda31c467137a7c4171250bcd077b8","signature":"ebe17c0f79d00d4336e2868b21aec2251ee4d5a74c81d1380236997f5226ec89"},"749187f1b60614359e8724a61684a192de209a9d9f87e479db3bc9533177a181",{"version":"7f19b8476658d25ff197c84030e58cd7395059d876a54630e025951e474ebdae","signature":"cbb6e618cfae37c1feb246b78260428cf2bcba79a0c9bf1ac60d511a4158692d"},{"version":"faf9a217d8d237b02ab6d95508d8736ae431bbeb38d98885eb5b8fb6dbe48cec","impliedFormat":99},{"version":"da08c6b6a9bce701e6d2775ac410ddb2a7189e19b020abea06c1932226248ae9","impliedFormat":99},{"version":"b2e5691a1a795e58a63d10b907248299ca96bb3433b7fb252279b4f00cc3a5d0","impliedFormat":99},{"version":"4244c6a12dc14768ddc3ee2737ccf1c6c0d07353785d5979df7d250eda461a61","impliedFormat":99},{"version":"cce820aba9ba9d1984461c67d0d543d8eba7ea25c6a1be7a47c31cc18907a631","impliedFormat":99},{"version":"3e7e929f14bc384ed6da8ef0c7dc3aae5ea191494c9554e4327186ef40db2573","impliedFormat":99},{"version":"2abf45177ecaca091e103f4d9557a7e8524d160b28a8dd457dcb7defca65245c","impliedFormat":99},{"version":"bb2b81bc35df3045d588a60ac6649c7b45f539c855660642ff1c12e9b83fbf1e","impliedFormat":99},{"version":"acd4a1daff6df3526b17094f8f30ef3c9c19c9bd5bb95c3fa46a1b8037290778","impliedFormat":99},{"version":"b719a8ea8321a8d636c2765f8b5f8efd20a43f8f7922dac4f2f7ce7e361ce233","impliedFormat":99},{"version":"2673620ee9cb5e62777ceeea4e84f0c53a2bea44d74f103ece49bfb7efe95aec","impliedFormat":99},{"version":"77d542e6871aea7774c7482cdedd9ca20cb03145ab9112e6845a1cc77b7b6c00","impliedFormat":99},{"version":"ab2a3d386e021bf5619d581692f14aac01bef911457d9960ef6c21d9b97c1c06","impliedFormat":99},{"version":"0f2d99aaa9d3574828b6f8c1912208e370a041d640497679ccf4a4f5e073efb3","impliedFormat":99},{"version":"466e0183c786efd5a3e1b69d6e0e445c77d771598871c9929137184206362b80","impliedFormat":99},{"version":"49149ce82e10dfa69eb4fb250755ffe74107279286aaf8305ffeb201a0a96658","impliedFormat":99},{"version":"ad06dc58b3a23a89eecc369690d5cf5ec2d141009fff32cdd68b94ad8de375c3","impliedFormat":99},{"version":"f2b23f711dc15c9ba970626eb5e654d4e7401177b13d16085751f40dd1d77d17","impliedFormat":99},{"version":"b958c46e432e3a260af58b20ed0fdc4f3ca0c02bbdcbf12f63113c1a1932b57c","impliedFormat":99},{"version":"7e560e86bc8f0793454de297413f0ee411418d71b0f002563ddffb26b2f8a438","impliedFormat":99},{"version":"808a1b31fb436c3f1c3bc9307623234442cdb742fac3cd39bd0e8cf4797f86a4","impliedFormat":99},{"version":"ec8657eae496906e9c2bf18ddf1f276d6472cd7b42975c609fe49db7d10c4716","impliedFormat":99},{"version":"8834848635faaf4a4c1b77936a3790515df4989872d12e1f586a903ba8a96d32","impliedFormat":99},{"version":"3c9e08a6171b77f9409f6fbeee92cc7cec90295165305f4749c15b66984094b7","impliedFormat":99},{"version":"d5f52fef25eebd772b28fe3acd0ef103cb3d338c73fd23dae81235aa3d3216f3","impliedFormat":99},{"version":"3b9442cca222cb8cc615680fa4ae6e479634824b443d8ed9dfc55c9a79c4a15a","signature":"73cc5ae3d7988a184c8adcd808b83f66c1d53fbabb555e00f81a610607fbc767"},{"version":"519431201e3a19c57fc3033d00236e2d6b2b5228efe138763509216156a19081","signature":"f538f6763d0744b10bc6d491d559ea72dd3ce9fa645858ef79d8bcbac6877bf7"},{"version":"1495dfdd325ac31ffabb7e95cd55d22806b90ede60783d2d75642109f70ff782","signature":"a29e04cba58c684bebd17bd32f46a53acb5f8b1292a42d53b1a18374b80c0fe4"},{"version":"e3e5ef1d4fc3817bda9a4ac5a4f264b0172b34a75146853fffac34826b59925f","signature":"c4a7c080c4efc31d1142796434513a88f078771f34b505eca798ce5a9bdfec31"},{"version":"93c4d54867458b35730b28b4a14cc06d27e1f5afa0fdfae1dbe2b865200cda03","signature":"34aafa201e480563bf9f474edcd99b6c10c798eb18891de1f65e60f032fdb482"},{"version":"33964ba9de9ebc5971a18a75c5ed9200fd7986b58c168ee0c83b2e063e6b5f07","signature":"1c211f72b18ad57348fe0b7544548f7b330b4e306f7ff4974a0db403df514a51"},{"version":"4362b82db9f3886cdad8cfb221267a34f20ccbeca1363b4a7a8491b9ab1f9697","signature":"29b3c41bea83cfc6ee031ed69ce943d1a494fd352b60d673f0142d0e42c8b1d2"},{"version":"641447db29bb1eb3a9adafb6a63da7ba11845a0931de5d938804f38dd442d0b7","signature":"729a8e79214634324fe502fe0d85c64ee79bc11cdff7422acd64e22b4ec8bfbc"},{"version":"3aa76a07fb80f470d454b5b1a4285711c1864267ecfd6647517e74e63765573a","signature":"1cc4f87b153eb468fa435aa970bb93a46db33760cb339b641220b564f615636b"},{"version":"fe77be3a417a1dce39f72239224f645468d2ddc28c2c0bbfa59e99153b45d5c2","signature":"f60810de973f028b077417c92c4b2ea04ea8b87f33b85bfa5d3674749da37b7e"},{"version":"c035ef058f2451c04bd992c6281f8c435170298f50fa4712912053145e37a0dc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29169bb8ced942c2cdfc82597899e7f20422ca9ed8bdd4f89905afb68aa1afee","signature":"453c00e11f1ffe23f85adca0e32b862b41c8f4dcc2dc969bfc9d666b303d7005"},"032075fbb39bc3a432f6cc45bb28525bc5db9920da3fad1a5dd64d8b2f524aea",{"version":"8ecd14162261bcc41e16f0b2e3a8ede0afcf182ec4199f5d39571f3b704a2c4a","signature":"e41cb0738e24140c475bbd859b8ea3e99fb2a4dc5ff2471987e81f9a15cc56bb"},{"version":"8da95c2429806ae2f60b714b78e78b4987c9bd8c044b03c83710173e92853e51","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ecae2f28d8c22aea644ad1a7cec46319a0033abfc591a7556f1d35fdd8394f2b","signature":"a458882652ffcd89d8e16df42a8723b41ff0875fd6dd931d012fd5fc8972cfcb"},{"version":"5a40c915ca937f5f5bef9ff7e553e7b5d68e12bf532750ba650edcedab15a7f2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e4273673438bc74e5c6a7cd893a9cd54688a8c34c5464dd5fe785aaadd966933","signature":"4476440845d41c5d6e22a9998d3c66cf2c750fea47d0a811c1ac0dacb15c1a9e"},"b787e83e2d12e1954be6437ab1e5214bf63dd4106a9431b3846fc207fae10927",{"version":"4b5dc47187540a38c27c09cfcdfec34d02831017b6b3061f160f3274cd6f6028","signature":"543ed74211b09aedfed2327ab5190ae5aae8020489cf9bcbcd7b6f5fed43b9ca"},{"version":"39c3d0b3de9ea75bab9ada5c2455c60d4fe50a8a6bfd760153aed74bff087f3d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bc6412703a98025b91536321a29e0555d4454ccea560acdb3535e5903d6a45b4","signature":"1a745f1ceec14fca346b02f22a21bc9430d1114c92aa54de6a01026f22b40f91"},{"version":"eab527da831a23078d75f6ce34e35c88e0fb3a8a142f2e8adb87247ff19dd8da","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"c8bcd71a9e5ee38b7cf9b998afadf4e23479faee3b5ed929c75c3627d34b9c88","eccc5881b3638c9d847c91efb7e1dd86bf1d03c74a5f9ed92ea21fe3ae9768b2","0db4893c419cb1084ca466ccfdd7dd44a44c1319ffb36bf4180e0172efbe102f","37a7a7ba14820b7f24bd3745fc60a767f33349fa41b83043bd49e73f9a51d194","9add9c771bc92c7e00c8bf360b43481847fccbd41a44825d5593dc9545f39661","55c34260d30a12d3fdfd50e37180fae1425617b0d324d04d40247f376023b935","8766930e75da3bc13a4560eef5b81acfb70d370616f77793b98a83f2e92aa2c2","67a4656148e1c74d57a43bb300ba8eeaf7435d364a0cb97abf326900d2bfce62","c6b18247ba0ad1e53c70145357a65264b37373755d0fb609c76233989e5b1729","208787b8d534735dbcd18bca481cc0b7fbd6075363b68aed271378117ea98565","73ea5a282a20f211ae711afaa4062aa518ec43f0aaee8ebcdd8328a06c8f2f6c","a835720c95aa70887216036d98f7c8f2a6f4fe3c456f11743d4ea214a5eb1302","265e709ed8fd42637adeb051231ad33e8642b18044e7e3541931367097df6e10","1744df0f90b27fcff7bf792335a7cd8827760a54fd6371aae1f9ff32a87a2cb8","98b7d890f11e78344d257817dfbd3f572112cf460ac06521c8ef2cd679178ead",{"version":"9d28b54569f4cd1c0c21d95d0e70f6fdbfd792121604b95d7c2d067ee0f0fd11","impliedFormat":99},{"version":"b92dbe495c1dee9f3cd7c1466fdf02476f19ae18a7ecc829e3ed8a380b2d597f","impliedFormat":99},{"version":"bd3e3a447a34cf3dd875ed550ea349589b2dfcd6b3a14abebdc946366bd812a4","impliedFormat":99},{"version":"6b100282ebfd5bfa4d8c72ad5dd3e9d325aa32d0a53623d6171fc2cc2899fbc4","impliedFormat":99},{"version":"29297b3a1e4b3503eef0ec9f601f2a8da149c8074a0813624be8ad4889038ba3","impliedFormat":99},{"version":"5cf87865e3a8b12bb8ddfb311846ff2eae24983faa365f53d9224fb182cd0269","impliedFormat":99},{"version":"98ef9c3f5f15c18abcd6fa9f12e93e1bbd608225501151603cce97642dbc961d","impliedFormat":99},{"version":"c80a56a10f1a8e01c4b7f08df6e9260ae076c910402dae8173fa6c7dcacc51fe","impliedFormat":99},{"version":"becca0fa1bbcc55ad69918f65f771b76904ac98b2563cb34f26fbe240c3d4db3","impliedFormat":99},{"version":"32b344c3765dc7c383516f3326c108ca84c33df44ece8ac789fce47d47ba8810","impliedFormat":99},{"version":"89b3f0c92217d4b692fa67b9278bee76bd4fc63e422c596237f932ff329b152f","signature":"f774a7e8875649db68f5952801f001f3c316560ede472e5663af7a8c9c18f938"},{"version":"58b58d84fc54ba5f4ca46937870c619349fd9eccc4d494250ac7bc73a94e05e9","signature":"aa333ffa319c18796c9104d75082dfd218334109f702eb6e9ad369beac518833"},{"version":"5e8a6de6ce8a9c131f3124880947b54965f8318fe74c71b0b53478c9c0ea778c","signature":"43958dbc81fcbf127e4104af0acde2116a5b0c0309ff3c811ecda47d849b324f"},{"version":"a4df0a1870cd9ff87aebbdde0c3de602b0fd00e1f66e50e251527e3b241ca746","signature":"ea7717cc4a65e1030dbead855313a4928f5b4804bad8165ef65ed75aca4a9de1"},"784a4657067ce3ef2e893812691037d798270c9dcd492698cfbf56e8c156f9eb","fc88b086529a46b3367bcfe3b0e6ed59421ea8eb5543921f185fd635243d0576","56cef17d1be884fbc2176cd2581397d0903908f7eeb31a8b3f61c4957fbaff11",{"version":"9a146a1cbfa878b0fee1f19cde2535c6bc6ceaf6fc3c767bb870e18045820f5d","signature":"65c0f4461b3b871b9fb8f09dfb6c6995231ce5c81756f7e2ad1443a8bb811853"},{"version":"de36052bf8d07b2ff72705dcf1971e29c5e212c2d3fcba32a03299d4aeb4d6b3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6b6ac4ae82ab46fbe488e36d6143b6ea1466a65e124b46236b6d8b4f741e471b","signature":"9d3470ece4f34e063923ce5e95c6a2857dbe862ac4160986f6ca2ae7492a6584"},{"version":"2bc72ead93f915ea10b524d3002107bae3a4447b8fd1afedeed20c0d8e863c3f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"936a2ca9806a50b4e9be526c26e35798afa2a54e33e7ac66e63729f507f780e1","signature":"26f1753414b839143161e2cd5dc04694563b6060def71c7c557d41ad5ed670f5"},"8b5d9163ed545dd01ab16aa5dc7c77d3dcdc76e7b2f064a9e8bd935ebce02761","9af10c92498c522fe1020a3a13b957467e112e0b2bec37839e3008ba698b029a","2f87857596e7edb51fcd5c6df02641942d9740cfff7567bedef6184d2e239972","8204e0fabf38e763df3d378b2487c5e7d5d633b28acc9c99fd39a3f6e8844c96","1b7acb6a015fb8bf7635be8f8d4c165d7c4254eb2c754972fb2bcee927977e6d","46425d0197dbe578eed0a9ee0881282ec533bd687a9c2aee9c1d8b1b1203334d","064d893038973bd234e489f20797a11c2ae3585977912c30f6829a3c370416b0","fa98a3524f115d58fe3a0ae9a365486b90b8e6588260515aec6c4bd935e33030","f14a3fa3167605399e4f399b39a9bdf6587d609e9365785c9f71c9fe55b2fc5d","08553276484b1590b5648e5ddb4a70f7b5416be5f50c2630781d33413ed24b22","525109e5db046e284b31d4309883329eb5f998cb10e8223a501d0e5a2b93993f","85004ec5fb5e15cf2fcfc6ac787ee1017ac229dc7497346f5ec87d8d6395f2a9",{"version":"c8ec3533391e2237d80c27000c8d59105a2bbc6d8a59a36d9e18a7a2202b7399","signature":"e06b7e8020b282098867bf306f99543f3c5d681405c54d0ac70ea5361ff69ee3"},"2a862997b083b5f96e004af342404912dacf420f42783f92be87288ec1b6bc9e","5c5ef6b8b634345502f1df01b97dd44677bae2d33a622c590ca74072035224cd","df8e4b93e6b9e04d4190c87aea4f64ce11610ff5ec8778ebee96adcf4f84bf6c","bbc07592b4417e2d3251061faede89b1967cdf41288706168a16a82c34f0e840","4cb890ebe99942ea91de161ba57cced6f5d131daafc0125aea86f4aefd7fd6e0","d5a2353a6883683c6c8ad13740cf70db593d2f44e454533e2965046629d6c047","b0b1b5fb9d3afbe8adcc6c1b0d839f67e3e87d8cef9c73a0c03deeadb6d6a3b5","89e3cd58dc1516e385b9b8fec8502db7d77cb2a714cab7e0da2d2ad3dfa5e9eb","67f5f8b98ee9e013e7f9a2680310de38525c7b779bb6710f620d2f5efb930e0e",{"version":"3cc4e812ba88c8e02000153858b350807818e71dcdf265f711ddeea849e9342e","signature":"1a2181bed21c76f40d6c1d4a4dba5863ffa7b36b77e037a91e5374504f493f9b"},{"version":"610be97d1c2d516a9dc114dca6efa3c4fa2937ba7442cd75b4360ab4f0618d5b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"5291227f9233e82b24acfaeb61a49f1e7151fab5916724b6f30ac11ccea87ecc",{"version":"7a11c6d9a29f89b07b7c4a078f34a51e5adc04d416e4883aec8b2a1483c5b601","signature":"ae3e12f3c039097ee481c8defa0ab07d60ddca0d31fdaf26256ee1245f192c70"},{"version":"30f7097efa6802a81732e9db773adc9a8c5b15d5858672b59e7f61a1f55360bf","signature":"3523fc8a3c6937588fa23496d6b09929b2379370370fb97a64a3414699aba4a4"},"2b3f100e4331765e5b2781b23436c9fa48d448e8f1742ecd7eba236fef7e03af","7ebc7128793094cd8677f7a7d21ee4d271a1e50dcca01c7ebec258618e7b254b","3b1ff19587d5fcacf45a3ceb96684cadab07bf4ec6921b300bbf842436fccdf8",{"version":"52ca1a0853485f331ca3dc0975393934a71ea693ebdf74e7c87f3014947883a5","signature":"bd777dde2efa6743bafee805dc193e2f9fc27bb906eb504bd4092358c087d9d8"},"364d85967cf04c04a59a40f73fad8b06513dfba7a144eaa584a1986ddad3308c",{"version":"633de6e0dc9c25abb3b53a6e7aa17ca6c722e9a8eb1d6ea3343f01c37a380407","signature":"32b449f30d9776d304580e6f60603441d0b83760886003d66fee8f76740dfd34"},{"version":"c5d0db6349127f5346bd94fc2a5ac5521a5f803c4590a3a363f22610dbd9191c","signature":"2d535a9817e3d46b755503968e6f8c3ea57d16d7ac23cd8a7a0552f52e13d4a1"},"1d954ac5e386caff0adfceab34aa6b1652645c4f2b1bbbc55ea4d8c2f649f6f2","ed06059c24b747386db3793f648b5d406bce77dbb87035858749588b3dec30b8","b65dd9a55b58b3d2a6896c8f774a211d9517c230289371bdc80eddca9f303594",{"version":"e953bd9432c1624ba6b0a2e2cb6c1d14d4347be36142304bf9318d771d53b9a4","signature":"654116ab23597a1ef8427f7aef38e90812d3c3d4ab00af62aecb0444d4c44a7c"},{"version":"1ac3e56e87a485272c20b38c8125c79e42a1e16ed05373784d6ec84302d8148d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"72e8e50834ac2569b97a4cf25e1b6f83c3e2477cd20e47ed74f7f28df85b3dfe","ac8b66473f8a24672bf3684cbf860d3838814fc711f96433c8355a1abd830b0b",{"version":"f2e7172168ff69d3043eb16dbe66a93b1759a7e15c0c1a962aafdb359ca318c9","signature":"b7d80dabdb6e9195629a2265e9cdee7afb8c8f2406cba5f1ce75ff62ec116091"},{"version":"bc3ce3d060e979ec8fb70edd205b68641d9494106d76e33c8d45422a3c37ef68","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f21065ec31e65269c49b0f41dea37b1b16384f3c0a421c9e80f5fef09c28fedb","signature":"ecb61779944dd6d04f594dd817e2f127ca0c200ec71ae38a0a1f5fdc178f6f14"},{"version":"9aa54907ba63a07170826d20564f1a8a4483eafd13ce14a528534dd90535ad38","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"e7e03b9e305af78b57a09899bb328e9e0ea62c1a06094c7fcba0ef1047081f47","8a3405ba583ca056f36ed3e3521864b90a3a54db5aa126938be1396c67d2bd7e",{"version":"858d89fd85900644bdc18063d396d7b12b8197c12f0742db07d56443b883d145","signature":"7b9d793ad8206eb5be40eaed18277e6126f7ab546b27c3e51413556f9bcb3225"},{"version":"31a8c8af8726358fb5b1bda10624ec61e518a224df1f77ce4471f55f6db3a732","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1785f7c2a205d4686b9b11c2b91ae08cca723925ce0a117edbfe3c7314e7c822","signature":"3c9c67a52e0704dd321352b7e2fd8918795b4fc4e44b7df370eec0f7ab16129a"},{"version":"5cb7d0b82b8947f764c9e41bc70aec990759cb3147a2a519a14729096c1fbecc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"077f714eb71e488ddc32fdb2944c7295c10f5f47505ba4bddee3c222f157630a","signature":"019b7556950576fd84dd8ddaab37fabf540fdcb8eda3b7996480ddbb0b176a57"},{"version":"fbbc7a7a3571cc841470ff89ff77e353d34d9e78372a6c953de5e5a0d3f590b3","signature":"c33f8676872363b71b9aa3e66904c567efc1e6b405727401fc79e64c7eda06d6"},{"version":"9b87324b7cceaa5371c872ef047bb4581c1f6df28f0234398a2716738a85b786","signature":"f3c49b0c61f163d65c6d4db11b650595c613e1fbf317d61c73ab1ac6dcd7fe27"},"c95526664e8a80537e2eb370e1ee7312183c0b95d94bb0f259951aad2a682185","475fbee40f434ba174da17d846e0d52c1c005e3f4e875be9c384dd9777cbb85f","6c4335bf8f5b666920433fa7598b9ae21855f8de4d79d513e428032b6d8a13b8","0f9812eea42a55a036d750f92754db2c7c51fde465db5bc707e4c2edf4f338ab","9ad0e57a7360d2dd31026a63f29bca0b5fcf3f268458e6880d40511573bcf0cd",{"version":"f911612fe6fbb59498bd042d845e42091b622ff60d62f62899ae9c9061da04db","impliedFormat":99},{"version":"df8d828dcc7036d38beba1b517c8bb7cbe632e23cd13819aac0b7454714d7ea5","impliedFormat":99},{"version":"6b97572b898559bde5ead60c3df72bea74dee67a9497f40ca2063af7cdf84bcf","impliedFormat":99},{"version":"d4c1d20b42f4c4b6710aae2ea61f16b05688871fc88c50164be241001c2ed2fb","impliedFormat":99},{"version":"4e93f1e1aed54628991b8092a5eff614ebd874ab3ff1f18903fb1ddd7543a45b","impliedFormat":99},{"version":"3758c87b27039448554b38154244bcc524735bee89342626ff9eb05b8834d05d","impliedFormat":99},{"version":"17e94aa1431a293fbb231edc284dc251555908f46e40b7648574725bd7acfbc6","impliedFormat":99},{"version":"0e1cab758e8f8c92c6d1b8b2a51fe46c31db41c462aaa21bd05929e3facd8b1e","impliedFormat":99},{"version":"6d37cb963c5288b5225af7fa9d072c429920718fa87d8352f72b5b80978aaf0b","impliedFormat":99},{"version":"e429692aefa26a42888b1e63959688bc0c75ef34fd3eb7c246f32b8872aeeb31","impliedFormat":99},{"version":"d5f419f7f96a6aaf8c28251ceb58b48518379d8b61a9d7cb3f2dc9e254569290","signature":"498e25119d58bd28ece6da55dc0c395a6f7cc59897155f4da92bd6eab82f6b46"},{"version":"32ef9dc49e9270fbc12e5e84718e1d5f43c4acaf8fedf92bc7b1c014841e399a","signature":"8fc7d39a45aa3c24992fe36bb7839ec341dbcf7bd4e2987b5a2783b0c3f397dd"},{"version":"4823929feb033838ff3f21158266d40d9fd31e18a1ec3e21c44fda60baf0754c","signature":"c9a8078413759cfdd3f720dc9e034c98955887cfd68817fe231764fcc0f6ea08"},{"version":"1cca9d53a81d8dde79c75a207383f9e9fcd855d703abc4bd03fec2db7838b77e","signature":"bd5d8d4128b3b2a4a38ca364b140dab68c68b5f19d3882d51cf7c47b9392aaf6"},"1d21433c3377637e37a52465b8502548fe87d0161b8dfeee12c44eeef9ea5353",{"version":"2a302a58829db232c177e77d822794824d38408778e9d7cac863f817a60f0080","signature":"bd9cebf5aea15036a99fbbab8914601e163bfb3fa5a8bc5aa9822713d39fe71e"},"45790ff250ff4590f5699af3d181e9d8cbda9d0be8d454fc1dc73100e77d99ab","9a075af3e84c15c899ce49ee899cbf947ee5d187d1887fadd31be3d9a647eed0","6ac25c1ec65f5f104b9f923772d6a09f6f4c358bf3797d6502f131288e61f62e","48e589080f69a8cd40fa2a08937dfd5003a4b8074620623b29906a74dc439ea6","a0ba551005efc705cf9477b0e1ae330442ecd712e4ced936c4980f3794579a72","e63f78d428b87da5c1804262ef340fc6ef5e9e766d95399eea41c1eface4f10b","801c8d856cb1570f465abfc0de9a9fba825dda9eee3b2054d538c445e43442ce",{"version":"e16dcaaaaf9b6575168b27d0a18175d21a430371f30f625dced8df4d1e228cb0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"c2b605f1950882ddb0cfb3860c57c3524e468495048eac65f8689cb316ff0329","61e2bf1a5145262391c32204e48549ef8ca111b11a40359f300b5f81b71003ec","8246d37f8990d0bef7d74af6b53aec0a42b2314d83e67e7b65773511fa242927","61fa97a7c6d0923f56bb90f446e1d05860f797bc34808ea2d5445306df6e11e1","a7ff6b5aa68f7945741a988f6ad38d5f953716febd59e779f1a1262626345896","dca108070c614f87345eee89ae1f816bf4892686691d688903c03d1339ace06d","55341a0afb9d4716aaa7dd5430351baa794b5cd1b7e005340e7481a7709efe6b",{"version":"22952642468d2e964fe674c56a1c16da6754288d630122ad138a46209a779bad","signature":"173cc8c851f783e54b101f62d9dda7563df9d7bfaad2b647aebe40c4f5a60953"},{"version":"71b98aee493b7664315431f20aa41b4b0e95003c117b3c1f87324c0c390de93a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"eb5afe82ec59a96b331eeb64bf3194f149529022a85fcc592c3a5cf1b3a25075","bab44e3625eb53ea1f7406712d74b3f6a2532c56864439c7e755a2c02af85eff","d2667f1be37e5d04cf5599fd149b7221891fa5eba63776a3b956cd1f98b9de39","c230d828aca0370045f056b54b420b068c78b0109270dd205878dcae9f888375","e03047f3c88cabedc49803ffe8ba5c4b130f7c6dea5b09da94b5f6ae9d7727cc",{"version":"1e68a8242d555b6f9515cdf2fbb15be2fa8e8880463315f70d9157f3f0d0b16f","signature":"194663ce8d586caef675a246b39aa86f7ab30c653d3e2401766d0cc52bfb44b6"},{"version":"85e11a595b805baac672513617fe87533108f57b77c082af4a2cc3fd61ed501b","signature":"33f04edbfd8687165c0b924c9c7dcd233048792911cb852ede409b2ed9982c2d"},"067c82e02319957c544ea21921e4df5aca65243b4076f2e8425cf51e4686d3eb","b06e0b7e7a393b066b90dc0aca3a05b248578b3cb1a23e040294ea79becb108d","60ab55f8843348069fa25332bddc5e55336b6312fa095e4518ca22777a1d7eb1","f84b2ea1fc32d5ea31f132f328c78d188d00476298bdec3b86bb3e338b616837",{"version":"b7c30c7912c9c1d06db1fbf1db7efe3201cb9bf2063d25247998ba3dadbbc1ce","signature":"7751ad05cbea188242c53dbb5b29b765e6160303b8f1efe34743caf20bf51abe"},{"version":"4fb6bfbf96031a110716230fce13ed7575e93a2bd236b3528e64f98f0f805c16","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ae577e0632d0899a2801a4ae56f237f2a57e2b18a043880f8ea131e9298711ae","signature":"40d2d310f365b4fb5f2796ae880901fa7c87f904976afc3525417e6b651442b6"},{"version":"53b9579a157e5925729074d4b0cdedc9c3cea43cc741780da3e8480e94ab86be","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"3d34973c0a43d2670cc218efef0da7ef97c5a2e8c9e6fe4de4e9b26581129c70","1e27096329594b9ce92e48af7300c5c12af0f653e17bea991cdcf53ee44f8cd3",{"version":"550eaeba837e77c54465f71f378169de723620b4589404a556a7cba635141080","signature":"4632114f72f93bcce0d7fd6f0e7cc0caa5d1ee5d385e2679f5caf11c0ff8a38f"},{"version":"3db0a1a880106d6cc9f2557f82ffa2c115f60639702d1b20de2531c570e61c3e","signature":"bb1c48e634d76de23d15ccf97bac8bda66c8fd514959dae65494c9cde2808609"},"20e8a8947f10e0e64476423f7d598c11f833b930641dfad9d42a27a784b25eec","ca5fc4849f9aa4ea23b7a6b916e95e72b443b81ba10c9db7c0d67bd7e634b84b","a0a9cd98f694dbe9c3e25eb02dce3e77eb589fa79fe1f4e2300988471fcd7558","179ec2be3ba2bd6cef09e1943bdefce84888c53cbf75dd0cc66e25fe73066cf3",{"version":"9f417f1f08290025246fa5adb81bbc09eafe529094bfe374b8f8ebde64ff051b","signature":"0b91a9b21cd5ad0cd265376cbaa5ad1cd6202825416c4bcf1609c6673d78a0be"},{"version":"63ca3a49eea491f2b33d17b7c700ca4d46babe9f2e4ec38b483d3d3fead26fa6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ebd5941ab9aec7fe9c2eff104e28aa9358be037bc88adaf0941498195c5f5b7a","signature":"920e406c286c1b48a00a712bd6869df6197866c11966095b4fced2a4d6942401"},{"version":"862739bd9bcae80d5174b74304058516edae6fabd353c869429f887270a0a711","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"8bc45826c7d7e7f553304d8a4b37b072b5663a51f2d33a389dad7cf75ce03423","bd0c4802455112c73cc803d4236543988968e3fbd7ea88269a157ee9a7cd0a0a",{"version":"a53b6f23b3c3dc72c21e1e79541ea65ad6f6db26038f7f5bed8ed37561416e38","signature":"02ef334a3a2f20926816192ab2941ea3cb09636faa1286c2296be828869f03bf"},{"version":"e18a8307ba20268560c8b97d36435430c71fecdc241981cc735febe4aad7810f","signature":"e6a550648e241a622a4c69fa2f80e6ff23d38e05582c5cfbf4f2c0cbb96863d7"},"f317562638be1e553385fd3580938df16eadaa66ed0166a7ddda73dddda10792",{"version":"706976704dfaddf508c933961bcae27e0053d8c772238b757605ad22c7e2f1d0","signature":"0dd4ef3114c29c6efb50dca6d70b26b848ce37d839f02976161da75d2d59127c"},"407bc9fea483c544a530691e2518feed07a43b428c982e352a16ef632b7686c2","3d63ee168a9c6d4e74f56fbb9ef9d2b93bb15f57aeae852b3f1ce9765c39a8c1","7c3d3e47f81deabd1c746a1a735be460c75b4b0518e272376ce68540ba99afa7","1a9aaf3ff95be332e28fb001cb9aa6a92479bfc1e5e59f50bf6a2b4b485f39fa","836f948324d2cbd94e0ae630a36a801764b235bcdc5399332ad699edbda7a8e0",{"version":"b9039512a27d6a5a687011f0af8ccb0adcc07218a8ddbb4b5ae02d62fece2742","impliedFormat":99},{"version":"d11ebedbe79c2e165456a142132ab453b2572938ed76a6fe9324914363b7d6ac","impliedFormat":99},{"version":"f6ba66f3f6c4409e878f48161529c585b3c0e687c8917dd8f6c6464fc5cd4f8e","impliedFormat":99},{"version":"0366e97d9c966d748ad91b782e8ce843ebb692d93a1d211ef5b84cccbe8f53a8","impliedFormat":99},{"version":"91029799e2320b00f91b8495c5d657418ea6c29d47e2130963ef9ad2c4d77956","signature":"308695a8fda6f510e51efb0430009a61897fb5067344c8d84a84496de1274a3a"},{"version":"f77cd3c75934fcf0ded94d6a4e27fbe3a6b6cc9ef2e7fc4d94779f3c73d5f273","signature":"76fc5947686d1f4f95854ebdd328b964d50dc1067e43149867290203d03238b1"},{"version":"ffa6dc5cd20f4f3f37d191904ba733dddb4dc9f7e01f7688ebffa39712ab2ddb","signature":"776f4607976ab87e84944a655484a4183fca74b8cbd17cb07d9a11a6ad28c12d"},{"version":"77b2691041b0aa8d8b93e6e9ba342cf1f00853a2ce25ce83e60bf670b9e3d2c8","signature":"7017943360e6ac93765cab271d3b04f1b54ca26211e099453e4c9051b4d25df8"},{"version":"64a96138ace995cd167782b5ffa2efaca5d7a47eb85c88d5e6f6deac7590adeb","signature":"178e81c7913720c7c7c48b66c4abac8bc4643bcfcd0633e0055079f724f4b73c"},{"version":"e551a312691df9bb4cb420112f040e571203a8dfc74f0989edc2ef475c5ecaa9","signature":"3f89da23f0c251a47f8534a0b51510d1d782de69990984e592c2cc629746140b"},{"version":"de0fc40bebc22ae7b3014a2ce51f29e5623be0436ff6a3cc858fa6417d8822ad","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"296cc8ad7518cd0725fc4f80cff8ac9ae96d4b0bb35a56088feb3194f3666e94","signature":"80a5ca154cbf85949324181c775bd2ec7ec77dbbca27a29bbacc8aec4613d811"},{"version":"308db57716ae46b953b0ca5fd62371ac886cdc1bf46a3d4508602dd310873df2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2b8ce852d29c89add8ada518d9e5faa18684286f678fce952e6a4185156728af","signature":"26968396ba8985bd4a1c3e6fdeb001801e0c9e1f159f1cd4d6863bdb2276b9e7"},{"version":"48e3562599e3ad529ba4a93dc808d6e1573e2b4e90c16939af9ed81c8e5c3741","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4af5e2026a27f2b5f3cb342bbebc465c4cd5e35e627fcfe1c75565b7ab391149","signature":"67fdc67fa1fd9a9022c6fce8bcd6f18b41747340fa20ec6a9a9f2e6bb274439d"},{"version":"a8684261d37b6823210fce226eaef1d908d68a7c8fb7527e585ac392c176211f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"882b28abe64dae4932c83ebb71e4155da340929fe08a2055f3e573ef17f70fc3","impliedFormat":1},{"version":"4a3e425808751200a7709671667ad3d7e7cbfd0a06d469cab42adf06c2601f4a","impliedFormat":1},{"version":"401da46338f5b4f97c2a5f8a0faaace045c51aabd751d2dc704159f64feafe89","impliedFormat":1},{"version":"c705d4594093bcde53fc292c5526aedd3145170ceba73a9476ee97de6a915fe2","impliedFormat":1},{"version":"ea1376c6b14a99f8ecad98fd0a99024d25898f4848021351497e8947c76011c8","signature":"9810c75cae8b5bb5a64856a1249d92898fe0bc08fb7edfdf26e7d1fb64674978"},{"version":"f007c040305c84c3e3095241f9906f49f05d9d4b0a1450a0f823c84153eacd9a","signature":"b2a6477636bdba25498d233db9cbd9d4aaacb75b90ca6fd8168554a8f6a1329a"},{"version":"5dec30774c00d0b897604170016213d3b4fbd8178f54481cdf050548faddc863","signature":"805a5ea0e11b94dbf29528d7ae91318d07549b5c4813f106921ce6abe3abe3f7"},{"version":"65973b8a500c7f39ec3fed79f8028b145596552b767673a92ddd7aad4d93603a","signature":"d5492346380d075b56787e452acfd7bfea5896bea56f64444d9170b0d003c9a9"},"427c176e01d784765d1d629aab940fbdb0f2ec04b12b2532e67f3ce802530984",{"version":"fd5ffa0e69251f89c24bca37a58d06ef1663b3d0844f73f521ce708ea4c937b1","signature":"9b365a218919f6dade45f83796f8f4b0e820871ac894a1991010fa77ab0619c0"},"7999dc74b57cc2dfa1640ac746bb755420a4375541732f4bff420751a375d7a3","48c2bb16fb88f6d2e812f1fbfb6707bd80b48b2c7841331fe8a9cdb8ab303607",{"version":"ec96e838b31031f35b53278c35209f3067710536578d6ca428bdd1a07e70a60b","signature":"e23e63f94215cf92ed44b17c81a5cc023571e6e57668d286d0f66dfb7fd29e64"},{"version":"86348952b53fa8621ab7687cf1fa9d205d53bf2599272ffe0b2beb8566bda6af","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"f07ed8a46e4a069161f1b00721e35dbd4d9489a2a6a942bce3d7f74751e6e00a","0e27b7916e2907a803d593e5096b2e996f08f410108d8aecd2fb97c08d8ae276","26cefb8bd3b47bdcea683c75bd9c2669787fe73b2e66c4e08e4330ba6499a91d","27193294fd2edf37141e64f621989c1482225b878b65806a9a0eeb173e674342","1d7bbea69db5352ed7a4665178a29ebefa97632b8f97e59d5c66d29fe65b827d","1f3b3a6bcb21c07e6ba78826d57247059203ad8efbe285b7b2cfb0abc6f1b906","0f2d744d500f3684aa52a5f6e985621c564000829a990d8a3e03bc5456087427",{"version":"d2c5f1b4ad0f7672193162b28e1954c6a7769bab514d408c1e4303e8b925dc0f","signature":"768c2dfab2b90c6569c42a473907528eb55a45c3ed0d6256e35a8becaad3d8c5"},{"version":"f35b263571ce65106936e49be58c0a1f60ba57e131ef09c56283b0577936b4b3","signature":"cfaa98bda2da5362425dc511b0c2447d3b25087f0b74c61e1990f47a20913766"},{"version":"82bd9a752f9e1083f886ec3b89a3170fbfc01e9a64486b1ab358e927ce180b38","signature":"6299c5dae732f54265107ef4b7892a15d864a14f4f49a1f2272981d8a4dc759f"},"6f54366b2771ee9c2a960aa59111fd80055f249b0289e684fa404a956092e93b","ecea9552bea9bef02f5d7b4fc57f3e08392c91a1e4e298995c049bf464f57215","21abaa4c497371ac7095b4dc95b6b1d36019fce18ee7e8b43166d06b6e975c98",{"version":"39c72cb9358908fcbbeea86632a8bffed110458290cd3c3897ab74eabd6cbde5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"7682de844d36fb2452f50cfc78e71702e99f371aa0c94f9a96fd08f928ce252e","21767a3dfe71b2c233f64cdcaa7b8ded4d4b97c5a4c18ef2e25b009668feed75","cb9e26a96231ebc877436fb73a7bc69adde7e6fac18f719255490b74e5fbca8c","9ec2271f0802798d4f3ae9703803caadead606114035c8e1ac9f0937b01da516","6a669f6254854c5afb2badd1ffa95b210a74c5dfcf3fc7f5d2d39a736f9a9b1b","346d035f237bb7556fe6cbac88df56286fe42665d7db68cc5abf13071640ae87",{"version":"f35b263571ce65106936e49be58c0a1f60ba57e131ef09c56283b0577936b4b3","signature":"cfaa98bda2da5362425dc511b0c2447d3b25087f0b74c61e1990f47a20913766"},{"version":"2a25fca0da4e4f370aa3a2cb5698103d589897c91c699d406b4b290dc837e391","signature":"315bc7c950d58772966319f8401256cbf36525ea88146a7f78073fdabb3a9388"},"5c871138f7851c98e7ef99d17fa16bfb645ab1b1ff868046dc306bfa6341f063","88e23ea09266602ab79ff3488c19f41659e989ec2339ed4ec5fb01d2419b97ed","0d3aa0af2528b49ae80d137d7958dede4df3ef5d803e20c8f4cd843a0b8b3027",{"version":"2f70da821195e3bce87b69d3fa04aec728b23b2a429f38b7a4d621975f059dca","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"74c214c8a804e72b283cdc82a856a208602624a95440527edb3872558315e0d7","a625524edcb6f995f773bf301a24bcc1886490f383ef04bfd927b8c344902b23","9fe99d5c08f1f96dff35f3215e5ad941a44026abe540abb2e3a5101dcb7809d7","f2523cc0417db4f74c1f1aeeb732b92a3be7eb21e87de4fcce008fb48e5208de",{"version":"e3abce7533993a35b130215ced63264f8a1645903b28263e44163895bfd1b0af","signature":"eb0881c5e929fd7fb41dbaea899cea8453ebbff25a53b40bde3e722dca90b2ad"},{"version":"be0583585bffef2b7c26b202ada45303afd6849e3952ae0fb5895c98de376bfe","signature":"1f71876bf509d705f6dadfd7dfbbb169e6b2d024697691d6037e9ddc3c0c577b"},"70c2ae60abe14cdddb0b618038e1bca12fc0f9f6c03e547cb5ab783f6c12304a",{"version":"a8c91fa9d8eb9354acf51c0e58941056dc69a4baeff51fb82c4a6d285a19dbe1","signature":"102d68887b41127a6195e88f8f68bfc1ed172389c1398c194218f8d6ca22cfc4"},"45a4b3a6aecea5c2a988907602b904792f62a432fbf60b3a2567f8b8f80abcc3","fcd30f1bc3ebae06221802193b89f17f0c867434fb54565341001e2fb2bd226f",{"version":"aed84edf8705c35fd9505a2f4fabfee7e40fb40df3c604546c26cb6a75c82b5a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"a21b16e26fefcf0fa3501377571130b6b1dfea4e4e39ae9ca49e5202d397d289","06e1527ebbb87246d9cac1ea99a876072ecaa71622a7613df075455e6d663c26",{"version":"bda6fd8ff2fc3cbca56c344da1d065ba6101ace9c013f3b08e1f09a4c9c39597","signature":"ba2014afd9d39b84d2a3d448395b5bfefce1b7a643bb0b65a7b7bd96e871b48f"},{"version":"8ce8b4d639c545ff85d48a384cb1f94325617b168b40e47bc826277e0fa92f7d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"30896d6ea0a5eb69e28a53f4ad3ef187b21bcca9d5094e10648513acd2e39372","6f97152f2e26cdb3db48e10d286336abd2d47e1ede9d407d955f05dc6c019a9b",{"version":"0a82d644765ed83a922d59deb16dff565b7c9e1ee99bbda79fe55eab4bdc4097","signature":"b372ed7a377647cbf7b25df64b2801a596b28a57f5ebe7ea2ebf637482503238"},{"version":"999109c5cf1985f593520160e98807309823b230db3a1694febc44ae5f98d377","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e2fc78ec8b0545d241c7baa745530653faf6c182f1aadc82e0ac2ede162f36e3","signature":"ca2d5a2abb4eb48f173d4015b325550d8a0c2b2bdfb9c5b36f9a61531c06668f"},"3d8e1e18aef442be93caa18fed399e0e77954ccc1545263e7dc7dd75ea81d013",{"version":"ee73e84e6cc783846a48637944f57ebc852c9aa3f1b2efc39753d33c232ea15b","signature":"f96f3f7e1612d413c95a66e638a4fec032fd9653f3a6210ec79e5830fcfe5761"},{"version":"2a469290db845f665c6f3639d01a626e58f6ff828a48b99b8f1907e55cf6b673","signature":"675dc0498b58f7e94e3b28fc542c50db2a2176fbe2a5f5013013b1033b688ba1"},"32dcf3ae8749367f1f8098f89121bc4e39a0e323bca3ec310075027bce601731","48a2da34607388aaa01eed1bd40fbdc9ab1b9de9a82a882e8f2b9099e7dd61e0",{"version":"17c56128d94a244896fdccb6f11672f66f8e14eb8207bd696495e93f21f68299","signature":"006605e6a8c0385918083afad005e1647f69ffb9a314cb0e54f3cb165b6f1f30"},{"version":"993d951a04427a1d2f82754b54dfdb0087dd5b46cf724392f4673f619837e79d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"997c98da784db39942db1efa0d850088df1da2bc1a04c9c7fd90c9a2b21904bc","534c82fa9401d00ced814e354954212673678b88ea9c2b3db06ed55fdec0e694",{"version":"6b5c75bce0492de88a07983b2d5fdc97611cd75174cb026ac0ea677cfdf662f9","signature":"ada185e845c9ebd71e720a1794e7fc1d6362fc35692d62a918b965dc0800285c"},"6d18025540b0b3efa639a5c7c1d831f193c20bf401e8b35b5ad4c6f9169bce19",{"version":"eccd85a9a6f74a687b276605f42f963c9f715ac02aa56666e3663e13eb14b151","signature":"233d2d80a6eba34812e44e27ddc1e0d04c95aca7ac4d981ab432dde3b6ea6ee2"},{"version":"abe87a26da7671627c98d49b5cfd4b41e7e2976253d2fda7f269271f7cf2d636","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c3e5e87f92eef41dfe55fbebb90ca4d638482026f8fd35ab22b68340b28b6e12","signature":"777b1090495d3301be05b674c1716d3dea2caac13ec0a8afdf5d30a2c02fc4b5"},"8ad0691df816c60346e498cad49a55375a35ba5e89332434c19034c8da5cc169",{"version":"03a1a2e6e3cad07708ecd7b4ecf0136a459081d59fb01641f1a77fd64acbf4c0","signature":"6f937a36a0554c0813743f5ada9665f6bcb67d0d2839ea9c404a5aec7feef8de"},{"version":"e9ead03cb35f532742b7fb1569a777d489810582df6457ac6f487faf6a2cc1cb","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"39e348b373ece0f0621d887e6036e78b6eed048072b36e69d5cdd363d0aa502a","signature":"b32d06279ac12db33a254ce2424c37b0e757502d55ae1dacf7d77240842a07cb"},{"version":"1bdaaa929028e63260ee0b975c2287efd7f44c1696c9673be52e412d29882012","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"cd0f1cb9083130a1097493a9f6cb24131a4e9bb44c6a844f8599508250d6c480","signature":"a0126b2500faf07aa59d3709c18de53b15162f63373203d0784cca319b1e960b"},{"version":"da5f86e1a817ee8c7ed9909ccb8cb61446c829e9af18ccb62ca3aad2ff814fe6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"043c8057a576bf31994ee67ee9fd477dd213b2e7dd2ad600360e39877f8590d2","signature":"ca1eee8eda1dcec392d95c606fabf41ded7f9e872dfe8f1a9c52db8795af332d"},{"version":"f0466e01b4c1b6a23b48f0e4fb98cc3de57a77a19147f43682c2464c7c7e5966","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b733abd41cdbd2c4077cc04e8cbc870b37eacb61ae72bf2759846f7f6e1cb9a7","signature":"08b19930b4ba7c5a6eeafab4eac1c3b2ff7be1cf733f566fa4c8c93f3618d847"},{"version":"1305c9e3d3951c40846b32f03c060b87be14558fe68ee2d2061f4fe1f0318783","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"73adaea7b3c6826474dc85911584c31d876c3436983e8d0dc50031b270fb3bbe","signature":"3050c3f3df8238f4ff45a8f8f38ea5ad94ad7e2b9bdc259d0aaddcc511dc91fd"},"eac0823717bcbca9324ff033da8a3728ebff39bd632fdc416c2d9a1aa8fa8dbd","91c2126b8071f1f23f875cf8f70b72c557b0d2a0409d6b41db621f73ded067fb","3393e9a94ec39b0a15775de0daa23ff29c82a2260f70cc49418cb5e7989f6de4",{"version":"d75f8d91e48dc824ccb33de75d52cf3ffce1160515374da45d96df868e77ef96","signature":"06e0e701edc4cbf8c7221158331dc495238589a46f050ea902713df7d52eabd8"},{"version":"0fe497dd62fcc286f6f7f11793d4ba486a0e9a49d83e96272ebb99eac550e552","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8e5a1adaae977af48997dec89d6cc6075aee453b661faf7252b4b3a44c7f2bbb","impliedFormat":1},{"version":"04471dc55f802c29791cc75edda8c4dd2a121f71c2401059da61eff83099e8ab","impliedFormat":99},{"version":"5c54a34e3d91727f7ae840bfe4d5d1c9a2f93c54cb7b6063d06ee4a6c3322656","impliedFormat":99},{"version":"db4da53b03596668cf6cc9484834e5de3833b9e7e64620cf08399fe069cd398d","impliedFormat":99},{"version":"ac7c28f153820c10850457994db1462d8c8e462f253b828ad942a979f726f2f9","impliedFormat":99},{"version":"f9b028d3c3891dd817e24d53102132b8f696269309605e6ed4f0db2c113bbd82","impliedFormat":99},{"version":"fb7c8d90e52e2884509166f96f3d591020c7b7977ab473b746954b0c8d100960","impliedFormat":99},{"version":"0bff51d6ed0c9093f6955b9d8258ce152ddb273359d50a897d8baabcb34de2c4","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"13918e2b81c4288695f9b1f3dcc2468caf0f848d5c1f3dc00071c619d34ff63a","impliedFormat":99},{"version":"120a80aa556732f684db3ed61aeff1d6671e1655bd6cba0aa88b22b88ac9a6b1","affectsGlobalScope":true,"impliedFormat":99},{"version":"da0f84fcd93700b4a5fbf9c6f166a6cc19fc798231bff56dd1e3875bfc6966eb","impliedFormat":1},{"version":"634ff08e0143bec98401c737de7bfc6883bfec09200bd3806d2a4cfc79c62aaa","impliedFormat":1},{"version":"90a86863e3a57143c50fec5129d844ec12cef8fe44d120e56650ed51a6ce9867","impliedFormat":1},{"version":"472c0a98c5de98b8f5206132c941b052f5cc1ae78860cb8712ac4f1ebf4550ca","impliedFormat":1},{"version":"538c4903ef9f8df7d84c6cf2e065d589a2532d152fa44105c7093a606393b814","impliedFormat":1},{"version":"cfcb6acbb793a78b20899e6537c010bfbbf939c77471abcdc2a41faf9682ca1a","impliedFormat":1},{"version":"a7798e86de8e76844f774f8e0e338149893789cdc08970381f0ae78c86e8667f","impliedFormat":1},{"version":"eebc21bb922816f92302a1f9dcefc938e74d4af8c0a111b2a52519d7e25d4868","impliedFormat":1},{"version":"6b359d3c3138a9f4d3a9c9a8fda24be6fd15bd789e692252b53e68ce99db8edc","impliedFormat":1},{"version":"9488b648a6a4146b26c0fd4e85984f617056293092a89861f5259a69be16ca5c","impliedFormat":1},{"version":"e156513655462b5811a8f980e32ccd204c19042f8c9756430fe4e8d6f7c1326e","impliedFormat":1},{"version":"5679b694d138b8c4b3d56c9b1210f903c6b0ca2b5e7f1682a2dd41a6c955f094","impliedFormat":1},{"version":"ca8da035b76fb0136d2c1390dda650b7979202dbe0f5dc7eaefcde1c76dee4f4","impliedFormat":1},{"version":"4b1022a607444684abeee6537e4cace97263d1ef047c31b012c41fdc15838a79","impliedFormat":1},{"version":"dd0271250f1e4314e52d7e0da9f3b25a708827f8a43ceff847a2a5e3fd3283e8","affectsGlobalScope":true,"impliedFormat":1},{"version":"47971d8a8639a2a2dd684091c6e7660ec5909fed540c4479ca24e22ac237194e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e1075312b07671ef1cbf46409a0fa2eb2b90bb59c6215c94f0e530113013eeda","impliedFormat":1},{"version":"1bfd63c3f3749c5dc925bb0c05f229f9a376b8d3f8173d0e01901c08202caf6f","impliedFormat":1},{"version":"da850b4fdbabdd528f8b9c2784c5ba3b3bedc4e2e1e34dcd08b6407f9ec61a25","impliedFormat":1},{"version":"e61c918bb5f4a39b795a06e22bc4d44befcefd22f6a5c8a732c9ed0b565a6128","impliedFormat":1},{"version":"ee56351989b0e6f31fd35c9048e222146ced0aac68c64ce2e034f7c881327d6d","impliedFormat":1},{"version":"f58b2f1c8f4bcf519377d39f9555631b6507977ad2f4d8b73ac04622716dc925","impliedFormat":1},{"version":"4c805d3d1228c73877e7550afd8b881d89d9bc0c6b73c88940cffcdd2931b1f6","impliedFormat":1},{"version":"4aa74b4bc57c535815ae004550c59a953c8f8c3c61418ac47a7dcfefba76d1ba","impliedFormat":1},{"version":"78b17ceb133d95df989a1e073891259b54c968f71f416cd76185308af4f9a185","impliedFormat":1},{"version":"d76e5d04d111581b97e0aa35de3063022d20d572f22f388d3846a73f6ce0b788","impliedFormat":1},{"version":"0a53bb48eba6e9f5a56e3b85529fbbe786d96e84871579d10593d4f3ae0f9dba","impliedFormat":1},{"version":"d34fb8b0a66f0a406c7ce63a36f16dda7ff4500b11b0bd30a491aa0d59336d1f","impliedFormat":1},{"version":"282b31893b18a06114e5173f775dd085597ca220d183b8bd474d21846c048334","impliedFormat":1},{"version":"ed27d5ce258f069acf0036471d1fbb56b4cb3c16d7401b52a51297eca651db62","impliedFormat":1},{"version":"ec203a515afd88589bf1d384535024f5b90ebe6b5c416fb3dcca0abd428a8ba4","impliedFormat":1},{"version":"32a2a1374b57f0744d284ca93b477bd97825922513a24dfe262cbf3497377d96","impliedFormat":1},{"version":"a8b60d24dc1eb26c0e987f9461c893744339a7f48e4496f8077f258a644cffab","impliedFormat":1},{"version":"3f9df27a77a23d69088e369b42af5f95bcb3e605e6b5c2395f0bfcd82045e051","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fd080a9458c6d6f3eb6d4e2b12a3ec498d7d219863e9dca0646bdee9acce875","impliedFormat":1},{"version":"e5d31928bee2ba0e72aeb858881891f8948326e4f91823028d0aea5c6f9e7564","affectsGlobalScope":true,"impliedFormat":1},{"version":"9a9ba9f6fd097bb2f57d68da8a39403bbe4dc818b8ccd155a780e4e23fa556f2","impliedFormat":1},{"version":"e50c4cd1f5cbce3e74c19a5bbf503c460e6ae86597e6d648a98c7f6c90b596dd","impliedFormat":1},{"version":"fa140f881e20591ce163039a7968b54c5e51c11228708b4f9147473d06471cf5","affectsGlobalScope":true,"impliedFormat":1},{"version":"295eca0c47be1191690fd2fe588195fff9d4dc43852aceb8b4cab2aa634579f0","impliedFormat":1},{"version":"59ee7346e19b0050508a592702871dc943083c6dcb69a47d52e888115d840781","impliedFormat":1},{"version":"067712491fb2094c212c733dd8e2d56e74c309a9ce9dac9e919286b7245a1eb4","impliedFormat":1},{"version":"a5eae58ac55bd30c42359e4b01fb2be5eddac336869d3f04ffb4daa54b58f009","impliedFormat":1},{"version":"d12d691ef8933e8db39f2ca81d6973940ff5e37bb421752f5b6e7bc15dea3abf","impliedFormat":1},{"version":"4c5f8bd9b3a1aae4e4fddfee41667e495a045f73ed603993038fa6a8ba92fa14","impliedFormat":1},{"version":"dfb274ab0f319cf18ce7152067c25f984c7fd1924fc72b3f66734588444c934a","impliedFormat":1},{"version":"108c8c05cbc3fbbbd4ff4fc0779c9bef55655c28528eb0f77829795dc9f0b484","impliedFormat":1},{"version":"a7e5444d24cdec45f113f4fb8a687e1c83a5d30c55d2da19a04be71108ad77bd","impliedFormat":1},{"version":"41ec17e218b7358fcff25c719bc419fec8ec98f13e561b9a33b07392d4fec24c","impliedFormat":1},{"version":"23c204326746e981e02d7f0a15ab6f8015f9035998cb3766c9ddbf8ea247aea2","impliedFormat":1},{"version":"25f994b5d76ce6a3186a3319555bbba79706dac2174019915c39ac6080e98c7e","impliedFormat":1},{"version":"dfa4e2c6a612d43851ccbc499598cb006a3a78bc8c7f972c52078f862fa84e47","impliedFormat":1},{"version":"02c1705fa902f172be6e9020d74bcd92ce5db8d2ef3e1b03aabc2ac8eb46c3db","impliedFormat":1},{"version":"99d2d8a0c7bb3dd77459552269a7b5865fa912cedab69db686d40d2586b551f7","impliedFormat":1},{"version":"b47abe58626d76d258472b1d5f76752dd29efe681545f32698db84e7f83517df","impliedFormat":1},{"version":"3a99bbbbbf42e45c3d203e7c74f1319b79f9821c5e5f3cdd03249184d3e003ce","impliedFormat":1},{"version":"aaacc0e12ab4de27bdf131f666e315d8e60abec26c7f87501e0a7806fc824ae6","impliedFormat":1},{"version":"3b4195afd41a9215afc7be0820f8083f6bd2e85e5e0b45bb0061fb041944711e","impliedFormat":1},{"version":"108df8095f5e25d7189dd0d1433ac2df75ec40c779d8faf7d2670f1485beb643","impliedFormat":1},{"version":"ddd3c1d3c9ff67140191a3cf49b09875e20f28f2fc5535ae5ea16e14293a989b","impliedFormat":1},{"version":"7b496e53d5f7e1737adcb5610516476ee055bf547918797348f245c68e7418fe","impliedFormat":1},{"version":"577f44389d7faedd7fc9c0330caf73140e5d0d5f6c968210bff78be569f398a7","impliedFormat":1},{"version":"3046c57724587a59bceefadd30040d418e9df81b9f3cfd680618a3511302ed7a","impliedFormat":1},{"version":"15ccc911ed15397e838471bfe6d476c28deffe976c05cb057e6b1ea7491242c2","impliedFormat":1},{"version":"64b5a5ebdaead77a9a564aa938f4fb7a45e27cda7441d3bee8c9de8a4df5a04f","impliedFormat":1},{"version":"a48037f7af5f80df8973db5e562e17566407541de284b8dadf1879ea3aed8a2f","impliedFormat":1},{"version":"dab97d96ce986857150db03f0d435b44c060d126b4a387c7807f4e9f6c92e531","impliedFormat":1},{"version":"85f39366ea7bc5e34b596fc97de18a7e377856755e789d8e931054f2191d9b8b","impliedFormat":1},{"version":"daf3ea3d49f6e8a2fa70b7ca1f21bd97f1b65021b31fbfccb73dd55f86abb792","impliedFormat":1},{"version":"b15bd260805f9dd06cd4b2b741057209994823942c5696fd835e8a04fb4aab6b","impliedFormat":1},{"version":"6635a824edf99ed52dbd3502d5bce35990c3ed5e2ec5cef88229df8ac0c52b06","impliedFormat":1},{"version":"d6577effa37aae713c34363b7cc4c84851cbabe399882c60e2b70bcbb02bfa01","impliedFormat":1},{"version":"8eaf80ad438890fe5880c39a7bbf2c998ce7d29d4c14dd56d82db63bd871eefb","impliedFormat":1},{"version":"9b3e7f776f312c76ac67e1060e5398d7ac2c69d6a3a928a9daaae2eb05b15f56","impliedFormat":1},{"version":"202042eccb4789b7dee51ba9ecab0b854834ea5c1d6a3946504bfc733d4468c3","impliedFormat":1},{"version":"2b2ef76a9f36094b07ee6f76a5ac6903f2f65c0a20283201814a8d1e752cb592","impliedFormat":1},{"version":"8882e4e087d0bc8cc713cb3d8090c45d33e373e6f5c83e0f8d00fe6a950ef875","impliedFormat":1},{"version":"0cf60f081761b337853493462a9d5626b11fe7b02a019d86c7b21628b5f928f5","impliedFormat":99},"5d2bcff208b51a9e89e69c72ef77ee0d8ec631955709d58f27d6b28cb9f500a2","cdd2c537282e5b19b1334da23868924c3b24efd7c1c81973d6943fd0816be588","291c71b4b845534e88b74ddecd4fdbe277439d51f0cc8621a802b3aed345e93d",{"version":"06a7af50537caca7a4f95bbded638d09cf988fd131c5d115b384cf6059c43833","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"5686c861c7ab2d218b01d329a31f78120add90e1f48b1cfc969887185151021e","705d82b4224d96c4a4f1ef0390cd606f242daec2f66a43e5c22865f825049c73",{"version":"ad42288f8c9ebfd4451e4256a2f091cfc26b958d29db3612c19efbbb476882a2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"59b54146333f3ad62db9f636c988f09378b61c55c4bde0541602011d458a1ca9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b7724c5f8c92bf25a109abae1de5f939f4b2f08421c288329bbc01bcc515a265","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","bdcf18ed1be6ef1a48c815e6b6c76891ce41b2f515e1e56320b9095fa9e3b2ce","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"d828ff531a832da354516464c5e25ca4970561f97ed02c77cb02d91aec4e80a6","affectsGlobalScope":true},"79b8f465a03c8519a7451b609f77c7b0823ed324878c4254122fbbd8ff518032",{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[559,561],775,776,782,[805,811],[862,953],958,[961,966],970,972,973,1025,1026,1104,[1114,1118],[1120,1125],[1130,1133],[1159,1196],[1207,1277],[1288,1348],[1353,1365],[1370,1456],[1546,1559]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[1557,1],[1558,2],[1559,3],[1555,4],[559,2],[1556,5],[560,6],[776,7],[1111,8],[1110,9],[1109,10],[1113,11],[1112,12],[1108,13],[1021,13],[1022,14],[1352,15],[1351,16],[1350,17],[1349,18],[1080,19],[1081,20],[1200,18],[1199,21],[1198,22],[1204,23],[1203,24],[1202,21],[1197,21],[1139,25],[1201,26],[1069,27],[1051,28],[1054,29],[1049,30],[1067,31],[1034,32],[1070,33],[1055,32],[1056,34],[1071,32],[1065,35],[1057,32],[1059,36],[1060,32],[1061,37],[1058,32],[1033,38],[1062,31],[1063,32],[1072,39],[1064,27],[1073,40],[1066,41],[1068,42],[1032,2],[1137,43],[1138,44],[1205,45],[1206,46],[1018,47],[1136,48],[1052,2],[1283,13],[1016,2],[1017,49],[1134,10],[1020,50],[1053,51],[1044,10],[1075,52],[1076,53],[1085,53],[1084,54],[1087,13],[1086,13],[1103,55],[1102,56],[1088,13],[1089,13],[1090,57],[1091,58],[1092,52],[1093,54],[1095,53],[1094,13],[1083,59],[1078,60],[1082,61],[1077,62],[1097,63],[1096,64],[1101,13],[1098,65],[1099,13],[1079,66],[1127,67],[1126,13],[1152,52],[1145,53],[1156,13],[1155,13],[1143,13],[1158,68],[1157,69],[1150,53],[1151,13],[1149,13],[1140,21],[1148,13],[1147,57],[1144,58],[1146,52],[1135,70],[1153,13],[1154,13],[1141,21],[1142,13],[1100,13],[1119,71],[1281,72],[1287,73],[1286,74],[1285,72],[1279,72],[1278,18],[1284,75],[1282,72],[1280,72],[1019,76],[1129,77],[1128,51],[1048,78],[1047,79],[1045,2],[1046,80],[1074,81],[1038,10],[1041,82],[1039,2],[1042,83],[1036,84],[1037,85],[1043,86],[1040,87],[1050,10],[1028,88],[1030,89],[1031,90],[1027,2],[1029,2],[1012,91],[403,2],[566,2],[1006,92],[637,2],[779,93],[1008,94],[1014,95],[1013,96],[1004,97],[954,2],[955,98],[956,99],[957,100],[800,2],[797,2],[796,2],[791,101],[802,102],[787,103],[798,104],[790,105],[789,106],[799,2],[794,107],[801,2],[795,108],[788,2],[786,109],[785,110],[1457,110],[784,103],[804,111],[1530,112],[1531,112],[1533,113],[1532,112],[1525,112],[1526,112],[1528,114],[1527,112],[1503,2],[1505,2],[1504,2],[1507,115],[1506,2],[1470,116],[1468,117],[1471,2],[1518,118],[1472,112],[1508,119],[1517,120],[1509,2],[1512,121],[1510,2],[1513,2],[1515,2],[1511,121],[1514,2],[1516,2],[1469,122],[1544,123],[1529,112],[1524,124],[1534,125],[1540,126],[1541,127],[1543,128],[1542,129],[1522,124],[1523,130],[1519,131],[1521,132],[1520,133],[1535,112],[1539,134],[1536,112],[1537,135],[1538,112],[1473,2],[1474,2],[1477,2],[1475,2],[1476,2],[1479,2],[1480,136],[1481,2],[1482,2],[1478,2],[1483,2],[1484,2],[1485,2],[1486,2],[1487,137],[1488,2],[1502,138],[1489,2],[1490,2],[1491,2],[1492,2],[1493,2],[1494,2],[1495,2],[1498,2],[1496,2],[1497,2],[1499,112],[1500,112],[1501,139],[783,2],[640,140],[638,2],[1005,2],[161,141],[162,141],[163,142],[101,143],[164,144],[165,145],[166,146],[99,2],[167,147],[168,148],[169,149],[170,150],[171,151],[172,152],[173,152],[174,153],[175,154],[176,155],[177,156],[102,2],[100,2],[178,157],[179,158],[180,159],[220,160],[181,161],[182,162],[183,161],[184,163],[185,164],[186,165],[187,166],[188,166],[189,166],[190,167],[191,168],[192,169],[193,170],[194,171],[195,172],[196,172],[197,173],[198,2],[199,2],[200,174],[201,175],[202,174],[203,176],[204,177],[205,178],[206,179],[207,180],[208,181],[209,182],[210,183],[211,184],[212,185],[213,186],[214,187],[215,188],[216,189],[217,190],[103,161],[104,2],[105,191],[106,192],[107,2],[108,193],[109,2],[152,194],[153,195],[154,196],[155,196],[156,197],[157,2],[158,144],[159,198],[160,195],[218,199],[219,200],[224,201],[488,10],[225,202],[223,203],[490,204],[489,205],[803,10],[221,206],[486,2],[222,207],[90,2],[92,208],[485,10],[255,10],[781,209],[780,2],[669,210],[774,211],[665,2],[668,212],[678,213],[666,214],[667,215],[641,216],[647,217],[648,218],[646,2],[615,2],[624,219],[623,220],[643,219],[626,221],[628,222],[671,222],[627,223],[635,224],[634,2],[622,225],[616,226],[663,227],[618,228],[620,229],[662,2],[649,228],[619,2],[621,226],[617,2],[995,2],[997,230],[996,2],[639,2],[981,231],[980,232],[979,233],[987,234],[988,235],[985,236],[986,237],[983,238],[984,239],[982,240],[1024,241],[1023,242],[959,2],[91,2],[583,2],[657,243],[659,244],[658,245],[656,246],[655,2],[1367,247],[1366,2],[1368,248],[845,249],[814,250],[824,250],[815,250],[825,250],[816,250],[817,250],[832,250],[831,250],[833,250],[834,250],[826,250],[818,250],[827,250],[819,250],[828,250],[820,250],[822,250],[830,251],[823,250],[829,251],[835,251],[821,250],[836,250],[841,250],[842,250],[837,250],[813,2],[843,2],[839,250],[838,250],[840,250],[844,250],[607,2],[609,252],[608,2],[1015,10],[812,253],[1105,254],[851,255],[850,256],[857,257],[859,258],[855,259],[854,260],[858,256],[852,261],[849,262],[860,263],[861,263],[853,264],[847,2],[848,265],[1107,266],[1106,267],[856,2],[971,10],[511,268],[516,269],[523,270],[506,271],[259,2],[267,272],[407,273],[410,274],[382,2],[395,275],[402,276],[284,2],[384,2],[265,2],[381,277],[427,278],[266,2],[257,279],[409,280],[411,281],[412,282],[483,283],[376,284],[329,285],[389,286],[390,287],[388,288],[387,2],[383,289],[408,290],[268,291],[453,2],[454,292],[295,293],[269,294],[296,293],[332,293],[235,293],[405,295],[404,2],[394,296],[501,2],[244,2],[522,297],[461,298],[462,299],[458,300],[540,2],[359,2],[463,301],[459,302],[545,303],[544,304],[539,2],[310,2],[362,305],[361,2],[538,306],[460,10],[315,307],[322,308],[324,309],[314,2],[319,310],[321,311],[323,312],[318,313],[316,2],[320,314],[541,2],[537,2],[543,315],[542,2],[313,316],[532,317],[535,318],[303,319],[302,320],[301,321],[548,10],[300,322],[289,2],[550,2],[968,323],[967,2],[551,10],[552,324],[227,2],[391,325],[392,326],[393,327],[231,2],[396,2],[251,328],[226,2],[475,10],[233,329],[474,330],[473,331],[464,2],[465,2],[472,2],[467,2],[470,332],[466,2],[468,333],[471,334],[469,333],[264,2],[261,2],[262,293],[416,2],[421,335],[422,336],[420,337],[418,338],[419,339],[414,2],[481,301],[256,301],[510,340],[517,341],[521,342],[350,343],[349,2],[344,2],[497,344],[505,345],[377,346],[378,347],[456,348],[366,2],[479,349],[354,10],[371,350],[482,351],[367,2],[370,352],[368,2],[480,353],[477,354],[476,2],[478,2],[374,2],[452,355],[239,356],[352,357],[356,358],[372,359],[375,360],[364,361],[357,362],[504,363],[430,364],[348,365],[236,366],[503,367],[232,368],[423,369],[415,2],[424,370],[441,371],[413,2],[440,372],[98,2],[435,373],[260,2],[455,374],[431,2],[245,2],[247,2],[386,2],[439,375],[263,2],[287,376],[373,377],[293,378],[353,2],[438,2],[417,2],[443,379],[444,380],[385,2],[446,381],[448,382],[447,383],[397,2],[437,366],[450,384],[347,385],[436,386],[442,387],[272,2],[276,2],[275,2],[274,2],[279,2],[273,2],[282,2],[281,2],[278,2],[277,2],[280,2],[283,388],[271,2],[339,389],[338,2],[343,390],[340,391],[342,392],[345,390],[341,391],[252,393],[331,394],[500,395],[498,2],[527,396],[529,397],[493,398],[528,399],[240,400],[237,400],[270,2],[254,401],[253,402],[249,403],[250,404],[258,405],[286,405],[297,405],[333,406],[298,406],[242,407],[241,2],[337,408],[336,409],[335,410],[334,411],[243,412],[484,413],[285,414],[492,415],[457,416],[487,417],[491,418],[380,419],[379,420],[360,421],[346,422],[328,423],[330,424],[327,425],[449,426],[351,2],[515,2],[248,427],[451,428],[499,429],[358,2],[288,430],[365,431],[363,432],[290,433],[425,434],[494,2],[291,435],[426,435],[513,2],[512,2],[514,2],[496,2],[495,2],[428,436],[355,2],[325,437],[246,438],[304,2],[230,439],[292,2],[519,10],[229,2],[531,440],[312,10],[525,301],[311,441],[508,442],[309,440],[234,2],[533,443],[307,10],[308,10],[299,2],[228,2],[306,444],[305,445],[294,446],[369,170],[429,170],[445,2],[433,447],[432,2],[317,316],[238,2],[326,10],[502,328],[509,448],[93,10],[96,449],[97,450],[94,10],[95,2],[406,192],[401,451],[400,2],[399,452],[398,2],[507,453],[518,454],[520,455],[524,456],[969,457],[526,458],[530,459],[558,460],[534,460],[557,461],[536,462],[546,463],[547,464],[549,465],[553,466],[556,328],[555,2],[554,467],[675,193],[676,468],[846,469],[772,470],[679,2],[680,470],[771,471],[773,472],[603,473],[601,474],[602,475],[590,476],[591,474],[598,477],[589,478],[594,479],[604,2],[595,480],[600,481],[606,482],[605,483],[588,484],[596,485],[597,486],[592,487],[599,473],[593,488],[793,489],[792,2],[1011,490],[1010,491],[1369,492],[989,2],[990,493],[991,2],[992,494],[1035,2],[612,495],[574,496],[575,497],[578,498],[567,499],[577,500],[573,501],[565,2],[579,502],[580,503],[568,2],[569,2],[571,504],[570,2],[572,505],[434,506],[587,2],[993,507],[976,2],[998,508],[978,509],[1000,510],[994,511],[1003,512],[1001,513],[977,514],[974,10],[999,515],[1545,516],[975,10],[1002,517],[1467,518],[1459,2],[1458,2],[1466,519],[1461,520],[1464,521],[1465,522],[1460,2],[1462,2],[1463,523],[960,2],[644,2],[636,2],[88,2],[89,2],[14,2],[15,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[64,2],[65,2],[66,2],[11,2],[67,2],[68,2],[69,2],[70,2],[71,2],[72,2],[12,2],[73,2],[74,2],[75,2],[76,2],[77,2],[1,2],[78,2],[79,2],[13,2],[80,2],[81,2],[82,2],[83,2],[84,2],[85,2],[86,2],[87,2],[1009,2],[128,524],[140,525],[125,526],[141,527],[150,528],[116,529],[117,530],[115,531],[149,532],[144,533],[148,534],[119,535],[137,536],[118,537],[147,538],[113,539],[114,533],[120,540],[121,2],[127,541],[124,540],[111,542],[151,543],[142,544],[131,545],[130,540],[132,546],[135,547],[129,548],[133,549],[145,532],[122,550],[123,551],[136,552],[112,527],[139,553],[138,540],[126,551],[134,554],[143,2],[110,2],[146,555],[1007,556],[563,557],[614,558],[582,559],[564,557],[562,2],[581,560],[613,2],[611,2],[584,561],[610,562],[576,563],[586,2],[585,564],[670,565],[778,566],[664,567],[645,568],[633,569],[629,570],[661,2],[630,221],[653,571],[650,572],[673,573],[672,574],[631,575],[652,576],[625,2],[632,577],[777,578],[674,579],[660,580],[677,581],[654,582],[1560,583],[651,2],[642,2],[757,584],[760,585],[762,586],[769,587],[764,2],[765,2],[763,588],[766,589],[758,2],[759,2],[770,590],[761,591],[767,2],[768,592],[751,593],[755,594],[752,594],[748,593],[756,595],[753,596],[754,594],[749,597],[750,598],[744,599],[688,600],[690,601],[743,2],[689,602],[747,603],[746,604],[745,605],[681,2],[691,600],[692,2],[683,606],[687,607],[682,2],[684,608],[685,609],[686,2],[693,610],[694,610],[695,610],[696,610],[697,610],[698,610],[699,610],[700,610],[701,610],[702,610],[703,610],[704,610],[705,610],[707,610],[706,610],[708,610],[709,610],[710,610],[711,610],[742,611],[712,610],[713,610],[714,610],[715,610],[716,610],[717,610],[718,610],[719,610],[720,610],[721,610],[722,610],[723,610],[724,610],[726,610],[725,610],[727,610],[728,610],[729,610],[730,610],[731,610],[732,610],[733,610],[734,610],[735,610],[736,610],[737,610],[738,610],[741,610],[739,610],[740,610],[1170,612],[1171,613],[1132,614],[1172,615],[1173,616],[1160,617],[1174,618],[1175,619],[1161,620],[1176,621],[1177,622],[1162,623],[1178,624],[1179,625],[1165,626],[1180,627],[1181,628],[1164,629],[811,630],[810,631],[1167,624],[1169,632],[1168,633],[1189,634],[1190,635],[1182,636],[1191,637],[1192,638],[1183,639],[1193,640],[1194,641],[1184,642],[1195,643],[1196,644],[1185,642],[1186,645],[1188,646],[1187,647],[1214,648],[1215,649],[1209,650],[1216,651],[1217,652],[1210,653],[1211,654],[1213,655],[1212,656],[1225,657],[1226,658],[1219,659],[1227,660],[1228,661],[1220,662],[1229,663],[1230,664],[1221,665],[864,666],[1222,667],[1224,668],[1223,669],[866,670],[865,671],[868,672],[867,673],[872,674],[871,673],[870,675],[869,673],[874,676],[873,673],[876,677],[875,673],[878,678],[877,673],[882,679],[881,673],[880,680],[879,673],[888,681],[887,673],[890,682],[889,673],[885,683],[892,684],[891,685],[894,686],[893,685],[896,687],[895,685],[900,688],[899,685],[898,689],[897,685],[902,690],[901,685],[904,691],[903,673],[907,692],[908,692],[909,692],[910,693],[905,692],[906,694],[916,695],[915,673],[914,696],[913,673],[912,697],[911,673],[920,698],[919,673],[918,699],[917,673],[922,700],[921,673],[924,701],[923,673],[926,702],[925,673],[928,703],[927,673],[930,704],[929,673],[931,692],[932,692],[933,705],[886,683],[935,706],[934,673],[937,707],[936,673],[939,708],[938,673],[884,709],[883,673],[941,710],[940,673],[943,711],[942,712],[947,713],[946,673],[945,714],[944,673],[1237,715],[1238,716],[1232,717],[1239,718],[1240,719],[1233,720],[1241,721],[1242,722],[1231,723],[1234,724],[1236,725],[1235,726],[1256,727],[1257,728],[1249,729],[1258,730],[1259,731],[1250,732],[1260,733],[1261,734],[1252,735],[1262,736],[1263,737],[1251,738],[1253,739],[1255,740],[1254,741],[1264,742],[1265,743],[1243,720],[1266,744],[1267,745],[1244,623],[1268,746],[1269,747],[1245,748],[1246,749],[1248,750],[1247,751],[1298,752],[1299,753],[1290,754],[1300,755],[1301,756],[1289,757],[1302,758],[1294,759],[1303,760],[1304,761],[1291,762],[1305,763],[1306,764],[1292,732],[1307,765],[1308,766],[1293,767],[1295,768],[1297,769],[1296,770],[1309,771],[1310,772],[1271,773],[1311,774],[1274,775],[1312,776],[1313,777],[1272,778],[1314,779],[1315,780],[1273,781],[1270,782],[1322,783],[1323,784],[1316,785],[1324,786],[1325,787],[1317,738],[1326,788],[1327,789],[1318,790],[948,791],[1319,792],[1321,793],[1320,794],[1275,795],[1277,796],[1276,797],[1334,798],[1335,799],[1328,620],[1336,800],[1337,801],[1329,802],[1338,803],[1339,804],[1330,805],[949,683],[1331,806],[1333,807],[1332,808],[1345,809],[1346,810],[1340,811],[1347,812],[1348,813],[1341,814],[1342,812],[1344,815],[1343,816],[973,817],[1360,818],[1361,819],[1354,820],[1362,821],[1363,822],[1356,823],[1364,824],[1365,825],[1355,826],[1357,821],[1359,827],[1358,828],[1378,829],[1379,830],[1370,831],[1380,832],[1381,833],[1371,834],[1382,835],[1383,836],[1372,837],[1384,838],[1375,839],[1385,840],[1386,841],[1373,842],[1374,843],[1377,844],[1376,845],[1394,846],[1395,847],[1387,848],[1396,849],[1397,850],[1390,851],[1398,852],[1399,853],[1389,854],[1388,683],[1406,855],[1407,856],[1401,857],[1408,858],[1409,859],[1402,860],[1400,683],[1403,858],[1405,861],[1404,862],[1391,849],[1393,863],[1392,864],[1417,865],[1418,866],[1412,867],[1419,868],[1420,869],[1410,870],[1421,871],[1422,872],[1413,873],[1423,874],[1424,875],[1411,620],[950,683],[1414,871],[1416,876],[1415,877],[1433,878],[1434,879],[1425,880],[1435,881],[1436,882],[1426,883],[1437,884],[1438,885],[1427,886],[1439,887],[1440,888],[1429,889],[1441,890],[1442,891],[1428,892],[952,893],[951,791],[1430,887],[1432,894],[1431,895],[1443,896],[1444,897],[1218,898],[1445,899],[1446,900],[1131,901],[1447,902],[1448,903],[1026,904],[1449,905],[1450,906],[1115,907],[1453,908],[1454,909],[1121,910],[1455,911],[1456,912],[1123,913],[1451,914],[1452,915],[1124,916],[1548,917],[1549,918],[1116,919],[1550,920],[1551,921],[1117,922],[1546,923],[1547,924],[1118,925],[1125,926],[1114,927],[1130,928],[1025,929],[1122,930],[1353,931],[1104,932],[1207,933],[1133,930],[1159,934],[1120,935],[1288,936],[1163,930],[1208,930],[962,937],[963,938],[964,939],[1552,940],[965,941],[863,942],[862,943],[809,944],[953,791],[1166,683],[807,791],[806,683],[958,945],[961,946],[808,791],[1553,947],[970,948],[1554,949],[972,950],[561,951],[966,683],[782,952],[805,953],[775,954]],"affectedFilesPendingEmit":[1559,1556,776,1170,1171,1132,1172,1173,1160,1174,1175,1161,1176,1177,1162,1178,1179,1165,1180,1181,1164,811,810,1167,1169,1168,1189,1190,1182,1191,1192,1183,1193,1194,1184,1195,1196,1185,1186,1188,1187,1214,1215,1209,1216,1217,1210,1211,1213,1212,1225,1226,1219,1227,1228,1220,1229,1230,1221,864,1222,1224,1223,866,865,868,867,872,871,870,869,874,873,876,875,878,877,882,881,880,879,888,887,890,889,885,892,891,894,893,896,895,900,899,898,897,902,901,904,903,907,908,909,910,905,906,916,915,914,913,912,911,920,919,918,917,922,921,924,923,926,925,928,927,930,929,931,932,933,886,935,934,937,936,939,938,884,883,941,940,943,942,947,946,945,944,1237,1238,1232,1239,1240,1233,1241,1242,1231,1234,1236,1235,1256,1257,1249,1258,1259,1250,1260,1261,1252,1262,1263,1251,1253,1255,1254,1264,1265,1243,1266,1267,1244,1268,1269,1245,1246,1248,1247,1298,1299,1290,1300,1301,1289,1302,1294,1303,1304,1291,1305,1306,1292,1307,1308,1293,1295,1297,1296,1309,1310,1271,1311,1274,1312,1313,1272,1314,1315,1273,1270,1322,1323,1316,1324,1325,1317,1326,1327,1318,948,1319,1321,1320,1275,1277,1276,1334,1335,1328,1336,1337,1329,1338,1339,1330,949,1331,1333,1332,1345,1346,1340,1347,1348,1341,1342,1344,1343,973,1360,1361,1354,1362,1363,1356,1364,1365,1355,1357,1359,1358,1378,1379,1370,1380,1381,1371,1382,1383,1372,1384,1375,1385,1386,1373,1374,1377,1376,1394,1395,1387,1396,1397,1390,1398,1399,1389,1388,1406,1407,1401,1408,1409,1402,1400,1403,1405,1404,1391,1393,1392,1417,1418,1412,1419,1420,1410,1421,1422,1413,1423,1424,1411,950,1414,1416,1415,1433,1434,1425,1435,1436,1426,1437,1438,1427,1439,1440,1429,1441,1442,1428,952,951,1430,1432,1431,1443,1444,1218,1445,1446,1131,1447,1448,1026,1449,1450,1115,1453,1454,1121,1455,1456,1123,1451,1452,1124,1548,1549,1116,1550,1551,1117,1546,1547,1118,1125,1114,1130,1025,1122,1353,1104,1207,1133,1159,1120,1288,1163,1208,962,963,964,1552,965,863,862,809,953,1166,807,806,958,961,808,1553,970,1554,972,966,782,805],"version":"6.0.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.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.es2025.d.ts","./node_modules/typescript/lib/lib.esnext.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.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.es2025.collection.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.es2025.intl.d.ts","./node_modules/typescript/lib/lib.es2025.iterator.d.ts","./node_modules/typescript/lib/lib.es2025.promise.d.ts","./node_modules/typescript/lib/lib.es2025.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.date.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.esnext.temporal.d.ts","./node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.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/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.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-stats.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/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.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/snapshot-agent.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/cache-interceptor.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/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/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.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/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/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.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/path/posix.d.ts","./node_modules/@types/node/path/win32.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/quic.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/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.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/test/reporters.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/util/types.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/@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/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.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/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.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/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/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/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/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/client/components/readonly-url-search-params.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/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.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/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.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/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.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/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.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/lib/async-callback-set.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/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.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/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/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.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/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.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/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.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/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.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/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.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.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.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/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/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/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.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/unrecognized-action-error.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/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.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/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/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/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./storybook.shims.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/index.d.ts","./node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/tasks.d-Bh0IjN67.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/@vitest/browser/aria-role.d.ts","./node_modules/@vitest/browser/jest-dom.d.ts","./node_modules/@vitest/browser/matchers.d.ts","./node_modules/@vitest/browser/context.d.ts","./node_modules/@vitest/browser-playwright/context.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.CEnv6XRv.d.ts","./node_modules/vitest/dist/chunks/plugin.d.BM2TCi12.d.ts","./node_modules/vitest/dist/coverage.d.ts","./node_modules/obug/dist/core.d.ts","./node_modules/obug/dist/node.d.ts","./node_modules/vitest/dist/node.d.ts","./node_modules/@vitest/browser/dist/index.d.ts","./node_modules/playwright-core/types/protocol.d.ts","./node_modules/playwright-core/types/structs.d.ts","./node_modules/zod/v4/core/json-schema.d.cts","./node_modules/zod/v4/core/standard-schema.d.cts","./node_modules/zod/v4/core/registries.d.cts","./node_modules/zod/v4/core/to-json-schema.d.cts","./node_modules/zod/v4/core/util.d.cts","./node_modules/zod/v4/core/versions.d.cts","./node_modules/zod/v4/core/schemas.d.cts","./node_modules/zod/v4/core/checks.d.cts","./node_modules/zod/v4/core/errors.d.cts","./node_modules/zod/v4/core/core.d.cts","./node_modules/zod/v4/core/parse.d.cts","./node_modules/zod/v4/core/regexes.d.cts","./node_modules/zod/v4/locales/ar.d.cts","./node_modules/zod/v4/locales/az.d.cts","./node_modules/zod/v4/locales/be.d.cts","./node_modules/zod/v4/locales/bg.d.cts","./node_modules/zod/v4/locales/ca.d.cts","./node_modules/zod/v4/locales/cs.d.cts","./node_modules/zod/v4/locales/da.d.cts","./node_modules/zod/v4/locales/de.d.cts","./node_modules/zod/v4/locales/en.d.cts","./node_modules/zod/v4/locales/eo.d.cts","./node_modules/zod/v4/locales/es.d.cts","./node_modules/zod/v4/locales/fa.d.cts","./node_modules/zod/v4/locales/fi.d.cts","./node_modules/zod/v4/locales/fr.d.cts","./node_modules/zod/v4/locales/fr-CA.d.cts","./node_modules/zod/v4/locales/he.d.cts","./node_modules/zod/v4/locales/hu.d.cts","./node_modules/zod/v4/locales/hy.d.cts","./node_modules/zod/v4/locales/id.d.cts","./node_modules/zod/v4/locales/is.d.cts","./node_modules/zod/v4/locales/it.d.cts","./node_modules/zod/v4/locales/ja.d.cts","./node_modules/zod/v4/locales/ka.d.cts","./node_modules/zod/v4/locales/kh.d.cts","./node_modules/zod/v4/locales/km.d.cts","./node_modules/zod/v4/locales/ko.d.cts","./node_modules/zod/v4/locales/lt.d.cts","./node_modules/zod/v4/locales/mk.d.cts","./node_modules/zod/v4/locales/ms.d.cts","./node_modules/zod/v4/locales/nl.d.cts","./node_modules/zod/v4/locales/no.d.cts","./node_modules/zod/v4/locales/ota.d.cts","./node_modules/zod/v4/locales/ps.d.cts","./node_modules/zod/v4/locales/pl.d.cts","./node_modules/zod/v4/locales/pt.d.cts","./node_modules/zod/v4/locales/ru.d.cts","./node_modules/zod/v4/locales/sl.d.cts","./node_modules/zod/v4/locales/sv.d.cts","./node_modules/zod/v4/locales/ta.d.cts","./node_modules/zod/v4/locales/th.d.cts","./node_modules/zod/v4/locales/tr.d.cts","./node_modules/zod/v4/locales/ua.d.cts","./node_modules/zod/v4/locales/uk.d.cts","./node_modules/zod/v4/locales/ur.d.cts","./node_modules/zod/v4/locales/uz.d.cts","./node_modules/zod/v4/locales/vi.d.cts","./node_modules/zod/v4/locales/zh-CN.d.cts","./node_modules/zod/v4/locales/zh-TW.d.cts","./node_modules/zod/v4/locales/yo.d.cts","./node_modules/zod/v4/locales/index.d.cts","./node_modules/zod/v4/core/doc.d.cts","./node_modules/zod/v4/core/api.d.cts","./node_modules/zod/v4/core/json-schema-processors.d.cts","./node_modules/zod/v4/core/json-schema-generator.d.cts","./node_modules/zod/v4/core/index.d.cts","./node_modules/zod/v4/classic/errors.d.cts","./node_modules/zod/v4/classic/parse.d.cts","./node_modules/zod/v4/classic/schemas.d.cts","./node_modules/zod/v4/classic/checks.d.cts","./node_modules/zod/v4/classic/compat.d.cts","./node_modules/zod/v4/classic/from-json-schema.d.cts","./node_modules/zod/v4/classic/iso.d.cts","./node_modules/zod/v4/classic/coerce.d.cts","./node_modules/zod/v4/classic/external.d.cts","./node_modules/zod/index.d.cts","./node_modules/zod/v3/helpers/typeAliases.d.cts","./node_modules/zod/v3/helpers/util.d.cts","./node_modules/zod/v3/ZodError.d.cts","./node_modules/zod/v3/locales/en.d.cts","./node_modules/zod/v3/errors.d.cts","./node_modules/zod/v3/helpers/parseUtil.d.cts","./node_modules/zod/v3/helpers/enumUtil.d.cts","./node_modules/zod/v3/helpers/errorUtil.d.cts","./node_modules/zod/v3/helpers/partialUtil.d.cts","./node_modules/zod/v3/standard-schema.d.cts","./node_modules/zod/v3/types.d.cts","./node_modules/zod/v3/external.d.cts","./node_modules/zod/v3/index.d.cts","./node_modules/playwright-core/types/types.d.ts","./node_modules/playwright-core/index.d.ts","./node_modules/playwright/index.d.ts","./node_modules/@vitest/browser-playwright/dist/index.d.ts","./vitest.shims.d.ts","./next.config.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./node_modules/@storybook/addon-vitest/dist/vitest-plugin/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionalTypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/jest-dom/types/matchers.d.ts","./node_modules/@testing-library/jest-dom/types/jest.d.ts","./node_modules/@testing-library/jest-dom/types/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./vitest.setup.ts","./src/lib/types.ts","./src/lib/storybook-fixtures.ts","./src/lib/view-helpers.ts","./src/lib/dashboard-view.ts","./src/app/(home)/_components/shared.ts","./src/app/(home)/_components/shared.test.ts","./node_modules/next-auth/adapters.d.ts","./node_modules/jose/dist/types/types.d.ts","./node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/verify.d.ts","./node_modules/jose/dist/types/jws/flattened/verify.d.ts","./node_modules/jose/dist/types/jws/general/verify.d.ts","./node_modules/jose/dist/types/jwt/verify.d.ts","./node_modules/jose/dist/types/jwt/decrypt.d.ts","./node_modules/jose/dist/types/jwt/produce.d.ts","./node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/sign.d.ts","./node_modules/jose/dist/types/jws/flattened/sign.d.ts","./node_modules/jose/dist/types/jws/general/sign.d.ts","./node_modules/jose/dist/types/jwt/sign.d.ts","./node_modules/jose/dist/types/jwt/encrypt.d.ts","./node_modules/jose/dist/types/jwk/thumbprint.d.ts","./node_modules/jose/dist/types/jwk/embedded.d.ts","./node_modules/jose/dist/types/jwks/local.d.ts","./node_modules/jose/dist/types/jwks/remote.d.ts","./node_modules/jose/dist/types/jwt/unsecured.d.ts","./node_modules/jose/dist/types/key/export.d.ts","./node_modules/jose/dist/types/key/import.d.ts","./node_modules/jose/dist/types/util/decode_protected_header.d.ts","./node_modules/jose/dist/types/util/decode_jwt.d.ts","./node_modules/jose/dist/types/util/errors.d.ts","./node_modules/jose/dist/types/key/generate_key_pair.d.ts","./node_modules/jose/dist/types/key/generate_secret.d.ts","./node_modules/jose/dist/types/util/base64url.d.ts","./node_modules/jose/dist/types/util/runtime.d.ts","./node_modules/jose/dist/types/index.d.ts","./node_modules/openid-client/types/index.d.ts","./node_modules/next-auth/providers/oauth-types.d.ts","./node_modules/next-auth/providers/oauth.d.ts","./node_modules/next-auth/providers/email.d.ts","./node_modules/next-auth/core/lib/cookie.d.ts","./node_modules/next-auth/core/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/next-auth/providers/index.d.ts","./node_modules/next-auth/jwt/types.d.ts","./node_modules/next-auth/jwt/index.d.ts","./node_modules/next-auth/utils/logger.d.ts","./node_modules/next-auth/core/types.d.ts","./node_modules/next-auth/next/index.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/github.d.ts","./node_modules/next-auth/providers/google.d.ts","./src/lib/auth.ts","./src/lib/api.ts","./src/app/admin/sources/_components/helpers.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/app/api/auth/[...nextauth]/route.test.ts","./src/app/api/content-skills/route.ts","./src/app/api/content-skills/route.test.ts","./src/app/api/entities/route.ts","./src/app/api/entities/route.test.ts","./src/app/api/entities/[id]/route.ts","./src/app/api/entities/[id]/route.test.ts","./src/app/api/entity-candidates/[id]/route.ts","./src/app/api/entity-candidates/[id]/route.test.ts","./src/app/api/feedback/route.ts","./src/app/api/feedback/route.test.ts","./src/app/api/invitations/[token]/accept/route.ts","./src/app/api/invitations/[token]/accept/route.test.ts","./src/app/api/messages/threads/route.ts","./src/app/api/messages/threads/route.test.ts","./src/app/api/messages/threads/[threadId]/messages/route.ts","./src/app/api/messages/threads/[threadId]/messages/route.test.ts","./src/app/api/messages/threads/[threadId]/read/route.ts","./src/app/api/messages/threads/[threadId]/read/route.test.ts","./src/app/api/notifications/route.ts","./src/app/api/notifications/route.test.ts","./src/app/api/profile/route.ts","./src/app/api/profile/route.test.ts","./src/app/api/profile/avatar/route.ts","./src/app/api/profile/avatar/route.test.ts","./src/app/api/projects/route.ts","./src/app/api/projects/route.test.ts","./src/app/api/projects/[id]/draft-action-helpers.ts","./src/app/api/projects/[id]/trend-action-helpers.ts","./src/app/api/projects/[id]/authority-settings/route.ts","./src/app/api/projects/[id]/authority-settings/route.test.ts","./src/app/api/projects/[id]/bluesky-credentials/route.ts","./src/app/api/projects/[id]/bluesky-credentials/route.test.ts","./src/app/api/projects/[id]/draft-items/[itemId]/route.ts","./src/app/api/projects/[id]/draft-items/[itemId]/route.test.ts","./src/app/api/projects/[id]/draft-original-pieces/[pieceId]/route.ts","./src/app/api/projects/[id]/draft-original-pieces/[pieceId]/route.test.ts","./src/app/api/projects/[id]/draft-sections/[sectionId]/route.ts","./src/app/api/projects/[id]/draft-sections/[sectionId]/route.test.ts","./src/app/api/projects/[id]/drafts/[draftId]/route.ts","./src/app/api/projects/[id]/drafts/[draftId]/route.test.ts","./src/app/api/projects/[id]/drafts/[draftId]/regenerate-section/route.ts","./src/app/api/projects/[id]/drafts/[draftId]/regenerate-section/route.test.ts","./src/app/api/projects/[id]/drafts/generate/route.ts","./src/app/api/projects/[id]/drafts/generate/route.test.ts","./src/app/api/projects/[id]/entity-candidate-bulk/route.ts","./src/app/api/projects/[id]/entity-candidate-bulk/route.test.ts","./src/app/api/projects/[id]/ideas/generate/route.ts","./src/app/api/projects/[id]/ideas/route.test.ts","./src/app/api/projects/[id]/ideas/[ideaId]/accept/route.ts","./src/app/api/projects/[id]/ideas/[ideaId]/dismiss/route.ts","./src/app/api/projects/[id]/ideas/[ideaId]/mark-written/route.ts","./src/app/api/projects/[id]/ideas/[ideaId]/route.test.ts","./src/app/api/projects/[id]/intake/route.ts","./src/app/api/projects/[id]/intake/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/route.ts","./src/app/api/projects/[id]/intake-allowlist/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.test.ts","./src/app/api/projects/[id]/invitations/route.ts","./src/app/api/projects/[id]/invitations/route.test.ts","./src/app/api/projects/[id]/invitations/[invitationId]/revoke/route.ts","./src/app/api/projects/[id]/invitations/[invitationId]/revoke/route.test.ts","./src/app/api/projects/[id]/linkedin-oauth/start/route.ts","./src/app/api/projects/[id]/linkedin-oauth/start/route.test.ts","./src/app/api/projects/[id]/linkedin-source-configs/route.ts","./src/app/api/projects/[id]/linkedin-source-configs/route.test.ts","./src/app/api/projects/[id]/mastodon-credentials/route.ts","./src/app/api/projects/[id]/mastodon-credentials/route.test.ts","./src/app/api/projects/[id]/members/[membershipId]/route.ts","./src/app/api/projects/[id]/members/[membershipId]/route.test.ts","./src/app/api/projects/[id]/rotate-intake-token/route.ts","./src/app/api/projects/[id]/rotate-intake-token/route.test.ts","./src/app/api/projects/[id]/themes/[themeId]/accept/route.ts","./src/app/api/projects/[id]/themes/[themeId]/dismiss/route.ts","./src/app/api/projects/[id]/themes/[themeId]/route.test.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.test.ts","./src/app/api/projects/[id]/verify-linkedin-credentials/route.ts","./src/app/api/projects/[id]/verify-linkedin-credentials/route.test.ts","./src/app/api/projects/[id]/verify-mastodon-credentials/route.ts","./src/app/api/projects/[id]/verify-mastodon-credentials/route.test.ts","./src/app/api/review/[id]/route.ts","./src/app/api/review/[id]/route.test.ts","./src/app/api/skills/[skillName]/route.ts","./src/app/api/skills/[skillName]/route.test.ts","./src/app/api/source-configs/route.ts","./src/app/api/source-configs/route.test.ts","./src/app/api/source-configs/[id]/route.ts","./src/app/api/source-configs/[id]/route.test.ts","./src/app/entities/candidates/_components/shared.ts","./src/app/ideas/_components/shared.ts","./src/app/themes/_components/shared.ts","./src/app/trends/_components/shared.ts","./src/app/trends/_components/shared.test.ts","./src/lib/messages.ts","./src/lib/notifications.ts","./src/lib/profile.ts","./node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/lib/useRole.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./src/lib/utils.ts","./src/lib/__tests__/api.test.ts","./src/lib/__tests__/auth.test.ts","./src/lib/__tests__/dashboard-view.test.ts","./src/lib/__tests__/view-helpers.test.ts","./test-support/server-only.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/providers/QueryProvider/index.tsx","./node_modules/next-themes/dist/index.d.ts","./src/providers/ThemeProvider/index.tsx","./src/app/layout.tsx","./node_modules/storybook/dist/router/index.d.ts","./node_modules/storybook/dist/theming/index.d.ts","./node_modules/storybook/dist/channels/index.d.ts","./node_modules/storybook/dist/preview-api/index.d.ts","./node_modules/storybook/dist/core-events/index.d.ts","./node_modules/ast-types/lib/gen/namedTypes.d.ts","./node_modules/ast-types/lib/gen/kinds.d.ts","./node_modules/ast-types/lib/gen/builders.d.ts","./node_modules/ast-types/lib/types.d.ts","./node_modules/ast-types/lib/path.d.ts","./node_modules/ast-types/lib/scope.d.ts","./node_modules/ast-types/lib/node-path.d.ts","./node_modules/ast-types/lib/path-visitor.d.ts","./node_modules/ast-types/lib/gen/visitor.d.ts","./node_modules/ast-types/lib/main.d.ts","./node_modules/recast/lib/options.d.ts","./node_modules/recast/lib/parser.d.ts","./node_modules/recast/lib/printer.d.ts","./node_modules/recast/main.d.ts","./node_modules/storybook/dist/babel/index.d.ts","./node_modules/storybook/dist/csf-tools/index.d.ts","./node_modules/@webcontainer/env/dist/environment.d.ts","./node_modules/@webcontainer/env/dist/url.d.ts","./node_modules/@webcontainer/env/dist/index.d.ts","./node_modules/storybook/dist/common/index.d.ts","./node_modules/storybook/dist/telemetry/index.d.ts","./node_modules/storybook/dist/core-server/index.d.ts","./node_modules/storybook/dist/node-logger/index.d.ts","./node_modules/storybook/dist/types/index.d.ts","./node_modules/storybook/dist/csf/index.d.ts","./node_modules/@storybook/react/dist/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@rollup/pluginutils/types/index.d.ts","./node_modules/vite-plugin-storybook-nextjs/dist/index.d.ts","./node_modules/@storybook/builder-vite/dist/index.d.ts","./node_modules/typescript/lib/typescript.d.ts","./node_modules/react-docgen-typescript/lib/parser.d.ts","./node_modules/react-docgen-typescript/lib/index.d.ts","./node_modules/@joshwooding/vite-plugin-react-docgen-typescript/dist/index.d.ts","./node_modules/@storybook/react-vite/dist/index.d.ts","./node_modules/@storybook/nextjs-vite/dist/index.d.ts","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/@base-ui/react/esm/internals/reason-parts.d.ts","./node_modules/@base-ui/react/esm/internals/reasons.d.ts","./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.d.ts","./node_modules/@base-ui/react/esm/types/index.d.ts","./node_modules/@base-ui/react/esm/internals/types.d.ts","./node_modules/@base-ui/react/esm/button/Button.d.ts","./node_modules/@base-ui/react/esm/button/index.d.ts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./src/components/ui/button.tsx","./src/components/elements/ThemeToggle/index.tsx","./node_modules/@base-ui/react/esm/merge-props/mergeProps.d.ts","./node_modules/@base-ui/react/esm/merge-props/index.d.ts","./node_modules/@base-ui/react/esm/internals/getStateAttributesProps.d.ts","./node_modules/@base-ui/react/esm/use-render/useRender.d.ts","./node_modules/@base-ui/react/esm/use-render/index.d.ts","./src/components/ui/badge.tsx","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTreeStore.d.ts","./node_modules/reselect/dist/reselect.d.ts","./node_modules/@base-ui/utils/esm/store/createSelector.d.ts","./node_modules/@base-ui/utils/esm/store/createSelectorMemoized.d.ts","./node_modules/@base-ui/utils/esm/fastHooks.d.ts","./node_modules/@base-ui/utils/esm/store/Store.d.ts","./node_modules/@base-ui/utils/esm/store/useStore.d.ts","./node_modules/@base-ui/utils/esm/store/ReactStore.d.ts","./node_modules/@base-ui/utils/esm/store/StoreInspector.d.ts","./node_modules/@base-ui/utils/esm/store/index.d.ts","./node_modules/@base-ui/react/esm/internals/useTransitionStatus.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.d.ts","./node_modules/@base-ui/react/esm/utils/popups/store.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.d.ts","./node_modules/@base-ui/react/esm/utils/popups/index.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.d.ts","./node_modules/@base-ui/utils/esm/useEnhancedClickHandler.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.d.ts","./node_modules/@base-ui/react/esm/internals/useRenderElement.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClientPoint.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFocus.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverShared.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHover.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useListNavigation.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useTypeahead.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloatingRootContext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/safePolygon.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/types.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/index.d.ts","./node_modules/@base-ui/react/esm/utils/useAnchorPositioning.d.ts","./node_modules/@base-ui/react/esm/menu/arrow/MenuArrow.d.ts","./node_modules/@base-ui/react/esm/menu/backdrop/MenuBackdrop.d.ts","./node_modules/@base-ui/react/esm/menu/store/MenuStore.d.ts","./node_modules/@base-ui/react/esm/menu/root/MenuRootContext.d.ts","./node_modules/@base-ui/react/esm/menubar/MenubarContext.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRoot.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRootContext.d.ts","./node_modules/@base-ui/react/esm/menu/store/MenuHandle.d.ts","./node_modules/@base-ui/react/esm/menu/root/MenuRoot.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item/MenuCheckboxItem.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.d.ts","./node_modules/@base-ui/react/esm/menu/group/MenuGroup.d.ts","./node_modules/@base-ui/react/esm/menu/group-label/MenuGroupLabel.d.ts","./node_modules/@base-ui/react/esm/menu/item/MenuItem.d.ts","./node_modules/@base-ui/react/esm/menu/link-item/MenuLinkItem.d.ts","./node_modules/@base-ui/react/esm/menu/popup/MenuPopup.d.ts","./node_modules/@base-ui/react/esm/menu/portal/MenuPortal.d.ts","./node_modules/@base-ui/react/esm/menu/positioner/MenuPositioner.d.ts","./node_modules/@base-ui/react/esm/menu/radio-group/MenuRadioGroup.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item/MenuRadioItem.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item-indicator/MenuRadioItemIndicator.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRootContext.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRoot.d.ts","./node_modules/@base-ui/react/esm/menu/trigger/MenuTrigger.d.ts","./node_modules/@base-ui/react/esm/menu/viewport/MenuViewport.d.ts","./node_modules/@base-ui/react/esm/separator/Separator.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-trigger/MenuSubmenuTrigger.d.ts","./node_modules/@base-ui/react/esm/menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/menu/index.d.ts","./src/components/ui/dropdown-menu.tsx","./src/components/layout/NotificationMenu/index.tsx","./node_modules/next-auth/client/_utils.d.ts","./node_modules/next-auth/react/types.d.ts","./node_modules/next-auth/react/index.d.ts","./node_modules/@base-ui/react/esm/avatar/root/AvatarRoot.d.ts","./node_modules/@base-ui/react/esm/avatar/image/useImageLoadingStatus.d.ts","./node_modules/@base-ui/react/esm/avatar/image/AvatarImage.d.ts","./node_modules/@base-ui/react/esm/avatar/fallback/AvatarFallback.d.ts","./node_modules/@base-ui/react/esm/avatar/index.parts.d.ts","./node_modules/@base-ui/react/esm/avatar/index.d.ts","./src/components/ui/avatar.tsx","./src/components/elements/UserAvatar/index.tsx","./src/components/layout/UserMenu/_components/UserMenuContent/index.tsx","./src/components/layout/UserMenu/_components/UserMenuTrigger/index.tsx","./src/components/layout/UserMenu/index.tsx","./node_modules/@base-ui/react/esm/separator/index.d.ts","./src/components/ui/separator.tsx","./src/components/layout/AppShell/_components/AppShellHeader/index.tsx","./src/components/ui/card.tsx","./src/components/layout/AppShell/_components/AppShellSidebar/index.tsx","./src/components/layout/AppShell/index.tsx","./src/components/ui/alert.tsx","./src/components/elements/StatusBadge/index.tsx","./src/app/(home)/_components/ContentFeed/index.tsx","./src/components/ui/label.tsx","./node_modules/@base-ui/react/esm/internals/resolveValueLabel.d.ts","./node_modules/@base-ui/react/esm/select/root/SelectRoot.d.ts","./node_modules/@base-ui/react/esm/internals/form-context/FormContext.d.ts","./node_modules/@base-ui/react/esm/form/Form.d.ts","./node_modules/@base-ui/react/esm/form/index.d.ts","./node_modules/@base-ui/react/esm/field/root/FieldRoot.d.ts","./node_modules/@base-ui/react/esm/select/label/SelectLabel.d.ts","./node_modules/@base-ui/react/esm/select/trigger/SelectTrigger.d.ts","./node_modules/@base-ui/react/esm/select/value/SelectValue.d.ts","./node_modules/@base-ui/react/esm/select/icon/SelectIcon.d.ts","./node_modules/@base-ui/react/esm/select/portal/SelectPortal.d.ts","./node_modules/@base-ui/react/esm/select/backdrop/SelectBackdrop.d.ts","./node_modules/@base-ui/react/esm/select/positioner/SelectPositioner.d.ts","./node_modules/@base-ui/react/esm/select/popup/SelectPopup.d.ts","./node_modules/@base-ui/react/esm/select/list/SelectList.d.ts","./node_modules/@base-ui/react/esm/select/item/SelectItem.d.ts","./node_modules/@base-ui/react/esm/select/item-indicator/SelectItemIndicator.d.ts","./node_modules/@base-ui/react/esm/select/item-text/SelectItemText.d.ts","./node_modules/@base-ui/react/esm/select/arrow/SelectArrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-down-arrow/SelectScrollDownArrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-up-arrow/SelectScrollUpArrow.d.ts","./node_modules/@base-ui/react/esm/select/group/SelectGroup.d.ts","./node_modules/@base-ui/react/esm/select/group-label/SelectGroupLabel.d.ts","./node_modules/@base-ui/react/esm/select/index.parts.d.ts","./node_modules/@base-ui/react/esm/select/index.d.ts","./src/components/ui/select.tsx","./src/app/(home)/_components/DashboardFilterToolbar/index.tsx","./src/app/(home)/_components/DashboardOverview/index.tsx","./src/app/(home)/_components/DashboardSidebar/index.tsx","./src/components/ui/table.tsx","./src/app/(home)/_components/ReviewQueueTable/index.tsx","./src/app/(home)/_components/HomePageContent/index.tsx","./src/lib/storybook-docs.tsx","./src/app/(home)/page.stories.tsx","./src/app/(home)/page.tsx","./src/app/(home)/page.test.tsx","./src/app/(home)/_components/ContentFeed/index.stories.tsx","./src/app/(home)/_components/ContentFeed/index.test.tsx","./src/app/(home)/_components/DashboardFilterToolbar/index.stories.tsx","./src/app/(home)/_components/DashboardFilterToolbar/index.test.tsx","./src/app/(home)/_components/DashboardOverview/index.stories.tsx","./src/app/(home)/_components/DashboardOverview/index.test.tsx","./src/app/(home)/_components/DashboardSidebar/index.stories.tsx","./src/app/(home)/_components/DashboardSidebar/index.test.tsx","./src/app/(home)/_components/HomePageContent/index.stories.tsx","./src/app/(home)/_components/HomePageContent/index.test.tsx","./src/app/(home)/_components/ReviewQueueTable/index.stories.tsx","./src/app/(home)/_components/ReviewQueueTable/index.test.tsx","./src/app/admin/health/_components/SourceDiversityPanel/index.tsx","./src/app/admin/health/_components/SourceHealthPanel/index.tsx","./src/app/admin/health/_components/TopicCentroidPanel/index.tsx","./src/app/admin/health/_components/TrendTaskRunsPanel/index.tsx","./src/app/admin/health/page.stories.tsx","./src/app/admin/health/page.tsx","./src/app/admin/health/page.test.tsx","./src/app/admin/health/_components/SourceDiversityPanel/index.stories.tsx","./src/app/admin/health/_components/SourceDiversityPanel/index.test.tsx","./src/app/admin/health/_components/SourceHealthPanel/index.stories.tsx","./src/app/admin/health/_components/SourceHealthPanel/index.test.tsx","./src/app/admin/health/_components/TopicCentroidPanel/index.stories.tsx","./src/app/admin/health/_components/TopicCentroidPanel/index.test.tsx","./src/app/admin/health/_components/TrendTaskRunsPanel/index.stories.tsx","./src/app/admin/health/_components/TrendTaskRunsPanel/index.test.tsx","./node_modules/@base-ui/react/esm/field/label/FieldLabel.d.ts","./node_modules/@base-ui/react/esm/field/error/FieldError.d.ts","./node_modules/@base-ui/react/esm/field/description/FieldDescription.d.ts","./node_modules/@base-ui/react/esm/field/control/FieldControl.d.ts","./node_modules/@base-ui/react/esm/field/validity/FieldValidity.d.ts","./node_modules/@base-ui/react/esm/field/item/FieldItem.d.ts","./node_modules/@base-ui/react/esm/field/index.parts.d.ts","./node_modules/@base-ui/react/esm/field/index.d.ts","./node_modules/@base-ui/react/esm/input/Input.d.ts","./node_modules/@base-ui/react/esm/input/index.d.ts","./src/components/ui/input.tsx","./src/components/ui/textarea.tsx","./src/app/admin/projects/new/_components/NewProjectFormCard/index.tsx","./src/app/admin/projects/new/_components/ProjectFlashNotice/index.tsx","./src/app/admin/projects/new/page.stories.tsx","./src/app/admin/projects/new/page.tsx","./src/app/admin/projects/new/page.test.tsx","./src/app/admin/projects/new/_components/NewProjectFormCard/index.stories.tsx","./src/app/admin/projects/new/_components/NewProjectFormCard/index.test.tsx","./src/app/admin/projects/new/_components/ProjectFlashNotice/index.stories.tsx","./src/app/admin/projects/new/_components/ProjectFlashNotice/index.test.tsx","./src/components/elements/CopyButton/index.tsx","./src/app/admin/sources/_components/NewsletterIntakePanel/index.tsx","./src/app/admin/sources/_components/ProviderSetupPanel/index.tsx","./src/app/admin/sources/_components/SourceConfigList/index.tsx","./src/app/admin/sources/page.stories.tsx","./src/app/admin/sources/page.tsx","./src/app/admin/sources/page.test.tsx","./src/app/admin/sources/_components/NewsletterIntakePanel/index.stories.tsx","./src/app/admin/sources/_components/NewsletterIntakePanel/index.test.tsx","./src/app/admin/sources/_components/ProviderSetupPanel/index.stories.tsx","./src/app/admin/sources/_components/ProviderSetupPanel/index.test.tsx","./src/app/admin/sources/_components/SourceConfigList/index.stories.tsx","./src/app/admin/sources/_components/SourceConfigList/index.test.tsx","./src/app/content/[id]/_components/SkillActionBar/index.tsx","./src/app/content/[id]/_components/ContentDetailMainColumn/index.tsx","./src/app/content/[id]/_components/ContentDetailSidebar/index.tsx","./src/app/content/[id]/page.stories.tsx","./src/app/content/[id]/page.tsx","./src/app/content/[id]/page.test.tsx","./src/app/content/[id]/_components/ContentDetailMainColumn/index.stories.tsx","./src/app/content/[id]/_components/ContentDetailMainColumn/index.test.tsx","./src/app/content/[id]/_components/ContentDetailSidebar/index.stories.tsx","./src/app/content/[id]/_components/ContentDetailSidebar/index.test.tsx","./src/app/content/[id]/_components/SkillActionBar/index.stories.tsx","./src/app/content/[id]/_components/SkillActionBar/index.test.tsx","./src/app/drafts/_components/DraftsList/index.tsx","./src/app/drafts/_components/DraftsOverviewCards/index.tsx","./src/app/drafts/_components/DraftsToolbar/index.tsx","./src/app/drafts/page.stories.tsx","./src/app/drafts/page.tsx","./src/app/drafts/page.test.tsx","./src/app/drafts/[draftId]/_components/DraftEditor/index.tsx","./src/app/drafts/[draftId]/_components/DraftOverviewCards/index.tsx","./src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.tsx","./src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.tsx","./src/app/drafts/[draftId]/page.stories.tsx","./src/app/drafts/[draftId]/page.tsx","./src/app/drafts/[draftId]/page.test.tsx","./src/app/drafts/[draftId]/_components/DraftEditor/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftEditor/index.test.tsx","./src/app/drafts/[draftId]/_components/DraftOverviewCards/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftOverviewCards/index.test.tsx","./src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftRenderedOutput/index.test.tsx","./src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.stories.tsx","./src/app/drafts/[draftId]/_components/DraftViewSwitcher/index.test.tsx","./src/app/drafts/_components/DraftsList/index.stories.tsx","./src/app/drafts/_components/DraftsList/index.test.tsx","./src/app/drafts/_components/DraftsOverviewCards/index.stories.tsx","./src/app/drafts/_components/DraftsOverviewCards/index.test.tsx","./src/app/drafts/_components/DraftsToolbar/index.stories.tsx","./src/app/drafts/_components/DraftsToolbar/index.test.tsx","./src/app/entities/_components/shared.tsx","./src/app/entities/_components/CreateEntityCard/index.tsx","./src/app/entities/_components/EntityCandidatesCard/index.tsx","./src/app/entities/_components/EntityCard/index.tsx","./src/app/entities/_components/EntitiesPageContent/index.tsx","./src/app/entities/page.stories.tsx","./src/app/entities/page.tsx","./src/app/entities/page.test.tsx","./node_modules/@base-ui/react/esm/slider/root/SliderRoot.d.ts","./node_modules/@base-ui/react/esm/slider/label/SliderLabel.d.ts","./node_modules/@base-ui/react/esm/slider/value/SliderValue.d.ts","./node_modules/@base-ui/react/esm/slider/control/SliderControl.d.ts","./node_modules/@base-ui/react/esm/slider/track/SliderTrack.d.ts","./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.d.ts","./node_modules/@base-ui/react/esm/slider/thumb/SliderThumb.d.ts","./node_modules/@base-ui/react/esm/slider/indicator/SliderIndicator.d.ts","./node_modules/@base-ui/react/esm/slider/index.parts.d.ts","./node_modules/@base-ui/react/esm/slider/index.d.ts","./src/components/ui/slider.tsx","./src/app/entities/[id]/_components/AuthorityWeightControls/index.tsx","./src/app/entities/[id]/_components/AuthorityHistoryPanel/index.tsx","./src/app/entities/[id]/_components/EntityMentionsPanel/index.tsx","./src/app/entities/[id]/_components/EntityOverviewCard/index.tsx","./src/app/entities/[id]/_components/EntitySidebar/index.tsx","./src/app/entities/[id]/_components/EntityDetailPageContent/index.tsx","./src/app/entities/[id]/page.stories.tsx","./src/app/entities/[id]/page.tsx","./src/app/entities/[id]/page.test.tsx","./src/app/entities/[id]/_components/AuthorityHistoryPanel/index.stories.tsx","./src/app/entities/[id]/_components/AuthorityHistoryPanel/index.test.tsx","./src/app/entities/[id]/_components/AuthorityWeightControls/index.stories.tsx","./src/app/entities/[id]/_components/AuthorityWeightControls/index.test.tsx","./src/app/entities/[id]/_components/EntityDetailPageContent/index.test.tsx","./src/app/entities/[id]/_components/EntityMentionsPanel/index.stories.tsx","./src/app/entities/[id]/_components/EntityMentionsPanel/index.test.tsx","./src/app/entities/[id]/_components/EntityOverviewCard/index.stories.tsx","./src/app/entities/[id]/_components/EntityOverviewCard/index.test.tsx","./src/app/entities/[id]/_components/EntitySidebar/index.stories.tsx","./src/app/entities/[id]/_components/EntitySidebar/index.test.tsx","./src/app/entities/_components/CreateEntityCard/index.stories.tsx","./src/app/entities/_components/CreateEntityCard/index.test.tsx","./src/app/entities/_components/EntitiesPageContent/index.test.tsx","./src/app/entities/_components/EntityCandidatesCard/index.stories.tsx","./src/app/entities/_components/EntityCandidatesCard/index.test.tsx","./src/app/entities/_components/EntityCard/index.stories.tsx","./src/app/entities/_components/EntityCard/index.test.tsx","./src/app/entities/candidates/_components/CandidateClusterCard/index.tsx","./src/app/entities/candidates/_components/CandidateQueueOverview/index.tsx","./src/app/entities/candidates/_components/ResolvedCandidateList/index.tsx","./src/app/entities/candidates/page.stories.tsx","./src/app/entities/candidates/page.tsx","./src/app/entities/candidates/page.test.tsx","./src/app/entities/candidates/_components/CandidateClusterCard/index.stories.tsx","./src/app/entities/candidates/_components/CandidateClusterCard/index.test.tsx","./src/app/entities/candidates/_components/CandidateQueueOverview/index.stories.tsx","./src/app/entities/candidates/_components/CandidateQueueOverview/index.test.tsx","./src/app/entities/candidates/_components/ResolvedCandidateList/index.stories.tsx","./src/app/entities/candidates/_components/ResolvedCandidateList/index.test.tsx","./src/app/ideas/_components/IdeasQueueOverview/index.tsx","./src/app/ideas/_components/IdeasToolbarCard/index.tsx","./src/app/ideas/_components/OriginalContentIdeaCard/index.tsx","./src/app/ideas/page.stories.tsx","./src/app/ideas/page.tsx","./src/app/ideas/page.test.tsx","./src/app/ideas/_components/IdeasQueueOverview/index.stories.tsx","./src/app/ideas/_components/IdeasQueueOverview/index.test.tsx","./src/app/ideas/_components/IdeasToolbarCard/index.stories.tsx","./src/app/ideas/_components/IdeasToolbarCard/index.test.tsx","./src/app/ideas/_components/OriginalContentIdeaCard/index.stories.tsx","./src/app/ideas/_components/OriginalContentIdeaCard/index.test.tsx","./src/app/invite/[token]/_components/InvitationDetailsCard/index.tsx","./src/app/invite/[token]/_components/InvitePageContent/index.tsx","./src/app/invite/[token]/page.stories.tsx","./src/app/invite/[token]/page.tsx","./src/app/invite/[token]/page.test.tsx","./src/app/invite/[token]/_components/InvitationDetailsCard/index.stories.tsx","./src/app/invite/[token]/_components/InvitationDetailsCard/index.test.tsx","./src/app/invite/[token]/_components/InvitePageContent/index.stories.tsx","./src/app/invite/[token]/_components/InvitePageContent/index.test.tsx","./node_modules/@base-ui/react/esm/checkbox/root/CheckboxRoot.d.ts","./node_modules/@base-ui/react/esm/checkbox/indicator/CheckboxIndicator.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.parts.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.d.ts","./src/components/ui/checkbox.tsx","./src/app/login/_components/LoginForm/index.tsx","./src/app/login/_components/SocialAuthButtons/index.tsx","./src/app/login/_components/LoginPageContent/index.tsx","./src/app/login/page.stories.tsx","./src/app/login/page.tsx","./src/app/login/page.test.tsx","./src/app/login/_components/LoginForm/index.stories.tsx","./src/app/login/_components/LoginForm/index.test.tsx","./src/app/login/_components/LoginPageContent/index.stories.tsx","./src/app/login/_components/LoginPageContent/index.test.tsx","./src/app/login/_components/SocialAuthButtons/index.stories.tsx","./src/app/login/_components/SocialAuthButtons/index.test.tsx","./src/app/messages/_components/MessagesWorkspace/index.tsx","./src/app/messages/_components/MessagesPageContent/index.tsx","./src/app/messages/page.tsx","./src/app/messages/page.test.tsx","./node_modules/@testing-library/user-event/dist/types/event/eventMap.d.ts","./node_modules/@testing-library/user-event/dist/types/event/types.d.ts","./node_modules/@testing-library/user-event/dist/types/event/dispatchEvent.d.ts","./node_modules/@testing-library/user-event/dist/types/event/focus.d.ts","./node_modules/@testing-library/user-event/dist/types/event/input.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/click/isClickableInput.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/Blob.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/DataTransfer.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/FileList.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/dataTransfer/Clipboard.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/timeValue.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/isContentEditable.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/isEditable.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/maxLength.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/edit/setFiles.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/cursor.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/getActiveElement.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/getTabDestination.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/isFocusable.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/selection.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/focus/selector.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/keyDef/readNextDescriptor.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/cloneEvent.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/findClosest.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/getDocumentFromNode.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/getTreeDiff.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/getWindow.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isDescendantOrSelf.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isElementType.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isVisible.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/isDisabled.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/level.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/misc/wait.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/pointer/cssPointerEvents.d.ts","./node_modules/@testing-library/user-event/dist/types/utils/index.d.ts","./node_modules/@testing-library/user-event/dist/types/document/UI.d.ts","./node_modules/@testing-library/user-event/dist/types/document/getValueOrTextContent.d.ts","./node_modules/@testing-library/user-event/dist/types/document/copySelection.d.ts","./node_modules/@testing-library/user-event/dist/types/document/trackValue.d.ts","./node_modules/@testing-library/user-event/dist/types/document/index.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/getInputRange.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/modifySelection.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/moveSelection.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/setSelectionPerMouse.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/modifySelectionPerMouse.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/selectAll.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/setSelectionRange.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/setSelection.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/updateSelectionOnFocus.d.ts","./node_modules/@testing-library/user-event/dist/types/event/selection/index.d.ts","./node_modules/@testing-library/user-event/dist/types/event/index.d.ts","./node_modules/@testing-library/user-event/dist/types/system/pointer/buttons.d.ts","./node_modules/@testing-library/user-event/dist/types/system/pointer/shared.d.ts","./node_modules/@testing-library/user-event/dist/types/system/pointer/index.d.ts","./node_modules/@testing-library/user-event/dist/types/system/index.d.ts","./node_modules/@testing-library/user-event/dist/types/system/keyboard.d.ts","./node_modules/@testing-library/user-event/dist/types/options.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/click.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/hover.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/tab.d.ts","./node_modules/@testing-library/user-event/dist/types/convenience/index.d.ts","./node_modules/@testing-library/user-event/dist/types/keyboard/index.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/copy.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/cut.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/paste.d.ts","./node_modules/@testing-library/user-event/dist/types/clipboard/index.d.ts","./node_modules/@testing-library/user-event/dist/types/pointer/index.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/clear.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/selectOptions.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/type.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/upload.d.ts","./node_modules/@testing-library/user-event/dist/types/utility/index.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/api.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/directApi.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/setup.d.ts","./node_modules/@testing-library/user-event/dist/types/setup/index.d.ts","./node_modules/@testing-library/user-event/dist/types/index.d.ts","./src/app/messages/_components/MessagesWorkspace/index.test.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/app/profile/_components/AvatarDropzone/index.tsx","./src/app/profile/_components/AvatarPreview/index.tsx","./src/app/profile/_components/ProfileForm/index.tsx","./src/app/profile/_components/ProfileSettingsWorkspace/index.tsx","./src/app/profile/page.stories.tsx","./src/app/profile/_components/ProfileSettingsPanel/index.tsx","./src/app/profile/page.tsx","./src/app/profile/page.test.tsx","./src/app/profile/_components/AvatarDropzone/index.stories.tsx","./src/app/profile/_components/AvatarDropzone/index.test.tsx","./src/app/profile/_components/AvatarPreview/index.stories.tsx","./src/app/profile/_components/AvatarPreview/index.test.tsx","./src/app/profile/_components/ProfileForm/index.stories.tsx","./src/app/profile/_components/ProfileForm/index.test.tsx","./src/app/profile/_components/ProfileSettingsPanel/index.test.tsx","./src/app/profile/_components/ProfileSettingsWorkspace/index.stories.tsx","./src/app/profile/_components/ProfileSettingsWorkspace/index.test.tsx","./src/app/projects/[id]/members/_components/InvitationsCard/index.tsx","./src/app/projects/[id]/members/_components/shared.tsx","./src/app/projects/[id]/members/_components/MembershipsCard/index.tsx","./src/app/projects/[id]/members/_components/MembersPageContent/index.tsx","./src/app/projects/[id]/members/page.stories.tsx","./src/app/projects/[id]/members/page.tsx","./src/app/projects/[id]/members/page.test.tsx","./src/app/projects/[id]/members/_components/InvitationsCard/index.stories.tsx","./src/app/projects/[id]/members/_components/InvitationsCard/index.test.tsx","./src/app/projects/[id]/members/_components/MembersPageContent/index.stories.tsx","./src/app/projects/[id]/members/_components/MembersPageContent/index.test.tsx","./src/app/projects/[id]/members/_components/MembershipsCard/index.stories.tsx","./src/app/projects/[id]/members/_components/MembershipsCard/index.test.tsx","./src/app/projects/[id]/members/invite/_components/shared.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.tsx","./src/app/projects/[id]/members/invite/page.stories.tsx","./src/app/projects/[id]/members/invite/page.tsx","./src/app/projects/[id]/members/invite/page.test.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.stories.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberFormCard/index.test.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.stories.tsx","./src/app/projects/[id]/members/invite/_components/InviteMemberPageContent/index.test.tsx","./src/app/themes/_components/ThemesFilterToolbar/index.tsx","./src/app/themes/_components/ThemesQueueOverview/index.tsx","./src/app/themes/_components/ThemeSuggestionCard/index.tsx","./src/app/themes/_components/ThemesPageContent/index.tsx","./src/app/themes/page.stories.tsx","./src/app/themes/page.tsx","./src/app/themes/page.test.tsx","./src/app/themes/_components/ThemeSuggestionCard/index.stories.tsx","./src/app/themes/_components/ThemeSuggestionCard/index.test.tsx","./src/app/themes/_components/ThemesFilterToolbar/index.stories.tsx","./src/app/themes/_components/ThemesFilterToolbar/index.test.tsx","./src/app/themes/_components/ThemesPageContent/index.stories.tsx","./src/app/themes/_components/ThemesPageContent/index.test.tsx","./src/app/themes/_components/ThemesQueueOverview/index.stories.tsx","./src/app/themes/_components/ThemesQueueOverview/index.test.tsx","./src/app/trends/_components/TopicClusterCard/index.tsx","./src/app/trends/_components/TrendClusterDetailPanel/index.tsx","./src/app/trends/_components/TrendsFilterToolbar/index.tsx","./src/app/trends/_components/TrendsQueueOverview/index.tsx","./src/app/trends/_components/TrendsPageContent/index.tsx","./src/app/trends/page.stories.tsx","./src/app/trends/page.tsx","./src/app/trends/page.test.tsx","./src/app/trends/_components/TopicClusterCard/index.stories.tsx","./src/app/trends/_components/TopicClusterCard/index.test.tsx","./src/app/trends/_components/TrendClusterDetailPanel/index.stories.tsx","./src/app/trends/_components/TrendClusterDetailPanel/index.test.tsx","./src/app/trends/_components/TrendsFilterToolbar/index.stories.tsx","./src/app/trends/_components/TrendsFilterToolbar/index.test.tsx","./src/app/trends/_components/TrendsPageContent/index.stories.tsx","./src/app/trends/_components/TrendsPageContent/index.test.tsx","./src/app/trends/_components/TrendsQueueOverview/index.stories.tsx","./src/app/trends/_components/TrendsQueueOverview/index.test.tsx","./src/components/elements/CopyButton/index.stories.tsx","./src/components/elements/CopyButton/index.test.tsx","./src/components/elements/StatusBadge/index.stories.tsx","./src/components/elements/StatusBadge/index.test.tsx","./src/components/elements/ThemeToggle/index.stories.tsx","./src/components/elements/ThemeToggle/index.test.tsx","./src/components/elements/UserAvatar/index.stories.tsx","./src/components/elements/UserAvatar/index.test.tsx","./src/components/layout/AppShell/index.stories.tsx","./src/components/layout/AppShell/index.test.tsx","./src/components/layout/AppShell/_components/AppShellHeader/index.stories.tsx","./src/components/layout/AppShell/_components/AppShellHeader/index.test.tsx","./src/components/layout/AppShell/_components/AppShellSidebar/index.stories.tsx","./src/components/layout/AppShell/_components/AppShellSidebar/index.test.tsx","./src/components/layout/NotificationMenu/index.test.tsx","./node_modules/@testing-library/jest-dom/types/matchers-standalone.d.ts","./node_modules/storybook/node_modules/@vitest/spy/dist/index.d.ts","./node_modules/storybook/node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/types.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/storybook/node_modules/tinyrainbow/dist/index-8b61d5bc.d.ts","./node_modules/storybook/node_modules/tinyrainbow/dist/node.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/index.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/storybook/node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/storybook/node_modules/@vitest/expect/dist/index.d.ts","./node_modules/storybook/dist/test/index.d.ts","./src/components/layout/UserMenu/index.stories.tsx","./src/components/layout/UserMenu/index.test.tsx","./src/components/layout/UserMenu/_components/UserMenuContent/index.stories.tsx","./src/components/layout/UserMenu/_components/UserMenuContent/index.test.tsx","./src/components/layout/UserMenu/_components/UserMenuTrigger/index.stories.tsx","./src/components/layout/UserMenu/_components/UserMenuTrigger/index.test.tsx","./src/lib/__tests__/useRole.test.tsx","./src/providers/QueryProvider/index.test.tsx","./src/providers/ThemeProvider/index.test.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[101,164,172,176,179,181,182,183,195,512,513,514,515,554,561,1572],[101,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,255,553,554,556,561,865,867,869,871,873,875,877,887,889,891,895,897,899,901,903,905,907,909,911,913,915,916,917,919,921,923,925,927,929,931,933,935,937,939,940,942,944,946,948,950,952,954,983,1179,1198,1223,1234,1246,1258,1265,1287,1307,1331,1343,1354,1369,1469,1485,1497,1524,1572,1574,1575],[101,164,172,176,179,181,182,183,195,512,513,514,515,554,561,1574],[101,164,172,176,179,181,182,183,195,255,553,554,556,559,561,865,867,869,871,873,875,877,887,889,891,895,897,899,901,903,905,907,909,911,913,915,916,917,919,921,923,925,927,929,931,933,935,937,939,940,942,944,946,948,950,952,954,983,1179,1198,1223,1234,1246,1258,1265,1287,1307,1331,1343,1354,1369,1469,1485,1497,1508,1524,1572,1574],[101,164,172,176,179,181,182,183,195,554,557,558,559,561,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,557,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1124,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1060,1124,1125,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1124,1126,1127,1128,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1124,1126,1127,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1031,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1360,1361,1362,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1360,1361,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1060,1360,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1027,1028,1030,1150,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1029,1098,1118,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1095,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1150,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1060,1150,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1150,1208,1209,1210,1211,1212,1213,1214,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1150,1208,1209,1210,1211,1212,1213,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1149,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1060,1150,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1083,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1050,1066,1083,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1068,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1028,1059,1060,1064,1083,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1050,1083,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1083,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1027,1083,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1050,1083,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1028,1065,1083,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1073,1083,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1050,1073,1083,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1048,1083,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1029,1059,1064,1065,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1047,1049,1050,1067,1069,1070,1071,1072,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1073,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1028,1047,1049,1050,1065,1067,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1084,1088,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1027,1028,1030,1147,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1148,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1215,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1216,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1027,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1148,1150,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1026,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1029,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1039,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1089,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1060,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1098,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1090,1091,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1112,1113,1114,1116,1117,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1090,1091,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1112,1113,1114,1115,1116,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1060,1066,1089,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1088,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,1027,1028,1064,1092,1093,1094,1096,1097,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1092,1098,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1092,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1050,1059,1060,1064,1065,1066,1088,1098,1118,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1098,1111,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1092,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1097,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1098,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1037,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1146,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1115,1146,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1027,1028,1145,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1115,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1289,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1289,1290,1291,1292,1293,1295,1296,1297,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1289,1290,1291,1292,1293,1295,1296,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1030,1289,1294,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1028,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1030,1040,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1061,1062,1063,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1059,1060,1062,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1030,1060,1061,1065,1088,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1043,1088,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1055,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,1055,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1051,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1052,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1052,1053,1055,1056,1057,1058,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1054,1055,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1043,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1044,1045,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1046,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,614,777,1019,1021,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1015,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,778,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,614,777,1012,1572,1574],[101,164,172,176,179,181,182,183,195,547,554,561,1012,1013,1014,1017,1018,1023,1562,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1012,1014,1018,1022,1572,1574],[92,101,164,172,176,179,181,182,183,195,225,488,554,561,1012,1013,1562,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,964,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,965,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,966,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,790,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,787,788,789,790,791,794,795,796,797,798,799,800,801,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,783,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,793,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,787,788,789,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,787,788,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,790,791,793,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,788,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,785,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,784,1572,1574],[92,101,164,172,176,179,181,182,183,195,225,488,554,561,802,803,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1443,1444,1445,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1438,1439,1440,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1416,1417,1418,1419,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1382,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1382,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1382,1383,1384,1385,1430,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1420,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1415,1421,1422,1423,1424,1425,1426,1427,1428,1429,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1430,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1381,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1434,1436,1437,1455,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1434,1436,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1431,1434,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1441,1442,1446,1447,1452,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1435,1437,1447,1455,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1454,1455,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1431,1435,1437,1453,1454,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1435,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1433,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1433,1435,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1431,1432,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1448,1449,1450,1451,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1437,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1392,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1386,1393,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1412,1456,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,638,639,1572,1574],[101,161,162,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,163,164,172,176,179,181,182,183,195,554,561,1572,1574],[164,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,203,554,561,1572,1574],[101,164,165,170,172,175,176,179,181,182,183,185,195,200,212,554,561,1572,1574],[101,164,165,166,172,175,176,179,181,182,183,195,554,561,1572,1574],[101,164,167,172,176,179,181,182,183,195,213,554,561,1572,1574],[101,164,168,169,172,176,179,181,182,183,186,195,554,561,1572,1574],[101,164,169,172,176,179,181,182,183,195,200,209,554,561,1572,1574],[101,164,170,172,175,176,179,181,182,183,185,195,554,561,1572,1574],[101,163,164,171,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,173,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,174,175,176,179,181,182,183,195,554,561,1572,1574],[101,163,164,172,175,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,175,176,177,179,181,182,183,195,200,212,554,561,1572,1574],[101,164,172,175,176,177,179,181,182,183,195,200,203,554,561,1572,1574],[101,151,164,172,175,176,178,179,181,182,183,185,195,200,212,554,561,1572,1574],[101,164,172,175,176,178,179,181,182,183,185,195,200,209,212,554,561,1572,1574],[101,164,172,176,178,179,180,181,182,183,195,200,209,212,554,561,1572,1574],[99,100,101,102,103,104,105,106,107,108,109,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,554,561,1572,1574],[101,164,172,175,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,184,195,212,554,561,1572,1574],[101,164,172,175,176,179,181,182,183,185,195,200,554,561,1572,1574],[101,164,172,176,179,181,182,183,186,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,187,195,554,561,1572,1574],[101,164,172,175,176,179,181,182,183,190,195,554,561,1572,1574],[101,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,554,561,1572,1574],[101,164,172,176,179,181,182,183,192,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,193,195,554,561,1572,1574],[101,164,169,172,176,179,181,182,183,185,195,203,554,561,1572,1574],[101,164,172,175,176,179,181,182,183,195,196,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,197,213,216,554,561,1572,1574],[101,164,172,175,176,179,181,182,183,195,200,202,203,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,201,203,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,203,213,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,204,554,561,1572,1574],[101,161,164,172,176,179,181,182,183,195,200,206,212,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,200,205,554,561,1572,1574],[101,164,172,175,176,179,181,182,183,195,207,208,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,207,208,554,561,1572,1574],[101,164,169,172,176,179,181,182,183,185,195,200,209,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,210,554,561,1572,1574],[101,164,172,176,179,181,182,183,185,195,211,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,212,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,213,214,554,561,1572,1574],[101,164,169,172,176,179,181,182,183,195,214,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,200,215,554,561,1572,1574],[101,164,172,176,179,181,182,183,184,195,216,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,217,554,561,1572,1574],[101,164,167,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,169,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,213,554,561,1572,1574],[101,151,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,218,554,561,1572,1574],[101,164,172,176,179,181,182,183,190,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,208,554,561,1572,1574],[101,151,164,172,175,176,177,179,181,182,183,190,195,200,203,212,215,216,218,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,200,219,554,561,1572,1574],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,225,507,552,554,561,1572,1574],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,224,488,507,552,554,561,1572,1574],[92,96,101,164,172,176,179,181,182,183,195,221,222,224,225,507,552,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,225,488,489,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,225,488,554,561,1572,1574],[92,96,101,164,172,176,179,181,182,183,195,222,223,224,225,507,552,554,561,1572,1574],[92,96,101,164,172,176,179,181,182,183,195,221,223,224,225,507,552,554,561,1572,1574],[90,91,101,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,614,777,780,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,668,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,670,677,678,773,774,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,660,664,665,667,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,668,677,678,774,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,665,668,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,660,666,667,668,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,616,622,635,636,637,640,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,646,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,646,647,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,620,622,623,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,620,622,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,620,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,620,626,627,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,620,626,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,634,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,621,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,617,621,662,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,617,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,616,617,618,619,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1005,1006,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,989,990,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,989,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,990,992,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,989,995,996,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,989,991,992,993,995,996,997,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,992,993,994,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,992,995,997,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,992,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,992,995,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,989,991,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,969,1033,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,969,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,655,656,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,655,656,657,658,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,655,657,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,655,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1459,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1459,1460,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,813,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,813,823,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,607,608,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,859,1572,1574],[101,164,172,176,178,179,181,182,183,195,220,554,561,859,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,850,857,1572,1574],[101,164,172,176,179,181,182,183,195,553,554,557,561,857,859,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,812,846,853,855,856,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,851,857,858,1572,1574],[101,164,172,176,179,181,182,183,195,553,554,557,561,854,859,1572,1574],[101,164,172,176,179,181,182,183,195,220,554,561,859,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,851,853,859,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,853,857,859,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,853,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,848,849,852,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,845,846,847,853,859,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,853,859,1121,1122,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,853,859,1572,1574],[101,164,172,176,179,181,182,183,195,510,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,512,513,514,515,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,458,521,522,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,230,231,233,245,269,384,395,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,264,265,266,268,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,401,403,405,406,408,503,505,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,267,304,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,231,233,244,245,251,257,262,383,384,385,394,503,505,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,246,265,285,380,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,226,240,246,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,412,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,409,410,412,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,409,411,503,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,285,482,500,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,356,359,375,380,500,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,328,500,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,388,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,387,388,389,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,387,554,561,1572,1574],[98,101,164,172,176,178,179,181,182,183,195,226,233,245,251,257,263,265,269,270,283,284,351,381,382,395,503,507,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,230,233,267,304,401,402,407,503,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,267,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,230,284,453,503,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,267,268,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,404,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,270,383,386,393,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,458,554,561,1572,1574],[101,164,172,176,179,181,182,183,193,195,240,255,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,255,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,325,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,246,255,458,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,311,325,326,537,544,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,310,538,539,540,541,543,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,361,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,361,362,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,244,246,313,314,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,320,321,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,315,323,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,320,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,238,246,313,314,315,316,317,318,319,320,323,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,313,320,321,322,324,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,314,316,317,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,314,316,319,321,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,542,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,234,531,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,267,302,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,267,395,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,300,305,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,301,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,977,1572,1574],[92,96,101,164,172,176,178,179,181,182,183,195,221,222,223,224,225,507,551,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,246,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,245,250,331,348,390,391,395,450,452,503,504,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,283,392,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,507,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,232,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,237,240,455,471,473,554,561,1572,1574],[101,164,172,176,179,181,182,183,193,195,240,455,470,471,472,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,464,465,466,467,468,469,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,466,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,470,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,255,419,420,422,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,246,413,414,415,416,421,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,419,421,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,417,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,418,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,301,509,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,508,509,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,348,349,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,349,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,504,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,378,554,561,1572,1574],[101,163,164,172,176,179,181,182,183,195,377,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,246,252,254,356,369,373,375,452,455,492,493,500,504,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,295,317,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,356,367,370,375,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,237,240,356,359,375,378,412,459,460,461,462,463,474,475,476,477,478,479,480,481,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,237,240,265,356,363,364,365,368,369,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,200,246,265,367,374,455,456,500,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,371,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,234,246,250,260,292,293,296,348,351,416,450,451,492,503,504,505,507,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,237,238,240,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,356,554,561,1572,1574],[101,163,164,172,176,179,181,182,183,195,265,292,293,350,351,352,353,354,355,504,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,375,554,561,1572,1574],[101,163,164,172,176,179,181,182,183,195,239,240,250,254,290,356,363,364,365,366,367,370,371,372,373,374,493,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,290,291,363,504,505,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,265,293,348,351,356,452,504,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,503,505,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,200,500,504,505,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,226,240,245,252,254,257,260,267,287,292,293,294,295,296,331,332,334,337,339,342,343,344,345,347,395,450,452,500,503,504,505,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,200,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,234,235,263,500,501,502,507,509,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,195,230,231,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,424,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,200,212,242,408,412,413,414,415,416,422,423,554,555,561,1572,1574],[101,164,172,176,179,181,182,183,193,195,212,226,240,242,254,257,293,332,337,347,348,401,428,429,430,436,439,440,450,452,500,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,257,263,270,283,293,351,503,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,212,234,245,254,293,434,500,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,454,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,424,437,438,447,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,500,503,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,353,493,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,254,292,395,509,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,232,337,397,401,430,436,439,442,500,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,270,283,401,443,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,233,294,395,445,503,505,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,212,416,503,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,267,294,395,396,397,406,424,444,446,503,554,561,1572,1574],[98,101,164,172,176,178,179,181,182,183,195,292,449,507,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,346,450,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,240,243,245,246,252,254,260,269,270,283,293,296,332,334,344,347,348,395,428,429,430,431,433,435,450,452,500,509,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,200,270,436,441,447,500,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,273,274,275,276,277,278,279,280,281,282,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,287,338,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,340,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,338,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,340,341,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,244,245,246,250,251,504,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,232,234,252,256,292,295,296,330,450,500,505,507,509,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,193,195,212,236,243,244,254,256,293,448,493,499,504,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,363,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,364,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,246,257,492,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,365,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,239,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,241,253,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,241,245,252,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,248,253,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,249,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,241,242,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,241,297,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,241,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,243,287,336,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,335,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,242,243,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,243,333,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,242,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,292,395,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,492,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,212,252,254,258,292,395,449,452,455,456,457,483,484,487,491,493,500,504,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,306,309,311,312,325,326,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,490,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,379,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,265,286,291,292,356,357,358,359,360,362,375,376,378,381,449,452,503,505,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,325,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,330,500,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,330,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,252,298,327,329,331,449,500,507,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,306,307,308,309,311,312,325,326,508,554,561,1572,1574],[98,101,164,172,176,178,179,181,182,183,193,195,212,241,242,254,260,292,293,296,395,447,448,450,500,503,504,507,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,237,240,247,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,291,293,425,428,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,291,426,494,495,496,497,498,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,287,503,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,290,375,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,289,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,291,344,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,288,290,503,554,561,1572,1574],[101,164,172,176,178,179,181,182,183,195,236,291,425,426,427,500,503,504,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,240,246,324,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,238,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,228,229,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,234,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,240,310,554,561,1572,1574],[92,98,101,164,172,176,179,181,182,183,195,292,296,507,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,234,531,532,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,305,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,193,195,212,232,299,301,303,304,509,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,267,504,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,240,432,554,561,1572,1574],[92,101,164,172,176,178,179,181,182,183,193,195,230,232,305,403,507,508,554,561,1572,1574],[92,101,164,172,176,179,181,182,183,195,221,222,223,224,225,507,552,554,561,1572,1574],[92,93,94,95,96,101,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,398,399,400,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,398,554,561,1572,1574],[92,96,101,164,172,176,178,179,180,181,182,183,193,195,220,221,222,223,224,225,226,232,260,265,442,470,505,506,509,552,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,517,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,519,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,523,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,978,1572,1574],[101,164,172,176,179,181,182,183,195,525,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,527,528,529,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,533,554,561,1572,1574],[97,101,164,172,176,179,181,182,183,195,511,516,518,520,524,526,530,534,536,546,547,549,553,554,555,556,561,1572,1574],[101,164,172,176,179,181,182,183,195,535,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,545,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,301,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,548,554,561,1572,1574],[101,163,164,172,176,179,181,182,183,195,291,425,426,428,494,495,497,498,550,552,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,220,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,675,1572,1574],[101,164,169,172,176,178,179,180,181,182,183,195,212,213,220,554,561,845,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,771,1572,1574],[101,164,165,172,176,179,181,182,183,195,200,554,561,679,680,757,770,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,772,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,602,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,600,602,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,591,599,600,601,603,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,589,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,592,597,602,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,588,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,592,593,596,597,598,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,592,593,594,596,597,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,589,590,591,592,593,597,598,599,601,602,603,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,587,589,590,591,592,593,594,596,597,598,599,600,601,602,603,604,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,587,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,592,594,595,597,598,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,596,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,597,598,602,605,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,590,600,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,792,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1020,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1019,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1461,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,999,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,998,999,1000,1001,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,573,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,565,567,573,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,566,567,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,567,573,577,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,566,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,567,573,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,565,566,567,572,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,565,567,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,566,567,579,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,568,569,570,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,571,1572,1574],[101,164,172,176,179,181,182,183,195,200,220,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1002,1572,1574],[101,164,165,172,176,179,181,182,183,186,195,200,203,554,561,1003,1004,1007,1012,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,987,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,986,988,1008,1009,1012,1013,1562,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1003,1012,1013,1562,1572,1574],[92,101,164,172,176,179,181,182,183,195,554,561,1012,1013,1562,1572,1574],[101,164,165,172,175,176,179,181,182,183,186,195,200,203,220,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,986,988,1012,1013,1562,1572,1574],[101,164,169,172,176,179,181,182,183,195,554,561,1012,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1013,1454,1455,1457,1551,1552,1561,1572,1574],[92,101,164,172,176,178,179,181,182,183,185,195,554,561,984,985,986,988,1004,1008,1010,1011,1012,1013,1562,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1552,1557,1558,1560,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1553,1559,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1554,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1553,1554,1555,1557,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1553,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,1556,1572,1574],[101,116,119,122,123,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[101,119,164,172,176,179,181,182,183,195,200,212,554,561,1572,1574],[101,119,123,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,200,554,561,1572,1574],[101,113,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,117,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,115,116,119,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[101,164,172,176,179,181,182,183,185,195,209,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,220,554,561,1572,1574],[101,113,164,172,176,179,181,182,183,195,220,554,561,1572,1574],[101,115,119,164,172,176,179,181,182,183,185,195,212,554,561,1572,1574],[101,110,111,112,114,118,164,172,175,176,179,181,182,183,195,200,212,554,561,1572,1574],[101,119,128,136,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,111,117,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,119,145,146,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,111,114,119,164,172,176,179,181,182,183,195,203,212,220,554,561,1572,1574],[101,119,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,115,119,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[101,110,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,119,138,141,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,119,128,129,130,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,117,119,129,131,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,118,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,111,113,119,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,119,123,129,131,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,123,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,117,119,122,164,172,176,179,181,182,183,195,212,554,561,1572,1574],[101,111,115,119,128,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,119,138,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,131,164,172,176,179,181,182,183,195,554,561,1572,1574],[101,113,119,145,164,172,176,179,181,182,183,195,203,218,220,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,614,777,1016,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,562,1572,1574],[101,164,172,175,176,178,179,180,181,182,183,185,195,200,209,212,219,220,554,561,562,563,564,574,575,576,578,580,582,584,585,586,606,610,611,612,613,614,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,562,563,564,581,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,564,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,583,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,609,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,574,585,614,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,574,614,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,664,669,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,641,650,777,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,616,618,619,620,622,624,625,628,629,635,649,650,661,663,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,624,643,644,650,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,624,625,632,650,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,622,624,625,628,650,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,582,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,624,625,628,641,645,650,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,614,672,777,1572,1574],[101,164,167,172,176,179,181,182,183,195,200,554,561,614,615,620,622,624,625,628,629,632,633,641,642,645,648,649,650,661,670,671,774,777,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,582,624,625,628,650,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,624,643,644,645,650,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,582,624,629,630,631,650,1572,1574],[101,164,167,172,176,179,181,182,183,195,200,554,561,582,614,615,620,622,624,625,628,629,630,631,632,633,641,642,643,644,645,648,649,650,661,670,671,672,673,774,777,1572,1574],[101,164,167,172,176,179,181,182,183,195,200,554,561,582,614,615,620,622,624,625,628,629,630,631,632,633,641,642,643,644,645,648,649,650,661,670,671,672,774,777,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,582,615,620,622,624,625,628,629,630,631,632,633,635,641,643,644,645,648,650,651,652,653,654,659,1572,1574],[101,164,167,172,176,178,179,181,182,183,195,200,554,561,582,614,615,620,622,624,625,628,629,630,631,632,633,641,642,643,644,645,648,649,650,661,670,671,672,673,674,676,774,777,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,615,622,624,625,628,629,643,644,645,650,652,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,660,667,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,756,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,758,759,770,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,760,761,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,758,759,760,762,763,768,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,759,760,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,768,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,769,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,760,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,758,759,760,763,764,765,766,767,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,747,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,747,750,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,742,745,747,748,749,750,751,752,753,754,755,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,681,683,750,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,747,748,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,682,747,749,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,683,685,687,688,689,690,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,685,687,689,690,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,685,687,689,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,682,685,687,688,690,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,681,683,684,685,686,687,688,689,690,691,692,742,743,744,745,746,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,681,683,684,687,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,683,684,687,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,687,690,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,681,682,684,685,686,688,689,690,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,681,682,683,687,747,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,687,688,689,690,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,689,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,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,741,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1143,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1143,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,810,971,1035,1138,1141,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1171,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1171,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,809,810,971,1035,1138,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1172,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1172,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1173,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1173,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1176,1177,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,807,1176,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,809,810,1140,1141,1143,1171,1172,1173,1175,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1175,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,807,1175,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1035,1141,1174,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,807,810,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,809,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1179,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,809,810,863,1140,1141,1176,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1193,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1193,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,808,1138,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1194,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1194,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,808,1138,1142,1174,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1195,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1195,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1138,1142,1174,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1196,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1196,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1140,1177,1193,1194,1195,1196,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1198,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,863,1140,1193,1194,1195,1196,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1220,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1220,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1035,1138,1144,1218,1219,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1221,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1221,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1141,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1140,1177,1220,1221,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1223,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1220,1221,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1230,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1230,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,864,971,1035,1138,1142,1144,1170,1218,1229,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1231,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1231,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,864,1035,1138,1142,1144,1170,1218,1219,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1232,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1232,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1035,1138,1142,1144,1170,1218,1219,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,863,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1140,1141,1177,1230,1231,1232,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1234,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,864,1140,1141,1230,1231,1232,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,865,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,862,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,863,867,1572,1574],[101,164,172,176,179,181,182,183,195,255,553,554,561,863,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,871,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,869,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,863,873,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,875,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,877,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,881,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,883,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,879,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,885,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,889,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,887,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,895,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,897,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,899,1572,1574],[101,164,172,176,179,181,182,183,195,255,553,554,561,863,893,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,901,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,903,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,907,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,905,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,909,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,911,1572,1574],[101,164,172,176,179,181,182,183,195,255,553,554,561,863,894,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,915,916,917,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,913,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,923,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,921,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,919,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,927,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,925,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,929,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,931,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,933,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,935,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,937,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,939,940,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,942,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,944,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,946,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,891,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,948,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,863,950,1572,1574],[101,164,172,176,179,181,182,183,195,255,553,554,561,806,863,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,954,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,952,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1177,1243,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1243,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,971,1035,1138,1142,1242,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1177,1244,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1244,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,971,1035,1138,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,980,1024,1177,1242,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,980,1242,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,806,967,1035,1141,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1140,1141,1177,1243,1244,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1246,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1243,1244,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1260,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1260,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,536,546,554,561,806,971,1035,1138,1141,1144,1218,1219,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1261,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1261,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1138,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1263,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1263,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1138,1262,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1262,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1262,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,971,1035,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1140,1141,1177,1260,1261,1262,1263,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1265,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1260,1261,1262,1263,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1254,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1254,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1024,1177,1255,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1255,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1256,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1256,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,971,1035,1138,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1140,1141,1177,1254,1255,1256,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1258,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1254,1255,1256,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1301,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1301,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1042,1138,1300,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1300,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1300,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,806,1035,1138,1141,1144,1218,1299,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1305,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1140,1141,1301,1302,1303,1304,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1302,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1302,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1042,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1303,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1303,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1304,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1304,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,971,1035,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1305,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1307,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1305,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1282,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1282,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1035,1138,1144,1218,1219,1281,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1285,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1140,1141,1282,1283,1284,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1283,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1283,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,971,1035,1138,1141,1142,1144,1170,1281,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1284,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1284,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1035,1138,1141,1142,1144,1218,1219,1281,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,956,1024,1177,1327,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,956,1327,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,956,1035,1042,1138,1142,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1328,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1328,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1329,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1329,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1042,1138,1141,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,956,1024,1140,1141,1177,1327,1328,1329,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1331,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,956,1140,1141,1327,1328,1329,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1285,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1287,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1285,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1339,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1339,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1340,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1340,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,957,971,1035,1138,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1341,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1341,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,957,971,1035,1042,1138,1142,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1140,1141,1177,1339,1340,1341,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1343,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,957,1140,1141,1339,1340,1341,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1351,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1351,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,971,1035,1042,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1352,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1352,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1138,1141,1351,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1354,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,859,862,863,1352,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,557,561,971,979,980,982,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1365,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1365,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,1035,1123,1141,1144,1218,1364,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1367,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1367,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,1136,1138,1365,1366,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1366,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1366,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1035,1123,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1369,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1367,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1140,1377,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,961,980,1377,1457,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,961,967,1035,1138,1141,1219,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1379,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1378,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1463,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1463,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,1138,1141,1462,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1464,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1464,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1035,1131,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1465,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1465,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,1035,1138,1144,1218,1219,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,807,967,1468,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,963,967,1141,1466,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1466,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1466,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1141,1463,1464,1465,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1140,1177,1466,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1469,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1468,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1480,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1480,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,971,1035,1042,1138,1141,1229,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1483,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1483,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,971,1035,1138,1140,1141,1480,1482,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1482,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1482,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,1035,1138,1144,1170,1481,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1494,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1494,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,971,1035,1138,1144,1170,1218,1493,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1495,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1495,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1140,1141,1494,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1497,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1495,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1485,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1483,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1505,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1505,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,958,971,1035,1138,1142,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1503,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1503,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,958,971,1035,1138,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1506,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1506,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,958,1140,1141,1503,1504,1505,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1504,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1504,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1508,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,1140,1141,1506,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1518,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1518,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,971,1138,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1519,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1519,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,808,959,971,1035,1138,1141,1142,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1520,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1520,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,959,971,1035,1138,1144,1170,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1177,1522,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,807,1522,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,1140,1141,1518,1519,1520,1521,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1521,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1521,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,807,959,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,808,1524,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,808,863,959,1140,1141,1522,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,1024,1177,1229,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1229,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,1025,1035,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1142,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1142,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1034,1042,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1036,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1036,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,981,1025,1035,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1131,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1131,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,971,1130,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1137,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1137,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,971,1025,1035,1036,1120,1134,1136,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,807,1024,1139,1177,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,961,967,980,1139,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,806,961,967,971,1042,1138,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,807,1024,1138,1140,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,1140,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,863,1137,1139,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,962,980,1120,1457,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,546,554,561,806,962,967,1025,1042,1119,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1119,1132,1177,1562,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1119,1132,1572,1574],[101,164,172,176,179,181,182,183,195,255,536,554,561,971,1035,1119,1123,1131,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1024,1119,1133,1177,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1119,1133,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,1119,1131,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,963,967,1024,1134,1177,1562,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,980,1134,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,963,967,1119,1132,1133,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1034,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1129,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,971,1034,1038,1041,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,971,1032,1034,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,971,1025,1363,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1025,1118,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1217,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,971,1025,1169,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,971,1135,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,971,1298,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,863,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,862,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,809,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,806,967,968,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,806,808,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,806,859,862,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,852,859,860,861,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,808,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,806,967,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,969,970,1572,1574],[101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,967,980,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,967,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,982,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,981,1572,1574],[101,164,172,176,179,181,182,183,195,554,1572,1574],[101,164,172,176,179,181,182,183,187,195,212,255,554,561,774,778,779,781,1572,1574],[92,101,164,172,176,179,181,182,183,195,255,554,561,660,667,804,1572,1574],[101,164,172,176,179,181,182,183,195,554,561,774,1572,1574]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"d828ff531a832da354516464c5e25ca4970561f97ed02c77cb02d91aec4e80a6","affectsGlobalScope":true},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651","68937fe95088ffe97ac986edf4dcfb88cfe71df2e67db91ba03ee165779dedd7",{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","impliedFormat":99},{"version":"51d2ffea2d1ee4a81c775938588c1e16620281adb60cbc26579a2fc6baa10bd2","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"a413e4b0b99280e1e58f5fe7b2b585e8a9be4996df8c58585399c9e2ca8a683e","impliedFormat":99},{"version":"609ab2c225766bc0851251c1db0fd5492673e190074045d21dc5dc7c3c46d785","impliedFormat":99},{"version":"c074e054c9db79055d37d7d70131e9a3234b8186773b3edb617c13f80bcf8774","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"7f3857dc5cfe1e5e977edb14e931d9939a952e8e41997263a927f8f0299ea652","impliedFormat":99},{"version":"3559624d0102d10d7765c292c60ccbc229541534db32061e06df88bfe1064636","impliedFormat":99},{"version":"5a9834c603c65aee5cba0c1d6b3c7aee85cdc7862832a23165c6aa4139c165f2","impliedFormat":99},{"version":"a7d7b5fa83cd7b3b4c2aa73bc29e7cbd53d5690b74f6fb39a5558af0a94967ba","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"f093d4bd6a9267be5f8ecbfbca19f4f3359b3839883206150c5d833606569e84","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"4a13397dffad4475c45c70fde584c925fe8c9218b3c7ab94397b68fc434f63b6","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","impliedFormat":99},{"version":"2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","impliedFormat":99},{"version":"7cd92bc6808967f175063fce65f8d1d60a07d752b79ed20aa2eba9a2b8ed0820","impliedFormat":99},{"version":"59de9e07114b1da6421bf15359a951f1b762cb19c3a6abfc2e671a5ac2599dff","impliedFormat":99},{"version":"84e977ab810a75dc103b38cad1e019d3ab8f4ec9042b8f09f117b7d18c4076f0","impliedFormat":99},{"version":"9b98988fc27cbf7f08598871f275999540bcc267a8a47453866a198f93601959","impliedFormat":99},{"version":"2b1795d67cf9aa20167c72d795d4db6badea9cea646d9181869b5ca08c778479","impliedFormat":99},{"version":"860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","impliedFormat":99},{"version":"7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","impliedFormat":99},{"version":"07ad8a597ac75084e3dd9f9fadf5e8d7ccdcfe2f0c94ea0cf1cd8aa027a6c46e","impliedFormat":99},{"version":"94ddb4a2bb0c69e8efea22c58c2b6f84017eba469a4e433f5396ea8619d051cb","impliedFormat":99},{"version":"e903e44f2e300eea6d162c5481ef5cef28e18c3c7e165740090a65be6c80f437","impliedFormat":99},{"version":"632711a108accd4533a327ac3b60d0518fa536dfdc2d9e146222c16aa348506e","impliedFormat":99},{"version":"81b5530dfc39e1946dd771dd5526b84710e11d6a371812b1dc2e8eef9e12aa61","impliedFormat":99},{"version":"50230eca200a864bc52fd87a82c6085f1bcac19bf9865d98c3ec1d9b5672c118","impliedFormat":99},{"version":"cd71a7eb14e09b7962e8955c6b0376be99044d814e7d60d7d1e9d095716b89f3","impliedFormat":99},{"version":"e08660f21d0e8b367414e78706ae69a19b078fb67b0fe8c818ccaeeeedc00272","impliedFormat":1},{"version":"32727845ab5bd8a9ef3e4844c567c09f6d418fcf0f90d381c00652a6f23e7f6e","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"82919acbb38870fcf5786ec1292f0f5afe490f9b3060123e48675831bd947192","impliedFormat":1},{"version":"e222701788ec77bd57c28facbbd142eadf5c749a74d586bc2f317db7e33544b1","impliedFormat":1},{"version":"09154713fae0ed7befacdad783e5bd1970c06fc41a5f866f7f933b96312ce764","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"a91c8d28d10fee7fe717ddf3743f287b68770c813c98f796b6e38d5d164bd459","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"a270a1a893d1aee5a3c1c8c276cd2778aa970a2741ee2ccf29cc3210d7da80f5","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"ed8763205f02fb65e84eff7432155258df7f93b7d938f01785cb447d043d53f3","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"36eb5babc665b890786550d4a8cb20ef7105673a6d5551fbdd7012877bb26942","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"8324f3861a7a8db0f9d294f6a189182b2d231840cebb7f3ea5f4635773cdaf41","impliedFormat":1},{"version":"7a8ec10b0834eb7183e4bfcd929838ac77583828e343211bb73676d1e47f6f01","impliedFormat":1},{"version":"b07f64ff6ec710998a62b07377fbda0ab4c313ba1f0055bfe9faa22cffedd47c","impliedFormat":1},{"version":"72ef861333c7870a29fc0e248129c4afc0741c0716a74c3da409d05e41ff1322","impliedFormat":99},"49641a5eaa0ab31c12d312d53b724213afccbbbcc8e43a1119479d5e71858e61",{"version":"168aa44771e55cda628eeb5fbb6f626f6f263d827967b119e8c06abd7f1362ec","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"064499a671b662b25675beccdd04fb0bdebb6bd49bdb90d448e4b1ce3db20526","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"54460343eae2288e42a041a096da60709dc8150684cb79679770b68a46a33601","impliedFormat":99},{"version":"2faebfa830ae4cfbfb58e48b0ec20a2a63882d776f0ca36ec7155d45cf1b7f2d","impliedFormat":99},{"version":"b478fad6cb2c66bfbfc027983240b416a7733013f878056ba92cf809020018a0","impliedFormat":99},{"version":"10a7c14e787e6b77f7079b80a8013f8349b37d115673f59bb7d5c17616df4e09","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"ad763fa0c24ede2b818eb6598c12dd581451f94688fb9ed963beba20d513a7ec","signature":"90ec9100c29e008c3d9194acd818e2cfa6dc6e177154bc8e10c5959aa35619ed"},{"version":"779a08ff2ae8855cf826d32062335e0d09d86ca4ee4b288b2cec6dd8d5ec338c","signature":"2ce3ed9a3d1ebf72e4a45464c2407c21c315fc9fa491ef2b02f3608b07450a4a"},"32ffc97bd9635972ee63e77eff2ef2839aeb2e842822a492136d822f70681655","0f55b5907842f16784dca83f2c82ac05e1e8740f2ec866c95289e05061384e4b","7c8545a7c4ec6978ebb4af07475d76007eb084c4f7f45aeba7ee817eeb4316e1","243d22ed8f1d2e7fa0d99e4f25a87b791ebf16769fb48de846c9ac34ed07903e","62fa0410d02bd18aa492a8c465834a3bb8691e9478205041e297c08f30d57f46",{"version":"b7ca2f47522d4ea41e65ff92c4c6dd9c4c8260da7c456a7631a9c88dc056b4d0","impliedFormat":1},{"version":"4f01e4d0959f9125b89e5737eb1ca2bfa69fd6b7d6126eba22feb8b505b00cde","impliedFormat":1},{"version":"4363a1adb9c77f2ed1ca383a41fbab1afadd35d485c018b2f84e834edde6a2c7","impliedFormat":1},{"version":"1d6458533adb99938d041a93e73c51d6c00e65f84724e9585e3cc8940b25523f","impliedFormat":1},{"version":"b0878fbd194bdc4d49fc9c42bfeeb25650842fe1412c88e283dc80854b019768","impliedFormat":1},{"version":"a892ea0b88d9d19281e99d61baba3155200acced679b8af290f86f695b589b16","impliedFormat":1},{"version":"03b42e83b3bcdf5973d28641d72b81979e3ce200318e4b46feb8347a1828cd5d","impliedFormat":1},{"version":"8a3d57426cd8fb0d59f6ca86f62e05dde8bfd769de3ba45a1a4b2265d84bac5a","impliedFormat":1},{"version":"afc6e1f323b476fdf274e61dab70f26550a1be2353e061ab34e6eed180d349b6","impliedFormat":1},{"version":"7c14483430d839976481fe42e26207f5092f797e1a4190823086f02cd09c113c","impliedFormat":1},{"version":"828a3bea78921789cbd015e968b5b09b671f19b1c14c4bbf3490b58fbf7d6841","impliedFormat":1},{"version":"69759c42e48938a714ee2f002fe5679a7ab56f0b5f29d571e4c31a5398d038fe","impliedFormat":1},{"version":"6e5e666fa6adeb60774b576084eeff65181a40443166f0a46ae9ba0829300fcb","impliedFormat":1},{"version":"1a4d43bdc0f2e240395fd204e597349411c1141dd08f5114c37d6268c3c9d577","impliedFormat":1},{"version":"874e58f8d945c7ac25599128a40ec9615aa67546e91ca12cbf12f97f6baf54ff","impliedFormat":1},{"version":"da2627da8d01662eb137ccd84af7ffa8c94cf2b2547d4970f17802324e54defc","impliedFormat":1},{"version":"07af06b740c01ed0473ebdd3f2911c8e4f5ebf4094291d31db7c1ab24ff559aa","impliedFormat":1},{"version":"ba1450574b1962fcf595fc53362b4d684c76603da5f45b44bc4c7eeed5de045b","impliedFormat":1},{"version":"b7903668ee9558d758c64c15d66a89ed328fee5ac629b2077415f0b6ca2f41bc","impliedFormat":1},{"version":"c7628425ee3076c4530b4074f7d48f012577a59f5ddade39cea236d6405c36ba","impliedFormat":1},{"version":"28c8aff998cc623ab0864a26e2eb1a31da8eb04e59f31fa80f02ec78eb225bcd","impliedFormat":1},{"version":"78d542989bdf7b6ba5410d5a884c0ab5ec54aa9ce46916d34267f885fcf65270","impliedFormat":1},{"version":"4d95060af2775a3a86db5ab47ca7a0ed146d1f6f13e71d96f7ac3b321718a832","impliedFormat":1},{"version":"6708cd298541a89c2abf66cceffc6c661f8ee31c013f98ddb58d2ec4407d0876","impliedFormat":1},{"version":"2e90928c29c445563409d89a834662c2ba6a660204fb3d4dc181914e77f8e29d","impliedFormat":1},{"version":"84be1b8b8011c2aab613901b83309d017d57f6e1c2450dfda11f7b107953286a","impliedFormat":1},{"version":"d7af890ef486b4734d206a66b215ebc09f6743b7fb2f3c79f2fb8716d1912d27","impliedFormat":1},{"version":"7e82c1d070c866eaf448ac7f820403d4e1b86112de582901178906317efc35ad","impliedFormat":1},{"version":"c5c4f547338457f4e8e2bec09f661af14ee6e157c7dc711ccca321ab476dbc6d","impliedFormat":1},{"version":"223e233cb645b44fa058320425293e68c5c00744920fc31f55f7df37b32f11ad","impliedFormat":1},{"version":"1394fe4da1ab8ab3ea2f2b0fcbfd7ccbb8f65f5581f98d10b037c91194141b03","impliedFormat":1},{"version":"086d9e59a579981bdf4f3bfa6e8e893570e5005f7219292bf7d90c153066cdfc","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"cd66a32437a555f7eb63490509a038d1122467f77fe7a114986186d156363215","impliedFormat":1},{"version":"f53d243499acfacc46e882bbf0bf1ae93ecea350e6c22066a062520b94055e47","impliedFormat":1},{"version":"65522e30a02d2720811b11b658c976bff99b553436d99bafd80944acba5b33b4","impliedFormat":1},{"version":"76b3244ec0b2f5b09b4ebf0c7419260813820f128d2b592b07ea59622038e45c","impliedFormat":1},{"version":"66eb7e876b49beff61e33f746f87b6e586382b49f3de21d54d41313aadb27ee6","impliedFormat":1},{"version":"69e8dc4b276b4d431f5517cd6507f209669691c9fb2f97933e7dbd5619fd07b7","impliedFormat":1},{"version":"361a647c06cec2e7437fa5d7cdf07a0dcce3247d93fbf3b6de1dc75139ff5700","impliedFormat":1},{"version":"fe5726291be816d0c89213057cd0c411bb9e39e315ed7e1987adc873f0e26856","impliedFormat":1},{"version":"1b76990de23762eb038e8d80b3f9c810974a7ed2335caa97262c5b752760f11a","impliedFormat":1},{"version":"5e050e05fe99cd06f2d4ad70e73aa4a72961d0df99525e9cad4a78fa588f387b","impliedFormat":1},{"version":"4ff327e8b16da9d54347b548f85675e35a1dc1076f2c22b2858e276771010dd2","impliedFormat":1},{"version":"f767787945b5c51c0c488f50b3b3aeb2804dfd2ddafcb61125d8d8857c339f5a","impliedFormat":1},{"version":"14ab21a9aeff5710d1d1262459a6d49fb42bed835aa0f4cfc36b75aa36faddcd","impliedFormat":1},{"version":"ba3c4682491b477c63716864a035b2cfdd727e64ec3a61f2ca0c9af3c0116cfd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b222d32836d745e1e021bb10f6a0f4a562dd42206203060a8539a6b9f16523f0","impliedFormat":1},{"version":"a3f6d8995864820a0207b7ef4ce1ed6a8dd2fccc7e70d015da15034807c38e1c","impliedFormat":1},{"version":"651df11341eff0b769fb83af75b1872e6cedf406674c5eaa2650551aceb5a816","impliedFormat":1},{"version":"774a466295d26eddab911b9f567040364e7b7d0eb8003ad3bfc92b97eeecf066","signature":"f15b4a91c10bf30ff3708a5e3968c0a52ca4e86a4b9a5b1c4fc8e9b5f1292f21"},{"version":"8fd179351ea5508c7de09b5c3a0de4a5b28b613c8974383bcde4fecf0a3e2fb7","signature":"c788a956032e3d31d6b5f98a301941197e46d04ae68ad49a403f353405037607"},"7fe9d657e96c9a7c00c2b4b661558719f371995052348a27e47ecae052f329dc",{"version":"1e9d4c3b066e0228765cef074a9bf49d0b8d3af461c97f2c511e8f7110b56235","signature":"e59faabf094dd75dcf08847ca1b8ae16daf269ca02c744c521b38ed5d297578c"},{"version":"9e8f19cd697c9fdfeadb3559f0ca26514075f7054ae1ba17e8fbc8684d12eb5a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"9dfe98d745dfc706198852e032c3c936092a4484951872c0d18639cf2ab698cf","44310bdd7b563dd9b2df0e1b0c45a789492e6620b4718778fca88e029f1765f5","030523c514236148e0f25975ef74b2490c391cb9596cd668728f7db5b0702e08","4109b1fb0cffaf1f2bcaaecb49378d7971b795502484bc2dbe0d4deae60c8057","ca52a606c31ddaae5f7c4055fccb3563cf7e85601c96dbf28b7d0795d2d21af0","edadad7db67a0db1a7d474ab075cc15b975d78780218a1860e14516208d7389c","78b3214dba4e86c41e4cdf5de5dcc853806ff74fad5df3dc1087cdbe19ad00e0","37702123f9a2c93d39aeeec210394811ee157b6e32b600c5e083d271370f7733","45b82fd88270dd3d0aff39220b341eca789f77c82813dc6695b2058479d8dc28","15631c00468c358645d55b6267edf935ab0e94dea8748d619ae23a76f7388912","f212078a0ecefabbbbc627b89e28c871b559c1c57a4dcae32c8d7c2b6c4f0a00","ec4e1ceba158e76dce8afd51f6b13caa6b67fe8e9d0c0686448b77fb76586adf","0123d9556cdce4baf2a45e330b4349a4237cafb954517f74b9aaad1f4149c20d","5aa2a384890d7f99f3733e18a1dfdcc06252d6e9898fe9a41ead51fe4fbf7ffe","df6e58c60b8bb7c770c67e691c2db312968580a6d8a15d96310430ac7d839284","c0cec2b41055b3b95b9fa0c65ba94003660846dd37e1e50c7d96649f663c8ca5","bf0c5ca730bb05b3b051bd6b597e6879666d0816b5976cc34b6c1dee53ad619a","0719b05dd9ee003ab7842674ab451088c8b300baa530e9ae090c4cb3e4489309","f10f0a3a482d18f4781c46a02fc0ea3cfefce68b319a9472f5b14f7a3ef5941f","f22b777b2d607fa72b8fc78073cfb2e743fecce0dc1dee82445d5ddbbfd03f14","cadbf01db107d2e9cceb5ecdd3f8f0084d996f07f2fca714409247deb26f0b85","a1d1b662c8d1e1d8a20612adb2c4cecd718f3b0e57d283cad95afbee8a61d132","ea7a4796f350344bbf39b19518d78169bd66a819f787b0a4d1a6ad642dbce7a2","1941ed0a7c9ff9106612c8fcc6ce92f24d656769a5d739599e4a6c34ad478df0","cc5bfa36a8f86eea23a84b78f27ba0f842426cefb5a13d4b53b80a331aaaa268","246ed9157ed5791bffc9037a1aa2a1b709a0fc75e67102d13e71d899dbbb5e0a",{"version":"27494de6a730122abf7b860cc02bf6ce805359bdcdf09095d6e9c9c63418aba2","signature":"959594ee2bcc74404b29a3049c85d0c7f2ae48df7e2b725160708a4a725fda88"},{"version":"5c7afbe31fb1e68671c798cfc06221cbade2f174e243566cf5b8fd0763e4ed52","signature":"233c0355b5b37601f3d2cb2fb9b35829c28220fbf3acc7314eb1d67509c3a2ce"},"433609291756b990304a258d06f4cf73d1a677643a8053d3a99fb435c668a4bd","8062a9596b370d008b1cd13429487a2ed9d35b28dca9a0f0aa78609fd0a96f9d","fcc8fb0967eda9256921f3cfc521d49f3d473232d4c754c09de1d50faa996e35","b28e8eddf4e5bc7659dd8369e31a71ee482d55ecfa6b84831fcc80228518b701","21382d3d9886a24696afabde6ba98ac0f2caedc6e62d848be109d4e2025bbf80","1b04df451640794168e4fffb092f9823a6694c11d3daf55b4994f847a2987322","fac17c78b79e957a330460096e2c511a77d7c22835a137659c599427ee68fb5e","662d45c385c6903b15921917388cbcbf6fe34fa1720ab9c073e628496af5e56d","50fd5c95036fcdd7101e2cdd2a336fe0d11b9cbfdcbd474d74a917c355ebc7ea","72121c537d221078e87c97dab842628674750a9d6aa2cf1b6166cfa664ed7382","ef6f6d882e73aeae8a7cce4a2492cbf0e4829fc963e79312e443a7a16a6cfb3f","c8d012f3fdd6a52336f10bec7e4509ea2dbb0ed1f2e996eac4b1eede14f9f88d","7f59d410bcaf6b219caf38e6e9a39866eabbcc1106f74ad50c914e7e40cb4a24","c71ae4fc28d6b2f5b78a95af5335129851cac857d19b25d5f06c8b014d3feea4","6bbcb670c4632ba69c7910572999840ac47a10cb49a1c437c5a52a40cbcdf10b","8b59281611e7ebf3a35207733d85f8b50a33cdb5d08492334db32622e0cd3212","044b593c01d82184a7e0fb5c2ac98447d44ae217f1405f239c3e1e62ae379abd","ab88aa6a3eb5f4f91c1a097e6b6002d35bb3b7517e1ce49c742a96d203758de2","1008e6f116f8169e368d70feccb510f8400b9fb204a699cd25cfeee835c88cc6","4455c74ed4fddb9ae9ba8eb37188fa934b6cf7fcd005053ddfb7dae7e5a6f072","3eb6dafdd02c962b39b09be9e31c695603b58c794e141d4eed2f49318f0af433","9b44504aab0385b4934bf502c8c06a5540c50a0090a34f4c2fb50e43e03f5505","1f08dcb29ad688246447d04e3b7e2d5dcf65311c36c09db4bce1bca316f0201c","61cb83a110e7a89d2ad5a0a4bd91fadb619619a98a16437189a856b51e1e9e0d","a794572bfb0885ec1de20b701e498a415c0480e4fb6c20dbaa125b374ae691cb","1b5be2e53f79f1f20967a235c011841152b2ca9f79b3b0640468ba8a8cf5cd7c","016e4353e0414c98c2ed2eb75df1509a38b457ddf000e9ff98125f82ea42c335","f76cdd7b076354cf26a7414ce5ebcef0a2a3384fdb6e406d4976c522349b6c93","3ef6579bdd5883302539b5370c5670331f3584dff9e2ef14bab39991f00a29cb","325d7dc15c789cc6358327f36e7cf2a916e969017c2b78decf9475af91dc86c3","3b642738f6cd019494d207949a63b67b6ad9013bb3f1fb5f8fa36687879db5c4","492bb2bed9c43e010cd0a50263969a75a72c6279f67654a6bb7def1a9cf74571","35a644763f50424937b17109eb552ddc767270a5526a0a827810ab86585dc53a","2e8ff3406c54b9e6ab83cde71a8e02eec9796f58626bfb39825d11e4e03d8bbb","eac3a35ef0fe0ab083e8cf36a29a821e014dce98f56d597ed2dd815ff4cace46","628364563c513db63865187fbf6afd635d3dc6cdbb8472e639a2c60fc3c13b86","c39c138e6eafd63689438247533cbd792f2487cfccf0ae812f9cde3087d5c1b8","dd81cddda6088f01807ea61dcc81cb09805f09cd222c1cdc07783262cea74cd9","c81045d6db59c1c83c84797bc1f78422a691ced9ca9a3554e2f8ef9aacc7dcfa","0496434a31fc8cf9e490e135e87ec3202dd0298290fcffbfbe4d93b3c180756d","bce05280900b4eb3333d10064531569c9fcfce6aa7aeca1ca03b2120539892a5","13c1ff47b7b02fad7d84109dc37613ba445a7a084561485dc9aef335c4c94a84","f5a22523635ca6f47c20b386b010ca1258aa19af5f4299f8752809c599315bcf","4895c3e936eb6d99b94541c611983585d9b5d805ff5a83b8f710e27f52dbafed","4f8f48136b4a2c472edf03e168e658ac758173fb38773f7849009ee0b39a81e5","cb12e3fd9be59bf0e28d6f18ebecbb52f8bd90258cf6dd2af77f7b12545a45bf","1bbd283b943af0cce0c72cde1e843e55093235b7dd3fa7d22dbe957039c0ec76","4f69209ce0e934946c859c4cc6248ef4a2dc528f5baf9b4fcdea5cf3e08d9d38","b1a319734a490e072da3cdb0e53c3d90aa63250323e29ef7d7d554acf5a174d1","8e79adf7f7c76bf3874257d3692b76744e5a6784c91cd27f93c30a8a5cc842eb","117c70fd7a19a5369ac35034f89ab731c6f6629d791e35334fb307b7042f89a7","ad15d915012090304670ff62dd5e48d7694c11787f4884f51cf80f873dd40aa4","38786de27bad4d667abb5f948b2357fce8de7448a52feb500965735a5f3a5a6e","fb5ce2f104fde415289b4febf27da970e40afefe42b87b15db28818ca9f94132","cb504109f1c6b549fde2eed46b44eaedb73ee7754b3f3a1c1c32bc5dd1693a8c","3613723853e81414c2e1220e3e0a696a997cc49e4390060b6ac7fd91aec150e4","d63995951dabffa413e3114fc0d39108a1c183939ef54616a8019d6061ad0651","082900437524e8bc6903f0d26479f590af1814cc5080fc502e07d38c951500be","1bbff9fec02470dc8837722310fbcb7de786f75d442f3e3116a291dba247caaf","34eb44fd7813a487540b6afa04da3175388b1841aa3612569e8aa07652363b69","fb371cac529d70b2eb453e41a785acab5429502dbc8655db1bd8ad27e0808825","21f089f111b8038ed34ab0b99060f733304397f66b20104c1db50769b8c80b95",{"version":"ba9331e5872154fc4b314f64baef4f128aeb8b468d5c914d83b94a790650e441","signature":"6bbfc87823c7147744279311f07f07e119a162844e380b5ee7cfbfb7fc9c6273"},{"version":"da528774ea74ae18aca17514a05c547a648fa364f68982ce02b56e9aaaa7b7d6","signature":"a9779efd000ab950e2097f789266a26af006c56a54d7bac966f2162262d4bbc7"},"0ceaa48c199fa1aab84399d7ab8ade3302ba2515e61956cadf13e218e3e3bc70","57f3de13ad44d856ed5e540986c352003cf45bdc0e8a6492c38c31c60472c7b6",{"version":"d13aa6a287f97c0fd714363a61238141dfdd5eee71844a97ab7158ee5ed75d56","signature":"fb09ff619aa414f4b2d422c19ea116cacc6fec3220db1dd2b51e2ce8b7b1812d"},"6c3a0ab3c359b6d2dd3c23e6ff12b680f7918501b6e01df409d212f0862d76dd","852c367110c2934ed35a33ad276111aa9b3016ec92b36b86a37b43642ad9458d",{"version":"5a2cdf6adeec348bbc876221be4367e8adff0bb78a5680ebd7d71e5c3bad6cc0","impliedFormat":99},{"version":"e004826eac62081f867c66dabd92d3ef7d126d93a70430a2c88429228c3ecc50","impliedFormat":99},{"version":"38d6857b58d2ac42442e396311c542062d4f0dad40f2adb496dd5fd0756ee400","impliedFormat":99},{"version":"34b7d1e2d15845cf08bcf5e3c01adbb92cea1ec27564ee249ba486cdfb28526c","impliedFormat":99},"0d0861810ff9d344ab37f055edbc4d14e68e2fa18e113ce8cc33aef9bb500b5f",{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"8658354b90861a76abc7b3c04ece2124295c7da0cc4c4d31c2c78d8607188d03","impliedFormat":1},{"version":"f1b1170112db2e1a93ea317419a35652f0e9a87ca1612674f514e6f93791d4c2","signature":"512960c0e955a2324b34354dac25e3e4d431a1af4cd33077935eda5e95c8b7e1"},"992404964e9cefb3143cde9bc8e5eb5e7010c3a207f5bfa52df49287fce758be",{"version":"968043e1fd7bb3c6b1c22d3341ede621d16a628b2bc4c35d1e43f0064ff7c1a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6d261c7be483027c9d281ba71314350ad8ce66efabf46f7b6099f39fe3b8d218","c02d45c2a6bc50186c1972f44c31ff22e887b30205ce84607bb4661c0fdc9846",{"version":"7fc06e1e53688bb32ccd86e730e08bacd38d9ad7ad006a234211b230825efb2d","signature":"d95aac1823e54b4183acab8f7fe3bec5dd7bd4aa297f56004fbcb972d299e377"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"c2175e53ec5b411439a03c757c499d2bb30c48bef05e83f372b5095fc2f8fb3e","signature":"2c2a937dc3435a48e0ac2cc67072dad512dc5240282c217955d3fb55e2b6a4eb"},{"version":"6c05d0fcee91437571513c404e62396ee798ff37a2d8bef2104accdc79deb9c0","impliedFormat":1},{"version":"5990e5575acfc932889f3720cf5915b1f3514d66b9d0dbcb55d2b62130b2afd5","signature":"ec851dc73402d7cce3fe5da65eb1f2e56235ce4533de1c561ea9edd6ac4b941d"},{"version":"ff19b24ffa97285a1178436c099096fc61588573b02b0591a55667dc72376daf","signature":"1493f2b02d2b0d3a61c10e1ef4da30f36eded81b57a4480dc8e23ce2eeadc4cf"},{"version":"9da2b0eebf78cfa1a8bfda7ff79b81b488805c9b663cc313824413b402d0dc8b","affectsGlobalScope":true,"impliedFormat":99},{"version":"b51bca9749817b5ca6f945534921cff40d00fb1e44378011e8f0033ddb27a9cc","impliedFormat":99},{"version":"2e82d0ebe6ce039ec74ca4d1df4facdebda4efa23e60a6216b4176bc8f4a0aac","impliedFormat":99},{"version":"f92f4e4f821a787525611edfd46e7376c1bcb4565f70b20cc5f055b1164a8f17","affectsGlobalScope":true,"impliedFormat":99},{"version":"6cafea37fea0c60b8977c7e0d59634db0df134c7a51de02064594de3de805ec8","affectsGlobalScope":true,"impliedFormat":99},{"version":"0295c7a5d5d956391ab9bf0410e73a89e25fe26810f9a1d823cc794d682cdafc","impliedFormat":1},{"version":"19826a846db870c2261a3c4cf0695df889d9fe3eebe7775f3f5bc76fe7ad07a7","impliedFormat":1},{"version":"e04cafd03370139cdb0c846273cb19eb4264be0073c7baf78e9b2c16ffb74813","impliedFormat":1},{"version":"7c01c77fb7d8664daa64819245d785e106e0a3cb6e43da64346e4400d7fa9401","impliedFormat":1},{"version":"8c2ca98f4713d989d610fbd38a44316bc43c50aa26983e62dc31002f32ce63fa","impliedFormat":1},{"version":"ee931610d1cf7a6e666fad138187751392fc88bee931b94ac8c4571208dc7370","impliedFormat":1},{"version":"53543b3b64e624a81fc5876da6d72c94dd87655e7afc10988cf82ce7cbc74180","impliedFormat":1},{"version":"967e68e99b8a80551837321442a0e2f12ef50aa1ce567ec991ac6bf062a0c7cf","impliedFormat":1},{"version":"144ab2f3ef7404caf39c6acc88d248d7e55ab3dd1c4c0d89367ad12169aec113","impliedFormat":1},{"version":"759002d4454b851c51b3585e0837c77d159c59957fc519c876449ee5d80a6643","impliedFormat":1},{"version":"07c50b6db67b8b943aed3e410bfeebfb6d3ba1fd1e2819bc889e48f81e94ed2d","impliedFormat":1},{"version":"e3a5287471fb08f053c06fd998632792aa5f022e45278f1e6dd55fb2fa9e7362","impliedFormat":1},{"version":"28a6c8eeb48e165920067b9193555649fc43c2a28c450f23f622e5eb043d9463","impliedFormat":1},{"version":"1147c3efa5a256bcd6a3d2cfaf764185b7120bf985f8412d9bae596a0348f77b","impliedFormat":1},{"version":"490cb6f5e6c90c4eeab1d237242901fc418bd1f08345523beaccc7357122166e","impliedFormat":99},{"version":"cd4908c240506b0aa278c4c8d6bc1705acb41b03fc5b1d86a47f7a9f76f0b075","impliedFormat":99},{"version":"e663cd7abf76422500d57d6500a546fb51e79a095c23914efc33ef73a32f4f8f","impliedFormat":1},{"version":"1ac8996804c14b6ad107fa17f47cfba0f9a4e6f5bfc3ca8b6e6f6a4cfa636398","impliedFormat":1},{"version":"7a317ff3b65c289d4344ea7b6e0a9793168703a79bf1ee889b3ce379b58a54a3","impliedFormat":1},{"version":"543898906d542e8d0631f6861268286722ee148c5f847d33d01cf8bb8b56414d","affectsGlobalScope":true,"impliedFormat":99},{"version":"68ff3225eb855a861e887d0855235b5ac0dd4eacd64f4f4582e48dfde7a192ae","impliedFormat":99},{"version":"3252a756534812804c43800a431da5cae9b641d7849ced2251ac2e711920e38d","affectsGlobalScope":true,"impliedFormat":99},{"version":"06a54bbd0060db53427dd3bb3dd58e3f266a5896e84396ada2e8ff1d299a27ae","impliedFormat":99},{"version":"fabe432191f85afa382dfb08ce4519938c4365eb5c2bb2149405d88151583fc5","affectsGlobalScope":true,"impliedFormat":99},{"version":"29db2c1e2e934e0c8cdbaf8f7f5601e1b4dfdac35f0c839ebf585ab242f1476e","affectsGlobalScope":true,"impliedFormat":99},{"version":"8663fa4279da9eaddb386c1bc28de7f5b433dd2518763ebf185ed198b4b60aec","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"58eb22ce690f7941a952f307d51a210195798c9fbc381470fe7e0adb228d4c92","impliedFormat":1},{"version":"49a70606a1a2e65aa6daa491d863c7ff09336c69eccbfd88800bcfb487933fb8","impliedFormat":99},{"version":"3c1100ec1393484b2c486ccb4dd8c8988af1fc1c0e61c2f892e5c370e41b63ea","impliedFormat":99},{"version":"c967e03c8dbb4770f7e2f0b71b5d13593de679a41cc2b60266c4b69f1342a263","impliedFormat":1},{"version":"af5fd0c8cde550fc2c081a18517fb30954461a16daf2ed7969db3805e5a8d7d9","impliedFormat":1},{"version":"d4da3464d2c4b7d80d203ae64bb5c75a66221db5eee12a4ef2c4ce2c9d19a821","impliedFormat":1},{"version":"db820c42ed9b21f2d81ba48889aeb1317c710959346b042f07cee69a545f1326","impliedFormat":1},{"version":"695f2b1040663810ccac946cc87dea5236e3a74efb4bf5964def8961309634b1","impliedFormat":99},{"version":"8cf30ed8685586888fe2a1f781c7bf433c07422648a24c05aa4761253f8e8fec","impliedFormat":99},{"version":"c226530483794a0a83c1afb189213a2bfe109a1c0716331e5df9664471ca8d64","impliedFormat":1},{"version":"7459d85c80f2971be954b562724106b13d5a2a57e8bfde51723e94e838f6fcbf","impliedFormat":99},{"version":"c24ab9ac84d65b417a807ada25456697bb2adf1189fa80cb240625dfb3e61c42","impliedFormat":99},{"version":"03952163760a479246853f7ee56fd231d703e8d6f78deb353c7892efeef3db3e","impliedFormat":99},{"version":"0d121799b2cbac398e84a4708fcd82f980f33bf3ac7721a3cf9db9f28d9eb2b2","impliedFormat":99},{"version":"b45c2c7da9952665f78397fccb03f67535535939497b11308c9409c8505eb32a","impliedFormat":99},{"version":"9c3663fa36fb976609d8fc43372ae38dc2e066dab014a955f40ae6430733fb71","impliedFormat":99},{"version":"e38a172f8912eebc79671e07b81687a304a9d366a47933fde9f97ad79f8ac08a","impliedFormat":99},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"f3aef38b4236eba6dc8305c57a73deef526acc480e86b502ef702a4a3faea496","signature":"bf2a96598469ac5172e826a5498d1d36a9cde815881a71b98bc59047709f0b24"},{"version":"cdc56b163f9af283176368c33457f1aa84c5aa6cc8de51e296a81fc702f75ee3","signature":"53e6a8c9b6e07251a846bd666ac8edd440de1348020dad87cbfd1c5c97e42d90"},{"version":"c840e12da509f2c771dbc356a23750227a43d1864640c7e6404b8f9ec86b3871","impliedFormat":99},{"version":"6ae92eaaaef30fae975de604d3af31d5b00eca7f02d89fab589152df926685fd","impliedFormat":99},{"version":"26cfaec143443411bc7d5363f274f885ced430b8f4bee25a81f7827248848d7b","impliedFormat":99},{"version":"e3b3780b68c70ff42894b68ee8f49186ef3335fc86a9106dd07e11580b460cc1","impliedFormat":99},{"version":"459fda119c27213d3defde220c051414020029abd52fb6fb9aea0beedc512c6b","impliedFormat":99},{"version":"968b0403af74a785c9408ca69a677235e49d0c80b2c27fb9858ad421a8778c7d","signature":"d80059fa0b24af7ba6783b3c35e18868187c0295a66c5d775aeefdf8f12b9f6e"},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"ad98c359284db8c984e88949b2c3394e4a35158880767b772491489788a6c5a0","impliedFormat":99},{"version":"5c117cca0b75ed634fe3085142a931df2e2214e26f2bbcb34c592b767f13c1e8","impliedFormat":99},{"version":"773c18e2bcc18598df8f8b2be930eb26b22608edf368e42e9ca3484828ec4122","impliedFormat":99},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"4faca872dbd194a17b3ee267bd8ddc3daf3d16df96f4e43a02c7d9a862022c4f","impliedFormat":99},{"version":"f89aeba83b1744a0d697c1b7fb8a06d8dc4cf7c0d469d2419772121f499efa8e","impliedFormat":99},{"version":"144a4e5780b800c0553949169f50be285eccbdb0298afd83ef2ae03fef77e2d2","impliedFormat":99},{"version":"66aeb47bf8638d6767f7b4ff684c2d794391c981590073025e98f98e1afed499","impliedFormat":99},{"version":"26748898fec8579096c776866e8e6f07754845b3d08f5ae98c3a59baa9e85c2e","impliedFormat":99},{"version":"6d805abd62920edbd9ed4b20be26d040d01529f3ce53fdab9ca4d0fa9b589f02","impliedFormat":99},{"version":"edbeff52e73b0ff82898142aaf8ffb336910a8ccdfc31b79960ea4ad4c9f407b","impliedFormat":99},{"version":"b64a8c7a27133db3f181199d21c0c582e86f38ba57a031a126b77229526b4916","impliedFormat":99},{"version":"4d857105510df8011cfb5b3769dec55624a1df92e85d399cd03bc82bb89d090c","impliedFormat":99},{"version":"8eca47167dadd486582ecd4e41f7fba6ae66cc4a4c5202f1f7acf34129a0dadf","impliedFormat":99},{"version":"755fc4f6a7aca9da7b38e1f7a39abd36538a72711763c741f1bbbf36f999b654","impliedFormat":99},{"version":"c4e79e849fd94553e07d7386552c472ea4f4fbfc9d280c012018fe7a6c50e598","impliedFormat":99},{"version":"062c0cf9641ca90ff3ad8edc61c2e06299fe6585fb9a4014a8acdf7f11810d51","impliedFormat":99},{"version":"f68896096cba0f06ffbf39a67c2280f6f2e5b90c75db56a3f9ae5f7f3bb54460","impliedFormat":99},{"version":"97b02501eb45f487174d5a0ff89b6a95690d50e9eae242e2162118edd5f2705c","impliedFormat":99},{"version":"425a03d68f43164e0214b1c333cd58e777d4186f412b530467c18ef0d2b37a80","impliedFormat":99},{"version":"f9a591e5fe0be6728cc84e70325aacafffcf203b051ddef37d65651b43c05056","impliedFormat":99},{"version":"293c0a3e323608f4e20667acc74d7bdba727db954b840ee1db03f2fd5807c761","impliedFormat":99},{"version":"de8b4c367880fe92a0a740b706f08a46d1cf9e3981d55c2701e82423e81ef0ef","impliedFormat":99},{"version":"4a056a71ffda9ff3f2adec60c0189c906f7e46976a0c6650fa196674ff8c4dff","impliedFormat":99},{"version":"3a3fd6f5ca85ceeb293f2a010125f9455404958122b6dd0ba0b34f7dab74feb5","impliedFormat":99},{"version":"42b58bc8da11e9181ecf4ac498d41c74930c73c8ebef091474d0f8cf971b50ac","impliedFormat":99},{"version":"9e003336714371c98108af3dc53342829039327f8b1db97d826ca81805746b7f","impliedFormat":99},{"version":"d8954254110123f6f5c9fda6280674f6b853d47df7fc41c2090e741dc8b6b627","impliedFormat":99},{"version":"cc141bc69488825723b0d638491da8779c4c3e515712d5e1e63709e0136dfb2b","impliedFormat":99},{"version":"df600fddb7f36e4c4b3cc4e36073d0099a5b6352b88be02decf63869c8886313","impliedFormat":99},{"version":"9fe94c8f6b36cb41acd30d89567761a52246932dece21e1ce104baa2e84b07ac","impliedFormat":99},{"version":"5560b9471d610c2543dfaa66a88f7b7cf05cdac61a698d4106b3845b7b7b3b29","impliedFormat":99},{"version":"e80a0ca19ba1ea6d815b5017ce248fc817c076522d1b0f42f062a784897a30a7","impliedFormat":99},{"version":"e96bd939a55117abe6ccbc02839f2f4d9ce3893368fea528ca91c59ebddf496f","impliedFormat":99},{"version":"81f6bf27eedb1ed92466abfcee33795a6b2304691ae01f42e60f8c76894fade7","impliedFormat":99},{"version":"8ae2e6733fc535c43c514f871d28cb0fe5926238dbc3d64c978a1f6f00d73296","impliedFormat":99},{"version":"26a0c2d883e1ed55ba00810d957dedcde5d16d637e33063686e2bc3f58a5c64a","impliedFormat":99},{"version":"68099697ac4e919f6f1832389f32eb67d3d94fae744967f33e0cbc049a222a3a","impliedFormat":99},{"version":"bfb900f7de2066a4be644c269285fda8ccca40b065476a27b082173014d00467","impliedFormat":99},{"version":"fea750ade335a63f707e7fd7410cc11b81805f6b454880e1ed0e178c08fae8ee","impliedFormat":99},{"version":"7e2b8299e85423435784cc6244e2d559ea862d226e7b0ec871c6a53f88e5139f","impliedFormat":99},{"version":"51b6335f5a8e177306647558a3eefa1f6abe259b283c6462223be3d7d0f33300","impliedFormat":99},{"version":"31a63b6b49338cc6ddb1a318beda72d3d8fd523e50f8dd5d5ff3accd39a490d7","impliedFormat":99},{"version":"8fc7615fb8fa095406f5a58b1b817b9a685c516058877a3d2c06d4545fdf5dbe","impliedFormat":99},{"version":"f70e9fcb8172de822a729503eefece37f169e063cd7f97a978e3913dc872a82f","impliedFormat":99},{"version":"d5da26af31358a4883edb6112879018b14c7c1fbcc457aa36961b03ee17bedea","impliedFormat":99},{"version":"4e93fb2d2c59bbc1f1a5211b36c447efe4d0af568d682ef1e5eb5f84ca6ccc2e","impliedFormat":99},{"version":"b6cc07bc56c7418ab500421d2629c26acdb6ec2e9af85c5e2c5d7e8c9f92566d","impliedFormat":99},{"version":"3d13fe973e92e708ad3dbbf1b2385bb799f8e70c8da71a1ac72fcb5521c8a5e9","impliedFormat":99},{"version":"16f3f66b5182e57c554d0e374e29fdc0a899c1321b3f94fa997d19abf9faf931","impliedFormat":99},{"version":"df459c67b9eef71318851331b23926961f0476b4b9d1674addcb627eabe583b2","impliedFormat":99},{"version":"b93915733f1802a8d9093116a5e660385afda0f72a5bab9c9bd356549a61f1cd","impliedFormat":99},{"version":"1dfb1491b28cf3734f3c07745a56d7758a12d546f81a70fbfe8ee9faeb528c54","impliedFormat":99},{"version":"42b00a511331c7f79039ae3be83fd5941b212ce193654c3ac5d82157227b69ad","impliedFormat":99},{"version":"1a5914065c7c6e2b6e98437c4ba6059bfeda3441f0f55cb07189df1e78698922","impliedFormat":99},{"version":"66d3f42196f32c639d8240bbd520852abc024d673c713bc5ab26b4bdde750a74","impliedFormat":99},{"version":"18ce9175445b3edec11bbca1c682a8f3919e74fb3504abd883ac462ea8089a0d","impliedFormat":99},{"version":"aec96f94a27fc61d5f4ead202628e811199f887d48bb7614b7e1706b629cd1ba","impliedFormat":99},{"version":"2ab01a0368f65b3b891e25416ae785dca54808f70d8f6204b99589ed4f7f1d2f","impliedFormat":99},{"version":"efd87ca2190e2d0f905e30343443c8d2f0d32cb2b1c9e05b2cb97b0061abec08","impliedFormat":99},{"version":"3323edd649d2c85d3528912cdf6fb770258d59d75241575fcf25c7850837de79","impliedFormat":99},{"version":"e0c8deca5262879f11ee84fe6664dcd197a60f546930363bf2d78d37c3138c69","impliedFormat":99},{"version":"3b8ba0456ce7763676505d103eb336a6b97659d6fc8a7d7d186558ea0b8c7ea5","impliedFormat":99},{"version":"7bae4a3f50a844fcbdc504d717f5f13dd7178ca99f131b230305db6b55e1dbc3","impliedFormat":99},{"version":"f3a4668046e42e9f5ebfdc8b79238eb27c399443dd1dcfcd4c4c3652692ed031","impliedFormat":99},{"version":"07160ad59d49c6f2999f9703542918df3eb1ef93857bc560b4baa7c6775d22ce","impliedFormat":99},{"version":"642d33e1e66ab109cdcc5a5b5535535768c8b642fd5ef75de4d77de3a5632601","impliedFormat":99},{"version":"c23b9684ab48ea6956f0a510c3cf724277fa457efa7ff85d5907f4e4290ba0aa","impliedFormat":99},{"version":"3859635347ecc10d4ff5dd68bde66420f5a8539b7313dd62020aa025208d2222","impliedFormat":99},{"version":"f49e8feb6d7473579a5ceb5872598bbc1be3723da653993472720629c72fa0ba","impliedFormat":99},{"version":"14c727434cfe6a078b51a88d005033ad01a76bec36292d7b47369d82e48e1cb0","impliedFormat":99},{"version":"ab48218964fb2f2713948fde8f501a80d0453c961bc23b7b37198294e0992f5e","signature":"b9acca28c776aec8d087257885a24491333a1727c1c7068f5de67816e6b85de2"},"143daa1e68476036aad0a48935a238787374b73f82730c8a84fd8fec6dd542e2",{"version":"c3d577953f04c0188d8b9c63b2748b814efda6440336fa49557f0079f5cf748a","impliedFormat":1},{"version":"787fe950e18951b7970ec98cb05b3d0b11fcdfeb2091a7ea481ac9e52bf6c086","impliedFormat":1},{"version":"13ceda04874f09091da1994ba5f58bf1e9439af93336616257691863560b3f13","impliedFormat":1},{"version":"47039aa29dad4b33704e9ab56ca4ea4c918aaf86afdcd4e059f9dc6045850b6d","impliedFormat":99},{"version":"433839016857a5a785134d2d5e760fdcc9819d241a3ffb5cb76985e666a34a8c","impliedFormat":99},{"version":"ef23a7b386401847e3b4c3ed1b087c32d56e7307b2782aa2f0d0ff4f02d70473","impliedFormat":99},{"version":"2dfa6d1aea770ef46bd51a79cfb7aa10b9ae90c9971eb53b4f5def028425c800","impliedFormat":99},{"version":"66cd137411911fea6db4b352a98279470e386eb3b1cac5db3de1efad678a9015","impliedFormat":99},{"version":"f8d95db2d66d268765d447b554dffdb3f1cd2a22e8da7f6f57dfdcad6a19a1e8","impliedFormat":99},{"version":"449e9856b59558abb085380a4ba7720ff0c62b52145efd29289bc8ca5777a6ee","signature":"9a38ce0e9264512c2af793453b7a0503e44a60a25100f53e3fb8d7b0c1c95d53"},{"version":"3acb7fc0d7ced88b9f487c879727e0f28a582f6e2048416f16467ba02f7ecfb4","signature":"cdd90dec979b4367fcb144d5b08f8311cbf35a855f5aa80182bc418dbb3cce10"},{"version":"c50901522b1e7134406211b16ffa8b4cde69dc5ffc7875a8b9bbf67cee58a574","signature":"a4e79780a39c0fc2e61bc66f20a63f11515ae8cda63852bf56f75664aaed0438"},{"version":"1fde29e312d38558e5228541a1b57a4f2ab2375e9f5de41e645b52b6144037d7","signature":"a7b2f4e64735319a876c55f776eeccdab6cc50e664b55b1b62a27aa7fd09e743"},"532069a8eae99274aabc8f7eddb0562f92390ff4f63ee88165b81e7f41ce6b96",{"version":"15abcaa279117eb516a90c09c4b60c53fb29c1242c7f67bb1003e0cce06f7d19","impliedFormat":99},{"version":"75085bd84ff6965e4a356c53a4689799cabf65caa93c0bba064d5a0c6fa78f13","signature":"bb4b02b4dd58d4e434c952da55797cf052d30d36b09bd14aadfbc70a037c84ce"},{"version":"9b9c017398f69342538aa3bed35ac41ceaaab50455ef78119a0ad3cd867ad30c","signature":"6b4e3e37088479031c51a3057da418b3ec0bc7238a006ed374c3fb4b29b9a4ee"},{"version":"fa46a73bf9fd98d5e7a45e36dc7b7d8957f8c8ac6d4a0de833860c8870a92486","signature":"9bc26c030aef4b75d3bf757291b79add9c525e1ed6a83579c53c5077feaab77d"},{"version":"6d4b09490f0f4c230fdbb5993b3eb929b281b447dc403209d239e62c912e7b7b","signature":"2e8ace1e09235d2b98e61fab48614e4e94c36f427c3c815b436570eed7068a41"},"842232fa6cb875916dc88b9915f303952ef80da95f7ba326c0d9f34c0cda3e07",{"version":"488c2eab6b0f3b8949f4a2458c60a8e8768549c9c2227b6b7c885ccca3261d8d","signature":"2dc7085a3856beb3291a4eb024a77421349c5b201844fa96a88b879ea9ade85d"},{"version":"7a909af0bbc8a2631cc3bdc78cd02ec02ceda31c467137a7c4171250bcd077b8","signature":"ebe17c0f79d00d4336e2868b21aec2251ee4d5a74c81d1380236997f5226ec89"},"0cff61f327ef0d4533a5bc890822df15579eb2f027029b0adbae3342b4c4ef17",{"version":"7f19b8476658d25ff197c84030e58cd7395059d876a54630e025951e474ebdae","signature":"cbb6e618cfae37c1feb246b78260428cf2bcba79a0c9bf1ac60d511a4158692d"},{"version":"faf9a217d8d237b02ab6d95508d8736ae431bbeb38d98885eb5b8fb6dbe48cec","impliedFormat":99},{"version":"da08c6b6a9bce701e6d2775ac410ddb2a7189e19b020abea06c1932226248ae9","impliedFormat":99},{"version":"b2e5691a1a795e58a63d10b907248299ca96bb3433b7fb252279b4f00cc3a5d0","impliedFormat":99},{"version":"4244c6a12dc14768ddc3ee2737ccf1c6c0d07353785d5979df7d250eda461a61","impliedFormat":99},{"version":"cce820aba9ba9d1984461c67d0d543d8eba7ea25c6a1be7a47c31cc18907a631","impliedFormat":99},{"version":"3e7e929f14bc384ed6da8ef0c7dc3aae5ea191494c9554e4327186ef40db2573","impliedFormat":99},{"version":"2abf45177ecaca091e103f4d9557a7e8524d160b28a8dd457dcb7defca65245c","impliedFormat":99},{"version":"bb2b81bc35df3045d588a60ac6649c7b45f539c855660642ff1c12e9b83fbf1e","impliedFormat":99},{"version":"acd4a1daff6df3526b17094f8f30ef3c9c19c9bd5bb95c3fa46a1b8037290778","impliedFormat":99},{"version":"b719a8ea8321a8d636c2765f8b5f8efd20a43f8f7922dac4f2f7ce7e361ce233","impliedFormat":99},{"version":"2673620ee9cb5e62777ceeea4e84f0c53a2bea44d74f103ece49bfb7efe95aec","impliedFormat":99},{"version":"77d542e6871aea7774c7482cdedd9ca20cb03145ab9112e6845a1cc77b7b6c00","impliedFormat":99},{"version":"ab2a3d386e021bf5619d581692f14aac01bef911457d9960ef6c21d9b97c1c06","impliedFormat":99},{"version":"0f2d99aaa9d3574828b6f8c1912208e370a041d640497679ccf4a4f5e073efb3","impliedFormat":99},{"version":"466e0183c786efd5a3e1b69d6e0e445c77d771598871c9929137184206362b80","impliedFormat":99},{"version":"49149ce82e10dfa69eb4fb250755ffe74107279286aaf8305ffeb201a0a96658","impliedFormat":99},{"version":"ad06dc58b3a23a89eecc369690d5cf5ec2d141009fff32cdd68b94ad8de375c3","impliedFormat":99},{"version":"f2b23f711dc15c9ba970626eb5e654d4e7401177b13d16085751f40dd1d77d17","impliedFormat":99},{"version":"b958c46e432e3a260af58b20ed0fdc4f3ca0c02bbdcbf12f63113c1a1932b57c","impliedFormat":99},{"version":"7e560e86bc8f0793454de297413f0ee411418d71b0f002563ddffb26b2f8a438","impliedFormat":99},{"version":"808a1b31fb436c3f1c3bc9307623234442cdb742fac3cd39bd0e8cf4797f86a4","impliedFormat":99},{"version":"ec8657eae496906e9c2bf18ddf1f276d6472cd7b42975c609fe49db7d10c4716","impliedFormat":99},{"version":"8834848635faaf4a4c1b77936a3790515df4989872d12e1f586a903ba8a96d32","impliedFormat":99},{"version":"3c9e08a6171b77f9409f6fbeee92cc7cec90295165305f4749c15b66984094b7","impliedFormat":99},{"version":"d5f52fef25eebd772b28fe3acd0ef103cb3d338c73fd23dae81235aa3d3216f3","impliedFormat":99},{"version":"3b9442cca222cb8cc615680fa4ae6e479634824b443d8ed9dfc55c9a79c4a15a","signature":"73cc5ae3d7988a184c8adcd808b83f66c1d53fbabb555e00f81a610607fbc767"},"32b16736c7e29c3dfc6f3af5621bdd031e6ded4333b8b3f0a85025aca3200327",{"version":"c3ac4df9384ae781ff97cf83d6acef837decc9505b4b08b86df78d7dea2d70ee","signature":"a29e04cba58c684bebd17bd32f46a53acb5f8b1292a42d53b1a18374b80c0fe4"},"c4abd04d8fc208a65d437b2996d88353e2cd1725531b0d68653089a009ce43ba",{"version":"93c4d54867458b35730b28b4a14cc06d27e1f5afa0fdfae1dbe2b865200cda03","signature":"34aafa201e480563bf9f474edcd99b6c10c798eb18891de1f65e60f032fdb482"},"c10e65b552bd036aac8337a913d3cb1612c61142c43d9aabec88906443b3b8d4","ed7742c5c26392a7806c75a094d28cb0901815a1ae6fa2838451e8a04fdc242c",{"version":"641447db29bb1eb3a9adafb6a63da7ba11845a0931de5d938804f38dd442d0b7","signature":"729a8e79214634324fe502fe0d85c64ee79bc11cdff7422acd64e22b4ec8bfbc"},"35d2091cafbe10f5796ea9c9bd08920e6a0b79a3877af0b2294d7bb46e35e87b","fe77be3a417a1dce39f72239224f645468d2ddc28c2c0bbfa59e99153b45d5c2","c035ef058f2451c04bd992c6281f8c435170298f50fa4712912053145e37a0dc","7bc503f605613278cfded74b9afdf98c3d708b835ef8856d44f0dfa2597306f4","46488fed628b968b68977175df4d41ff7c305d305728a8556b0de611a79013dc","ec3bb34b23743c95ff292c3ddcf5ddfb4441630f3c71848fc5bbd18f3b5b3ed4","bc7a97dcc780525d6e142bbd90014eca288f77900360a5a2adb97c8fb16c4d06",{"version":"b57861e1b6a158a3e81044be6b1d5c9e94d968ba63c3e3f3de0b9e37356ced56","signature":"a458882652ffcd89d8e16df42a8723b41ff0875fd6dd931d012fd5fc8972cfcb"},{"version":"b5dd7ca3d7fc3468d822dd471aeef7f87ca35d1581866cf41ad9496eb6eb07c3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"e930d0e5f7fe3aa18efe59bcc0d93deeb3b992cda037075f4b733b16bbdcb648","4c5aaf60156e5ce2f38171f24e1ff9079c66d3471e3c2a8e4cfd4e8ba04940ae","b3162954559ebcae366f6a6a8a3d8e1daa86b03253a9f8b4667856d576632a8d","a17dcf41702d269c5391a41f7c599e958cc9378a5bde8db3f6210f15c8590516","7f5a301a7f2a1e24bfa948d720ad4a3e443966e1bca19c1ef21e870218ff00f1","a560680227e92043871bec12eb705924803cb7f51d3bd7a249746a5c66a777e3","c8bcd71a9e5ee38b7cf9b998afadf4e23479faee3b5ed929c75c3627d34b9c88","ddc87e2c562d7e59cd2968bdc2df427250b676ce50388f8226a09d41e74fdeb5","31b086a519fa167a66b33d27b79e21fec0626e4949d2afbd0fff5100547bc1e9","ed13aadb3d63285336e110cd673b5a5af851bf9d5e4e748cffe27941b8fdddca","9add9c771bc92c7e00c8bf360b43481847fccbd41a44825d5593dc9545f39661","55c34260d30a12d3fdfd50e37180fae1425617b0d324d04d40247f376023b935","8766930e75da3bc13a4560eef5b81acfb70d370616f77793b98a83f2e92aa2c2","67a4656148e1c74d57a43bb300ba8eeaf7435d364a0cb97abf326900d2bfce62","dce76fe76a728c1828c2ce972e52324f81b4e17cdf80a5c8c10083365d64e0c2","aa8a81b075a4641ed6545c89e2faec209cd0cfe8c226ba06140897f751d59c02","d0c1c9480123e66088b92c5350a9e725344a0ab381c55fccdfd16a073825848c","bb72eee654836edd2cdd7cfea23be9215922a20541b0830bdad6db53276935ec","32b3f4dba54cb4d12f9d742cc1b73c0f398438323928ec29d3581403ca62efef","9cd9eab693864566ac38836fdee14a3710fff747fd7f1a480caf810c1a8e0483","451305998accece385013ff11837798fde76a871cea8e3795a366d8fe04e5a13",{"version":"9d28b54569f4cd1c0c21d95d0e70f6fdbfd792121604b95d7c2d067ee0f0fd11","impliedFormat":99},{"version":"b92dbe495c1dee9f3cd7c1466fdf02476f19ae18a7ecc829e3ed8a380b2d597f","impliedFormat":99},{"version":"bd3e3a447a34cf3dd875ed550ea349589b2dfcd6b3a14abebdc946366bd812a4","impliedFormat":99},{"version":"6b100282ebfd5bfa4d8c72ad5dd3e9d325aa32d0a53623d6171fc2cc2899fbc4","impliedFormat":99},{"version":"29297b3a1e4b3503eef0ec9f601f2a8da149c8074a0813624be8ad4889038ba3","impliedFormat":99},{"version":"5cf87865e3a8b12bb8ddfb311846ff2eae24983faa365f53d9224fb182cd0269","impliedFormat":99},{"version":"98ef9c3f5f15c18abcd6fa9f12e93e1bbd608225501151603cce97642dbc961d","impliedFormat":99},{"version":"c80a56a10f1a8e01c4b7f08df6e9260ae076c910402dae8173fa6c7dcacc51fe","impliedFormat":99},{"version":"becca0fa1bbcc55ad69918f65f771b76904ac98b2563cb34f26fbe240c3d4db3","impliedFormat":99},{"version":"32b344c3765dc7c383516f3326c108ca84c33df44ece8ac789fce47d47ba8810","impliedFormat":99},{"version":"89b3f0c92217d4b692fa67b9278bee76bd4fc63e422c596237f932ff329b152f","signature":"f774a7e8875649db68f5952801f001f3c316560ede472e5663af7a8c9c18f938"},{"version":"58b58d84fc54ba5f4ca46937870c619349fd9eccc4d494250ac7bc73a94e05e9","signature":"aa333ffa319c18796c9104d75082dfd218334109f702eb6e9ad369beac518833"},{"version":"2b47304c73b058c2404db37f16ff77e410f62135f72e4c64f8ff8cfe5e44107d","signature":"43958dbc81fcbf127e4104af0acde2116a5b0c0309ff3c811ecda47d849b324f"},{"version":"2a2e1959450f6a6aad98838457eeb9e5f1ecabacb315c0224f087b4124d2aa71","signature":"ea7717cc4a65e1030dbead855313a4928f5b4804bad8165ef65ed75aca4a9de1"},"c0facee0934c3c35c24074d238318c624368a5f0650f7c5d7c1748ef906d7b7b","fc88b086529a46b3367bcfe3b0e6ed59421ea8eb5543921f185fd635243d0576","3f567dcb87f20c3667daa8cd5e5e8f7f4062666562e3109af5cc2b0ff2c09378",{"version":"6f620a5da77a995a0557604c177f3126db4e04ced4b1ee133d1150c7e9af6687","signature":"65c0f4461b3b871b9fb8f09dfb6c6995231ce5c81756f7e2ad1443a8bb811853"},{"version":"9851df53571e11efea88950ff7cbc8f1c5d7dd14dcc3bf980b1f0829ea47bf05","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c145a1b94e8f126435db2db121bfda1831340de88737157b679a5e0a048b936a","signature":"9d3470ece4f34e063923ce5e95c6a2857dbe862ac4160986f6ca2ae7492a6584"},{"version":"83d57a594c11bb32c425b6a6d174703fc55681163bd57b494ebb03ef2f21c046","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"936a2ca9806a50b4e9be526c26e35798afa2a54e33e7ac66e63729f507f780e1","signature":"26f1753414b839143161e2cd5dc04694563b6060def71c7c557d41ad5ed670f5"},"1e03245b651415f34a985bc3c115b55d64d9ec8a0ab29dee01e773bc20f44093","c571fa08b870c75fb0ed39fe4d996c63059ed5651e492c54467c76c0f120a800","7c1987c47838faa093a66206652e0ddffe4028169ad0e03c9ac69de085b8dbfa","2d2386f74f4545d93e1db516ca847bfae07afca2ac0f514f08437c02fe43d1eb","6fca88529e83659b476f8a28d360d4caaa26933181a096a06b1880792f53103e","46425d0197dbe578eed0a9ee0881282ec533bd687a9c2aee9c1d8b1b1203334d","f3b79149a1e0f40f7a1b0cf5639c9bc8face06ac35e45a3a8fc9ac1c8649643c","594fbfb2b900134500e75b54d71facf66760bc4642a17066223a0399d0d13096","f0fdc6461bff42d5541014d1c542a00cfe65384a57804db91b9b29e696671988","c728712d0c33f525cda352b5aa9e8ffa7b240b041b984d75c8cc3ccce815e07a","131befe057a5c020d346de1e9b9f75dabf9c8cf59f2266a9f0e27176c9c541a3","b16dd1286b3e030ede9d816904b15f4407a0fd925790379dbf0ba70a5887b182","c8ec3533391e2237d80c27000c8d59105a2bbc6d8a59a36d9e18a7a2202b7399","ad271ac6bc967dc528ef6db3c501bfda6fd8dbc2405af3e8ca062bd5f1f565b3","dfb25f546004d9c1ca3b760e255947b7f6f57a3eaff9334eee480f7ee0aae6de","d79a3190f95a398caf8e779dd199bc8ac0245648fd3c401601df5501952d2f9b","5c74d4bbce7632f9c9bc9f2bc69e13ff5b6777ab64ab451a5bb37d82256906e4","4cb890ebe99942ea91de161ba57cced6f5d131daafc0125aea86f4aefd7fd6e0","a09c62dab83937f41b59f55f977cd324d8552d52ab718e8ccacb73b9ffcfe2f8","35770351ece186d9fc59757488bc1ba7d2db9726ac0bdde185dcaec30558ce15","e3ddf1c4dd38cc2753022d4c792779e6679ba914eb80f1311d0096acef093084","0cb08e9076d30f62b1515233328b841e7dcdbcf038e1f9b42a4248d7492015e3","3e2a55dd3e9fd11aa6bc0efdeab42d2a2a4bebe0c9b0827e64700eb867e0e512","610be97d1c2d516a9dc114dca6efa3c4fa2937ba7442cd75b4360ab4f0618d5b","12b334e3dd35baae3b373d3c87545c5b841b8551cf479d926109c8dee6d13c6b","02c93ef6c6e86e61d79c7cd138a91690b32021d5eee7c1261bf619edd67e7446",{"version":"a8ae3a72561c05a817fb2eb7ee80010cfd26c1d7e088a0a3c048947692735b8a","signature":"3523fc8a3c6937588fa23496d6b09929b2379370370fb97a64a3414699aba4a4"},"a0e199f4a54bb291ff5decd2f1b070b158c3ecc18a5fdba303199e0daa9a236d","7ebc7128793094cd8677f7a7d21ee4d271a1e50dcca01c7ebec258618e7b254b","3b1ff19587d5fcacf45a3ceb96684cadab07bf4ec6921b300bbf842436fccdf8","52ca1a0853485f331ca3dc0975393934a71ea693ebdf74e7c87f3014947883a5","94fb8a030406ba7906137898da2fc211b7054b46be1b809b4965635749556d1f",{"version":"60ed3f1d404327497db2bf58289a33456639ba129549052ebe671bb859221c20","signature":"32b449f30d9776d304580e6f60603441d0b83760886003d66fee8f76740dfd34"},"1abc962183296f65873ad8ba2b9ed7b22081365ef448179054558728552e0d04","8366f5bd80531f5ed85fc08c170b1b2cb0d7a897d914705e5e2305ebaef8e7c4","ed06059c24b747386db3793f648b5d406bce77dbb87035858749588b3dec30b8","b65dd9a55b58b3d2a6896c8f774a211d9517c230289371bdc80eddca9f303594","969a1c858486ed669e7247f5d8a95fac07e4a0b9271833a9aa225230831bbe5c","1ac3e56e87a485272c20b38c8125c79e42a1e16ed05373784d6ec84302d8148d","764477ddc5f1dcb0b5b5de50649f16dcf4d36842e02e8ade2ad9b25340b8450e","e5b880f9828fd72d54668e7b48cdf3c386dcec8f5f42f303a4520d425f715096","3f7802b51aba52d5c4e91d59c4892e44c338dc10cab2560b8143979d990d75d3","738e8b1de143e25f4958482f0b3df6d5f67a094d15c1b6c73b397b37f388e7d0",{"version":"e0cbde227bad31a3979ce1452ddbaaabd18727c91ab6146918c79b003c30b831","signature":"ecb61779944dd6d04f594dd817e2f127ca0c200ec71ae38a0a1f5fdc178f6f14"},{"version":"573abd03ce0bc9cc3a30747081bb6b5ecaa16ba1b59a29aa922fc1d485ce3b6f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"74a2404e9e409051b600c8abd0d876686ad1731e392393503dab8ad59d050038","b2255323e74353642b3498aa47b45eb96478119cc12d84931efb88ca2f6c047f","13471ae3aedc24284930a5bf581a0e615865098436be58eea44fe0329855abc2","d11d280459228a5d486eaec8154ba16b0906968bb36ef9be5163f149e28df414",{"version":"04e75818d473e1616641bd374d057a812dd180459efe7d883ae185204d0f1a49","signature":"3c9c67a52e0704dd321352b7e2fd8918795b4fc4e44b7df370eec0f7ab16129a"},{"version":"2ae79a27ce4b25d6fdadb97bec297bef61f1c322403beb4804937bc554ed5a12","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5eeef3becfe4030c64e076199e2ea57fc27dbdd52276d594b5affe3dea7bfe04","signature":"019b7556950576fd84dd8ddaab37fabf540fdcb8eda3b7996480ddbb0b176a57"},{"version":"49984027e9b16a660d2e13032f44aa2a6cb1348753ad6b53aa84068f18526eaa","signature":"c33f8676872363b71b9aa3e66904c567efc1e6b405727401fc79e64c7eda06d6"},"633636310628a58fd1d0c53af444eb8f23882fef82a5bb4a0681a542bd7ce9e9","74313621c9fab8c46df00e8646a581afacd28324f2ce0ce7b88bc1af21d7d03c","6465900e8e704453e7b502485b3b03c23c8cbab60f7d4b44445f6450d5c34f45","a0099846790996a5432d7cc8225e35606d5ec55531a0333eeed9b2ccae8b872a","0f9812eea42a55a036d750f92754db2c7c51fde465db5bc707e4c2edf4f338ab","9ad0e57a7360d2dd31026a63f29bca0b5fcf3f268458e6880d40511573bcf0cd",{"version":"f911612fe6fbb59498bd042d845e42091b622ff60d62f62899ae9c9061da04db","impliedFormat":99},{"version":"df8d828dcc7036d38beba1b517c8bb7cbe632e23cd13819aac0b7454714d7ea5","impliedFormat":99},{"version":"6b97572b898559bde5ead60c3df72bea74dee67a9497f40ca2063af7cdf84bcf","impliedFormat":99},{"version":"d4c1d20b42f4c4b6710aae2ea61f16b05688871fc88c50164be241001c2ed2fb","impliedFormat":99},{"version":"4e93f1e1aed54628991b8092a5eff614ebd874ab3ff1f18903fb1ddd7543a45b","impliedFormat":99},{"version":"3758c87b27039448554b38154244bcc524735bee89342626ff9eb05b8834d05d","impliedFormat":99},{"version":"17e94aa1431a293fbb231edc284dc251555908f46e40b7648574725bd7acfbc6","impliedFormat":99},{"version":"0e1cab758e8f8c92c6d1b8b2a51fe46c31db41c462aaa21bd05929e3facd8b1e","impliedFormat":99},{"version":"6d37cb963c5288b5225af7fa9d072c429920718fa87d8352f72b5b80978aaf0b","impliedFormat":99},{"version":"e429692aefa26a42888b1e63959688bc0c75ef34fd3eb7c246f32b8872aeeb31","impliedFormat":99},{"version":"d5f419f7f96a6aaf8c28251ceb58b48518379d8b61a9d7cb3f2dc9e254569290","signature":"498e25119d58bd28ece6da55dc0c395a6f7cc59897155f4da92bd6eab82f6b46"},"32ef9dc49e9270fbc12e5e84718e1d5f43c4acaf8fedf92bc7b1c014841e399a","90e454505955c346a0098c31816f76d84c35b907bc9364d57b374a1e71219bb6","6ddcfaf061388b23ff171cc4a6e03b97908fb114b634a6fde8850398a65aa560","badb2040f07ab6073c28081bd702beceef77e7ad836ee16455ec341b18723f5f","c41c0a966a14ffe08f19f29374e0a468ade0c5f3b361e72f339e9576e7620b33","b56b89e5cf8bce9ece09da099e16b06cf2507d6e27465997f12c6c313b908657","a538311c345949cc9c25d9fa687e6ded7d306ff4ef3bbb47ec1dfe850a309581","6ac25c1ec65f5f104b9f923772d6a09f6f4c358bf3797d6502f131288e61f62e","48e589080f69a8cd40fa2a08937dfd5003a4b8074620623b29906a74dc439ea6","4aafa314a294c32ff59181887260bd166656c18562f1609d9cacfe2106e9d5d7","c82aa540e266447aa1cddc9419e8763ab8143e49f720043ff93816b6b02f98ce","ff8a3540a563165756b576980733f694086d2194be10c5c7e9b51ffbbd4c0fd1","e16dcaaaaf9b6575168b27d0a18175d21a430371f30f625dced8df4d1e228cb0","ab4f6860892a6d59e3d8c04a9f195cc27c9dfd7d8bdc9005618db993a393c1c2","1eb99355d91f03273d1068f8bfe1f99f83ef677328ea3eeb3fe0ef47245e0ea2","2cce92d0772d5f730ad490c5cae3b01ed97c8acb5ac2a95f8a23365472506926","e04960cabaac62010909964ae19863386b41d43d39ab9fa1675a2d042900c910","4e86001858828475f9b056e603babb5cba48b139d5eaa41a3e4129b345ee0420","4aeecef6615b62f1c87505550a7293ed79d384e547638ef3368f1e1139a676c8","b28890cafea8971468be201da9a41f14e03f9df086ab516cb833e1b60b26d64b",{"version":"ca3cf79417333e61e5ac11b3ef5196fe1aaeff717131e3359158328b97e8522f","signature":"173cc8c851f783e54b101f62d9dda7563df9d7bfaad2b647aebe40c4f5a60953"},{"version":"9d9681c05ec3d7727ae1468afe5f2d2e10634be8ed29c5c2a9ef1acfccdf7c64","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"0d968953ea99e3c652c4f27655bc3d19f8bb456866c9a434ccf6e83a7f249ffa","89b02824819d6efa8dab377a621cb6c2d09c5a51607c55eb276c8933f8e42fb5","f625a0233d2f8223df3410225b72c21b65090c29724e87196113e447a9ea4560","b114175f37c9c8d6d6e61c219110ca5f09e77a50a983950bae6c9830e5e672b5","741a3d45b5ef82e29381353d96494eee81a2d9dc6c0b7237ff9e915fe4fcfc69","79f29ced2aedd2e4ea52ae25882ad998c69c6a7f9c83650bd2e28432c668cae8",{"version":"41001de228c48ba516cdce6ebe19905d67976ee1e4b6411b9a8b56625c443303","signature":"33f04edbfd8687165c0b924c9c7dcd233048792911cb852ede409b2ed9982c2d"},"c07774ef413f659c28c90dc2337811acfe98b9d53c3ac8e6f00f7bf791abc3c0","457d0340706bf6da8a621ce43ab3aad2f3f2ee550eba59d90a3a733d72b8df21","60ab55f8843348069fa25332bddc5e55336b6312fa095e4518ca22777a1d7eb1","f84b2ea1fc32d5ea31f132f328c78d188d00476298bdec3b86bb3e338b616837","bfa544d9b15f168f41ed03430d49820b26ffcd012207c46a1625c2ef403a4f2e","5641e8f1469ec49f4f2b5f27e4865cf240ee77fd012a94d23634d384b18a3e2f",{"version":"2e2b1d8190d03c28abed18f5c4f7768339162d0da92b5619376bd0b9eea74831","signature":"40d2d310f365b4fb5f2796ae880901fa7c87f904976afc3525417e6b651442b6"},{"version":"25230ddd8c1fe680979c15aaa771e4ac15e6521a729c2d59d8f244f4c595a15d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"23c1fdacc80645510e9484fa710a3140dd6d9dbcf7e71e50be44d57c2f78e335","fb5331997a8d72382f904a5af7222a2a8fa8158ce59af07b8fc102264cb6fe62",{"version":"094b9caef1590ff8eaf084dd5d2441ac74a13c82e996e0aa266ed24e2998b783","signature":"4632114f72f93bcce0d7fd6f0e7cc0caa5d1ee5d385e2679f5caf11c0ff8a38f"},{"version":"a6d4a0d12d4fa09d16498d396b78cc7c3d1458f19eb4edee3bc8b73c04222f42","signature":"bb1c48e634d76de23d15ccf97bac8bda66c8fd514959dae65494c9cde2808609"},"20e8a8947f10e0e64476423f7d598c11f833b930641dfad9d42a27a784b25eec","ca5fc4849f9aa4ea23b7a6b916e95e72b443b81ba10c9db7c0d67bd7e634b84b","a0a9cd98f694dbe9c3e25eb02dce3e77eb589fa79fe1f4e2300988471fcd7558","179ec2be3ba2bd6cef09e1943bdefce84888c53cbf75dd0cc66e25fe73066cf3",{"version":"2ca412b5767dd81af30a59e60e3174c04cf59e49c89d675404abf5f3c5fba8eb","signature":"0b91a9b21cd5ad0cd265376cbaa5ad1cd6202825416c4bcf1609c6673d78a0be"},{"version":"d48da27c508d6bffaf72588e0d9fc749adff03b575cc20d9027c063c6c7c5a98","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"412859bcb9fca9198bc3ccf1c96237fff62f03345ea3c5f96f18c49462b2259f","signature":"920e406c286c1b48a00a712bd6869df6197866c11966095b4fced2a4d6942401"},{"version":"f1722a5276aee04daa7145c8e2bd29a24820e9657f251528eda17a30d7de94f6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"8bc45826c7d7e7f553304d8a4b37b072b5663a51f2d33a389dad7cf75ce03423","2852eb58a38ff80d9c5558032da6103cbbdaecb0569f9317cf7a7e424c4cd5df","1d22765bf3d067d73e6ad5befca29e031fd67b49f74d8cee0e678b6688324c7e","32649a89738461b33c34293a0a14922e3566b4e23d06b9d21eb2c4c8a58b4ac8","1941e12ac7464555d86b70e0a6302b91b1a1407ba037fa16c60790e15f3e2e93","706976704dfaddf508c933961bcae27e0053d8c772238b757605ad22c7e2f1d0","8139d708b00ccd6b7db5f14a87c7554acccfa089999f5e6727e681fb4c999cb2","78d99658239c9fdd6d38802abb0e872202991c0a074c96e7c4056b9d422bceba","cea7c4314d9f8462751a38f2fbd7b1aea8c1312f1d0e90df77b36e8302afad2e","23fb0c2cf17a963141a6077b1f5cfead30943c4eb120bf81bb75ab5b3e80eec4","6911e9471f25ba8fae13de0c072b72c66dad502e40f8b6c8740d5cf9ba0f2b3a",{"version":"b9039512a27d6a5a687011f0af8ccb0adcc07218a8ddbb4b5ae02d62fece2742","impliedFormat":99},{"version":"d11ebedbe79c2e165456a142132ab453b2572938ed76a6fe9324914363b7d6ac","impliedFormat":99},{"version":"f6ba66f3f6c4409e878f48161529c585b3c0e687c8917dd8f6c6464fc5cd4f8e","impliedFormat":99},{"version":"0366e97d9c966d748ad91b782e8ce843ebb692d93a1d211ef5b84cccbe8f53a8","impliedFormat":99},{"version":"91029799e2320b00f91b8495c5d657418ea6c29d47e2130963ef9ad2c4d77956","signature":"308695a8fda6f510e51efb0430009a61897fb5067344c8d84a84496de1274a3a"},{"version":"caba3d5872b3ab3cdc4fdcb6a70e2c4d6437f66b97c324e4c2284522043349b1","signature":"76fc5947686d1f4f95854ebdd328b964d50dc1067e43149867290203d03238b1"},{"version":"34b18d8a4e953cf2a9c1c1093db451bfb9edf7991fa2334db8e75f851dcd15b7","signature":"776f4607976ab87e84944a655484a4183fca74b8cbd17cb07d9a11a6ad28c12d"},{"version":"a91370f800c99b9215c379f8c07ced5a312acac85ba29ee11daf9c4988093e90","signature":"7017943360e6ac93765cab271d3b04f1b54ca26211e099453e4c9051b4d25df8"},{"version":"f736e672c15e293f44efda0d8f530cdac558d5396f0e7b2d666875a8b16e7943","signature":"178e81c7913720c7c7c48b66c4abac8bc4643bcfcd0633e0055079f724f4b73c"},{"version":"e551a312691df9bb4cb420112f040e571203a8dfc74f0989edc2ef475c5ecaa9","signature":"3f89da23f0c251a47f8534a0b51510d1d782de69990984e592c2cc629746140b"},{"version":"de0fc40bebc22ae7b3014a2ce51f29e5623be0436ff6a3cc858fa6417d8822ad","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6dbed82deb6e075663ddd982c37d544858cf5ca1a172298db093e8a49ee35cc8","signature":"80a5ca154cbf85949324181c775bd2ec7ec77dbbca27a29bbacc8aec4613d811"},{"version":"f16b100f317a322f5529e296714dcc99c19e9e5fb5916045624f8de197c02772","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"77277a37f6635718d6bb01c118b46c0f39c00417713978b61bc6ce5daca56939","signature":"26968396ba8985bd4a1c3e6fdeb001801e0c9e1f159f1cd4d6863bdb2276b9e7"},{"version":"11def131cca6459b60cd78c3ab7a2d0ccc4dc4414d765db411fda139dd7d2b10","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6684293008b434c53e960a1c87f9aa2279730b46aedc963206e05351a21aa911","signature":"67fdc67fa1fd9a9022c6fce8bcd6f18b41747340fa20ec6a9a9f2e6bb274439d"},{"version":"97faeac00a2758e5c4b496f6b47d4a1294226a42b7956bfb0062600b548e52a5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b933dfd3e1e6f7be906574bb4e911fdfff0248bf0077567c0cc5af30e4d42873","signature":"eabb04fad55013cf12ee2e212586c4bdc9b245a0a6d4fadf3bcea95bf6bcf7c4"},"fef9df1b5ad8b3f12c50413a801d2e5bc9316b2786e4246426a698f94a7ab43a","1c0f5b63fa2d4234c45bb4b79d022a01635aae6467d4a1dd7129007b7e7af414","f564769f8f2bf0dd7204fedc5e5d36772cb3bf8f2e92aa7ee4f861f00e5d9e3e",{"version":"da0f84fcd93700b4a5fbf9c6f166a6cc19fc798231bff56dd1e3875bfc6966eb","impliedFormat":1},{"version":"634ff08e0143bec98401c737de7bfc6883bfec09200bd3806d2a4cfc79c62aaa","impliedFormat":1},{"version":"90a86863e3a57143c50fec5129d844ec12cef8fe44d120e56650ed51a6ce9867","impliedFormat":1},{"version":"472c0a98c5de98b8f5206132c941b052f5cc1ae78860cb8712ac4f1ebf4550ca","impliedFormat":1},{"version":"538c4903ef9f8df7d84c6cf2e065d589a2532d152fa44105c7093a606393b814","impliedFormat":1},{"version":"cfcb6acbb793a78b20899e6537c010bfbbf939c77471abcdc2a41faf9682ca1a","impliedFormat":1},{"version":"a7798e86de8e76844f774f8e0e338149893789cdc08970381f0ae78c86e8667f","impliedFormat":1},{"version":"eebc21bb922816f92302a1f9dcefc938e74d4af8c0a111b2a52519d7e25d4868","impliedFormat":1},{"version":"6b359d3c3138a9f4d3a9c9a8fda24be6fd15bd789e692252b53e68ce99db8edc","impliedFormat":1},{"version":"9488b648a6a4146b26c0fd4e85984f617056293092a89861f5259a69be16ca5c","impliedFormat":1},{"version":"e156513655462b5811a8f980e32ccd204c19042f8c9756430fe4e8d6f7c1326e","impliedFormat":1},{"version":"5679b694d138b8c4b3d56c9b1210f903c6b0ca2b5e7f1682a2dd41a6c955f094","impliedFormat":1},{"version":"ca8da035b76fb0136d2c1390dda650b7979202dbe0f5dc7eaefcde1c76dee4f4","impliedFormat":1},{"version":"4b1022a607444684abeee6537e4cace97263d1ef047c31b012c41fdc15838a79","impliedFormat":1},{"version":"dd0271250f1e4314e52d7e0da9f3b25a708827f8a43ceff847a2a5e3fd3283e8","affectsGlobalScope":true,"impliedFormat":1},{"version":"47971d8a8639a2a2dd684091c6e7660ec5909fed540c4479ca24e22ac237194e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e1075312b07671ef1cbf46409a0fa2eb2b90bb59c6215c94f0e530113013eeda","impliedFormat":1},{"version":"1bfd63c3f3749c5dc925bb0c05f229f9a376b8d3f8173d0e01901c08202caf6f","impliedFormat":1},{"version":"da850b4fdbabdd528f8b9c2784c5ba3b3bedc4e2e1e34dcd08b6407f9ec61a25","impliedFormat":1},{"version":"e61c918bb5f4a39b795a06e22bc4d44befcefd22f6a5c8a732c9ed0b565a6128","impliedFormat":1},{"version":"ee56351989b0e6f31fd35c9048e222146ced0aac68c64ce2e034f7c881327d6d","impliedFormat":1},{"version":"f58b2f1c8f4bcf519377d39f9555631b6507977ad2f4d8b73ac04622716dc925","impliedFormat":1},{"version":"4c805d3d1228c73877e7550afd8b881d89d9bc0c6b73c88940cffcdd2931b1f6","impliedFormat":1},{"version":"4aa74b4bc57c535815ae004550c59a953c8f8c3c61418ac47a7dcfefba76d1ba","impliedFormat":1},{"version":"78b17ceb133d95df989a1e073891259b54c968f71f416cd76185308af4f9a185","impliedFormat":1},{"version":"d76e5d04d111581b97e0aa35de3063022d20d572f22f388d3846a73f6ce0b788","impliedFormat":1},{"version":"0a53bb48eba6e9f5a56e3b85529fbbe786d96e84871579d10593d4f3ae0f9dba","impliedFormat":1},{"version":"d34fb8b0a66f0a406c7ce63a36f16dda7ff4500b11b0bd30a491aa0d59336d1f","impliedFormat":1},{"version":"282b31893b18a06114e5173f775dd085597ca220d183b8bd474d21846c048334","impliedFormat":1},{"version":"ed27d5ce258f069acf0036471d1fbb56b4cb3c16d7401b52a51297eca651db62","impliedFormat":1},{"version":"ec203a515afd88589bf1d384535024f5b90ebe6b5c416fb3dcca0abd428a8ba4","impliedFormat":1},{"version":"32a2a1374b57f0744d284ca93b477bd97825922513a24dfe262cbf3497377d96","impliedFormat":1},{"version":"a8b60d24dc1eb26c0e987f9461c893744339a7f48e4496f8077f258a644cffab","impliedFormat":1},{"version":"3f9df27a77a23d69088e369b42af5f95bcb3e605e6b5c2395f0bfcd82045e051","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fd080a9458c6d6f3eb6d4e2b12a3ec498d7d219863e9dca0646bdee9acce875","impliedFormat":1},{"version":"e5d31928bee2ba0e72aeb858881891f8948326e4f91823028d0aea5c6f9e7564","affectsGlobalScope":true,"impliedFormat":1},{"version":"9a9ba9f6fd097bb2f57d68da8a39403bbe4dc818b8ccd155a780e4e23fa556f2","impliedFormat":1},{"version":"e50c4cd1f5cbce3e74c19a5bbf503c460e6ae86597e6d648a98c7f6c90b596dd","impliedFormat":1},{"version":"fa140f881e20591ce163039a7968b54c5e51c11228708b4f9147473d06471cf5","affectsGlobalScope":true,"impliedFormat":1},{"version":"295eca0c47be1191690fd2fe588195fff9d4dc43852aceb8b4cab2aa634579f0","impliedFormat":1},{"version":"59ee7346e19b0050508a592702871dc943083c6dcb69a47d52e888115d840781","impliedFormat":1},{"version":"067712491fb2094c212c733dd8e2d56e74c309a9ce9dac9e919286b7245a1eb4","impliedFormat":1},{"version":"a5eae58ac55bd30c42359e4b01fb2be5eddac336869d3f04ffb4daa54b58f009","impliedFormat":1},{"version":"d12d691ef8933e8db39f2ca81d6973940ff5e37bb421752f5b6e7bc15dea3abf","impliedFormat":1},{"version":"4c5f8bd9b3a1aae4e4fddfee41667e495a045f73ed603993038fa6a8ba92fa14","impliedFormat":1},{"version":"dfb274ab0f319cf18ce7152067c25f984c7fd1924fc72b3f66734588444c934a","impliedFormat":1},{"version":"108c8c05cbc3fbbbd4ff4fc0779c9bef55655c28528eb0f77829795dc9f0b484","impliedFormat":1},{"version":"a7e5444d24cdec45f113f4fb8a687e1c83a5d30c55d2da19a04be71108ad77bd","impliedFormat":1},{"version":"41ec17e218b7358fcff25c719bc419fec8ec98f13e561b9a33b07392d4fec24c","impliedFormat":1},{"version":"23c204326746e981e02d7f0a15ab6f8015f9035998cb3766c9ddbf8ea247aea2","impliedFormat":1},{"version":"25f994b5d76ce6a3186a3319555bbba79706dac2174019915c39ac6080e98c7e","impliedFormat":1},{"version":"dfa4e2c6a612d43851ccbc499598cb006a3a78bc8c7f972c52078f862fa84e47","impliedFormat":1},{"version":"02c1705fa902f172be6e9020d74bcd92ce5db8d2ef3e1b03aabc2ac8eb46c3db","impliedFormat":1},{"version":"99d2d8a0c7bb3dd77459552269a7b5865fa912cedab69db686d40d2586b551f7","impliedFormat":1},{"version":"b47abe58626d76d258472b1d5f76752dd29efe681545f32698db84e7f83517df","impliedFormat":1},{"version":"3a99bbbbbf42e45c3d203e7c74f1319b79f9821c5e5f3cdd03249184d3e003ce","impliedFormat":1},{"version":"aaacc0e12ab4de27bdf131f666e315d8e60abec26c7f87501e0a7806fc824ae6","impliedFormat":1},{"version":"3b4195afd41a9215afc7be0820f8083f6bd2e85e5e0b45bb0061fb041944711e","impliedFormat":1},{"version":"108df8095f5e25d7189dd0d1433ac2df75ec40c779d8faf7d2670f1485beb643","impliedFormat":1},{"version":"ddd3c1d3c9ff67140191a3cf49b09875e20f28f2fc5535ae5ea16e14293a989b","impliedFormat":1},{"version":"7b496e53d5f7e1737adcb5610516476ee055bf547918797348f245c68e7418fe","impliedFormat":1},{"version":"577f44389d7faedd7fc9c0330caf73140e5d0d5f6c968210bff78be569f398a7","impliedFormat":1},{"version":"3046c57724587a59bceefadd30040d418e9df81b9f3cfd680618a3511302ed7a","impliedFormat":1},{"version":"15ccc911ed15397e838471bfe6d476c28deffe976c05cb057e6b1ea7491242c2","impliedFormat":1},{"version":"64b5a5ebdaead77a9a564aa938f4fb7a45e27cda7441d3bee8c9de8a4df5a04f","impliedFormat":1},{"version":"a48037f7af5f80df8973db5e562e17566407541de284b8dadf1879ea3aed8a2f","impliedFormat":1},{"version":"dab97d96ce986857150db03f0d435b44c060d126b4a387c7807f4e9f6c92e531","impliedFormat":1},{"version":"85f39366ea7bc5e34b596fc97de18a7e377856755e789d8e931054f2191d9b8b","impliedFormat":1},{"version":"daf3ea3d49f6e8a2fa70b7ca1f21bd97f1b65021b31fbfccb73dd55f86abb792","impliedFormat":1},{"version":"b15bd260805f9dd06cd4b2b741057209994823942c5696fd835e8a04fb4aab6b","impliedFormat":1},{"version":"6635a824edf99ed52dbd3502d5bce35990c3ed5e2ec5cef88229df8ac0c52b06","impliedFormat":1},{"version":"d6577effa37aae713c34363b7cc4c84851cbabe399882c60e2b70bcbb02bfa01","impliedFormat":1},{"version":"8eaf80ad438890fe5880c39a7bbf2c998ce7d29d4c14dd56d82db63bd871eefb","impliedFormat":1},{"version":"9b3e7f776f312c76ac67e1060e5398d7ac2c69d6a3a928a9daaae2eb05b15f56","impliedFormat":1},{"version":"202042eccb4789b7dee51ba9ecab0b854834ea5c1d6a3946504bfc733d4468c3","impliedFormat":1},{"version":"2b2ef76a9f36094b07ee6f76a5ac6903f2f65c0a20283201814a8d1e752cb592","impliedFormat":1},{"version":"8882e4e087d0bc8cc713cb3d8090c45d33e373e6f5c83e0f8d00fe6a950ef875","impliedFormat":1},{"version":"fbfe7303a9ccd8e836e5beebf51b22b83cf5eab732a42b491a4789e5547ae53e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"882b28abe64dae4932c83ebb71e4155da340929fe08a2055f3e573ef17f70fc3","impliedFormat":1},{"version":"4a3e425808751200a7709671667ad3d7e7cbfd0a06d469cab42adf06c2601f4a","impliedFormat":1},{"version":"401da46338f5b4f97c2a5f8a0faaace045c51aabd751d2dc704159f64feafe89","impliedFormat":1},{"version":"c705d4594093bcde53fc292c5526aedd3145170ceba73a9476ee97de6a915fe2","impliedFormat":1},{"version":"e51d5a8251e7519d3063577c5a1b03893bac866baa0d13eb52def5dd79744436","signature":"9810c75cae8b5bb5a64856a1249d92898fe0bc08fb7edfdf26e7d1fb64674978"},"d3ad0e201d41fb431b2ca90a8d29ecd19781bb47633836c0292f41562a0db593","adff78b75e36142069a217ec3b8bfcbab5e901d8be3dbfc1f3eb7904e929222f","07c11432ea8bbeaa0905f42aecc1ce339840f9a5bbb72473d32b4c59c8909c47","4cd85a8230d17c0e948b99d06021edff6a35340e511dcd49a30b5f3a740fc5d7","a09957a6ed7fea8e147758f7111b55394592071ef907a7334cbb94a615a3c2b3","7999dc74b57cc2dfa1640ac746bb755420a4375541732f4bff420751a375d7a3","6856bfd11dbca6b6cbc812621a11ed11c4b4296d7b971c33e2ffcf1b7060a5f4",{"version":"83530f88eb02119125b1730602056e1dc2a7689fb1f4e3a8eff57602e0cf8791","signature":"e23e63f94215cf92ed44b17c81a5cc023571e6e57668d286d0f66dfb7fd29e64"},{"version":"02dd581476d418e9d891f9bc234ba68f0a22bbb92bd4fd5402e62367572cfa3c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"08eb7930ae7af32aa4070200e2209a82ca0d5191f4c6a56dcb3d7af666b61d10","d779cc3dfaea48cc4e8d9225bce2a930fe7f5c19d35f1362bdd915044261768f","dd218a0ea3d23ec928bbfa257718e39a6064f56115d0e47678a10a5f86182920","86153db5e23d65b4cbae5b7ea8e730119094faa1865aec8373cdca4849c08d7c","3f8c06236d42491454328842e4b8d96bff6ef3d6ba897677cf012eae9a8a8531","fbad2026e5d0aca8314c0e69b47a599e03a96a00bdb09bc5dbeca747aa71f1a3","d20530ea19f436fd93bdd18d96ade390f04712323e4d8811bd2f8453182129e3","8b5a10b3a8f7f6681df556bd483ebafc1f32a4a6c2e9301fe03627f2818048a5",{"version":"6a3e54c5512881e1a8a4a0199482a0e68dff96200fbcb7a08b38a969d2cd6699","signature":"cfaa98bda2da5362425dc511b0c2447d3b25087f0b74c61e1990f47a20913766"},{"version":"fd789462aaaeec9063cdbf78f4f0a29c9f3ffb77425ab932c43c2b9bdde39b33","signature":"21b4f8dcaed267776a667be6fa7f28b8fd59c1c8c0fa2cc517c0192b8f06c31d"},"d376307616d157a0435615c81fb82e89e91909620347ebd8e55511bcec08e278","2cbdee534591575c81aaf2d99884635361a510a470bb83dfd2269eb6c92b2261","720b6faf713470e67d9255bab465efdb6b15dfbc88bba116797bdbd3312fe96e","b80db1de8bbc631dd00e9002d311786ff5b071fc67380b2f067bc6f3526406a9","613bd3011a678abe67087d230ea80ffd528d4e28955502fe7f4774362e77bbcb","bc9c4225c4c1dab675f49a71a8d971eee3e2e543f1771c14276b45010f6ffaae","47684074834c5e06d27d5b3e0db002782ec0f2dea069aa2135e590118c9362f7","41a457cad7ac02cacd0c9fccdbcf80d2b44bd92bd0d4875b69c94c364a6e401e",{"version":"9f9c05a43a0a2d8e72c00f9173e85b6fad81e8499961cfa611fa905a257c638b","signature":"17604e5e845fc8ec8fb28f8fd4c99fce6f29b8f67eec439bab4fcd479ca8a50e"},{"version":"5052f6d600f9d1e9cede06feec1faf439378112b9c3c64e9311e6b495df5e393","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6a3e54c5512881e1a8a4a0199482a0e68dff96200fbcb7a08b38a969d2cd6699","signature":"cfaa98bda2da5362425dc511b0c2447d3b25087f0b74c61e1990f47a20913766"},{"version":"d36bacc735aef3948810eb9a8143d72db1883dd50ebc5a073041c0887468f7e1","signature":"315bc7c950d58772966319f8401256cbf36525ea88146a7f78073fdabb3a9388"},"4684626f5384b1bac4e5fe7899028f90b6c42f213aea762d71771d6179353ad6","1ab721520d98f380fc2eecbea24559da263bb12c054ffe407653e20a779d33b0","0d3aa0af2528b49ae80d137d7958dede4df3ef5d803e20c8f4cd843a0b8b3027","33173d2b3c235c36cc9e77882f146d21e429f0383e2db5483b14ddefe9a3b066",{"version":"6e4c5d3ba96c381b0534c4985f099a284d77b69d2d6c2da77f09bbacb0d0b183","signature":"0d9f9121e609de171240a484d3f39b5060bafb8d8534d3b6e95addc07501583c"},{"version":"ce73073c216074a4015ff67a3a4fae8cd6f2b27cfc3b61df2c82f86b8ff90b6b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"cfa4b4101c50834e5d7173fbe21ca806365ba53e8d8d11285310670f043f7a8a","31bb743670487e571f1477dc0100cea116bf9f13f235dfcf7eed78353baafe3d",{"version":"aef3dfaa8fb0b54e5ce38ee0cfe1cb5f8408020cbbfe74541c84b74cb50fd6b4","signature":"eb0881c5e929fd7fb41dbaea899cea8453ebbff25a53b40bde3e722dca90b2ad"},{"version":"ef3ec76315e895b03bfe02251bfcf21fb15431c52e5fe88f8ffade9f9528aae3","signature":"1f71876bf509d705f6dadfd7dfbbb169e6b2d024697691d6037e9ddc3c0c577b"},"70c2ae60abe14cdddb0b618038e1bca12fc0f9f6c03e547cb5ab783f6c12304a","c1292b23d2157a0a60a3277eae5c982e5155cedea156900e3677c58fcb38ea77","45a4b3a6aecea5c2a988907602b904792f62a432fbf60b3a2567f8b8f80abcc3","fcd30f1bc3ebae06221802193b89f17f0c867434fb54565341001e2fb2bd226f","aed84edf8705c35fd9505a2f4fabfee7e40fb40df3c604546c26cb6a75c82b5a","a21b16e26fefcf0fa3501377571130b6b1dfea4e4e39ae9ca49e5202d397d289","fc31db6d4050351427ca33f0cbb5f985c88b7aafc6dc9bcd277645be6ec9828a",{"version":"d4aafc88f449b3dece1139b101063857a243632c11cf46d7a237947c60aaf73d","signature":"ba2014afd9d39b84d2a3d448395b5bfefce1b7a643bb0b65a7b7bd96e871b48f"},{"version":"699b6a641c44aec0620bcac676d4ba9c952935d59ba95995ee2f95cf0df9e4b6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"5a85448d059a9707654aa9862b15002204eeba605295f72b7adfac3f06b15e5f","cb09494c8782717711e8cf5272e3487b93ba8d06b1f739e547d9685bcb23350c",{"version":"219de40f19c7d6f958c19b656a60c6111e9c0b134b3621fea6a921dab795575d","signature":"b372ed7a377647cbf7b25df64b2801a596b28a57f5ebe7ea2ebf637482503238"},{"version":"31e91d21b6bc98189bfc6bda0ef28b14c1e1bf3c4c095d9675b096c4fd06628f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"e2fc78ec8b0545d241c7baa745530653faf6c182f1aadc82e0ac2ede162f36e3","2f2646eb46d851afb294a72111cd79a7a14274c2ca38ad2da1708458bb004e24","9a0b8f7b34ed15e2a381a439ce6eda597686b3b69054edd5234a2be0a6ebea57","a124c9959b398e8d3a05f94b006b2265413b5d45e826f9198aa47aa1627ac10c","565004fd7cb518293085dd5f621deede34e51be74323c1ff4f08afcac72818d7","48a2da34607388aaa01eed1bd40fbdc9ab1b9de9a82a882e8f2b9099e7dd61e0","17c56128d94a244896fdccb6f11672f66f8e14eb8207bd696495e93f21f68299","993d951a04427a1d2f82754b54dfdb0087dd5b46cf724392f4673f619837e79d","997c98da784db39942db1efa0d850088df1da2bc1a04c9c7fd90c9a2b21904bc","a9fae6a30782306c22939a9a1fc0731c9747f8d0430550a959fa4d5f80ff2ffa","dc5546c1213036db022c5ddf2879e8937abf18a8c8251a0560431482ad46b357","213211567b80be96c91882e0ef5517ec58c3a4c137e497fda3531298462f2e93","edab3e0f19ae936330c970a57fde46cace366feb30992e241ff4a216c5265bd8","3a1b6cae1a558f9282a5e02fef2c73127f796239c52f6499e2d360e2f96ae68e","9bc5f0f923a7e8c610dd1a4931effd93e741c3d214fe9c92ca33849ffb8602ec","d9bf100319a2f94c431bc7e65433ba0907fe9479f865299be35e924b692414fe","57f89d3e2d3321849da9ae7f95e4b1e066a46d9f9ad2918ac92e5c162a55a41e","2c86ab227ce324af69737171ac8802619730cdc252231164ac44b4a2e452728d",{"version":"39e348b373ece0f0621d887e6036e78b6eed048072b36e69d5cdd363d0aa502a","signature":"b32d06279ac12db33a254ce2424c37b0e757502d55ae1dacf7d77240842a07cb"},{"version":"1bdaaa929028e63260ee0b975c2287efd7f44c1696c9673be52e412d29882012","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"cd0f1cb9083130a1097493a9f6cb24131a4e9bb44c6a844f8599508250d6c480","signature":"a0126b2500faf07aa59d3709c18de53b15162f63373203d0784cca319b1e960b"},{"version":"da5f86e1a817ee8c7ed9909ccb8cb61446c829e9af18ccb62ca3aad2ff814fe6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"043c8057a576bf31994ee67ee9fd477dd213b2e7dd2ad600360e39877f8590d2","signature":"ca1eee8eda1dcec392d95c606fabf41ded7f9e872dfe8f1a9c52db8795af332d"},{"version":"d5ef090496ad9a7606522d5c3e876387a14efa0e1047364dab0a177f234d7907","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"899caf3419de9c34926f6706348ef57abbf7db30c87003627e598a155b7e0c78","signature":"08b19930b4ba7c5a6eeafab4eac1c3b2ff7be1cf733f566fa4c8c93f3618d847"},{"version":"0921c871035f591a549407a9333e8bbefb59252c66d9c37b5378f705e9b5225e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"73adaea7b3c6826474dc85911584c31d876c3436983e8d0dc50031b270fb3bbe","db00e9f903b1d689061e54e9dc013113969c97347efa5d0f30db77db71a5e2bb",{"version":"64f2ecf30dcc0ea64804a831a9a8da446b6c634d0dfafa44a2a1f5235558bb5b","signature":"b4bf6c60a7c19eabea44ff7ccb1cf608d20fa0a72a93ab170587ec1eabe613c6"},{"version":"b8cf34f631a69f770dff4dd290000ca30d6cce8da22e05c5ea6ba3dc1780336d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7f24bb51cea61986ecce977b2bd9493e322386b68e10d5d605d947873e2804e3","signature":"2628e648dc231f207f77a9996a765453fbc5b751716c6d14d06d82f46c8834ce"},{"version":"47ecf51f627e07035676cb975508e3cf603bab7f78bf002217d3aab0ebc3c80b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"01a7c0d8ce0076623bb9b35567dcfd4a59f69d163c2be67c059bf8425c4ac5cb",{"version":"8e5a1adaae977af48997dec89d6cc6075aee453b661faf7252b4b3a44c7f2bbb","impliedFormat":1},{"version":"04471dc55f802c29791cc75edda8c4dd2a121f71c2401059da61eff83099e8ab","impliedFormat":99},{"version":"5c54a34e3d91727f7ae840bfe4d5d1c9a2f93c54cb7b6063d06ee4a6c3322656","impliedFormat":99},{"version":"db4da53b03596668cf6cc9484834e5de3833b9e7e64620cf08399fe069cd398d","impliedFormat":99},{"version":"ac7c28f153820c10850457994db1462d8c8e462f253b828ad942a979f726f2f9","impliedFormat":99},{"version":"f9b028d3c3891dd817e24d53102132b8f696269309605e6ed4f0db2c113bbd82","impliedFormat":99},{"version":"fb7c8d90e52e2884509166f96f3d591020c7b7977ab473b746954b0c8d100960","impliedFormat":99},{"version":"0bff51d6ed0c9093f6955b9d8258ce152ddb273359d50a897d8baabcb34de2c4","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"13918e2b81c4288695f9b1f3dcc2468caf0f848d5c1f3dc00071c619d34ff63a","impliedFormat":99},{"version":"120a80aa556732f684db3ed61aeff1d6671e1655bd6cba0aa88b22b88ac9a6b1","affectsGlobalScope":true,"impliedFormat":99},{"version":"0cf60f081761b337853493462a9d5626b11fe7b02a019d86c7b21628b5f928f5","impliedFormat":99},"5d2bcff208b51a9e89e69c72ef77ee0d8ec631955709d58f27d6b28cb9f500a2","cdd2c537282e5b19b1334da23868924c3b24efd7c1c81973d6943fd0816be588",{"version":"42e73b2f164621c10cac49c2df0666983657dd29932a8fcc52951040c57c3f89","signature":"c968550f9d6302f54147c45eb86fbb741711b8fcde9470071d016c5cb45306b0"},{"version":"7b1fd7f07aa61be279f29c42f7dc8a876478f9a10cc49bbda4551db640a771da","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7e50d2807063b83ffafd2655d9928e646d9d061cae4e68af73ecb132af825ca7","signature":"196cc58681e570c9eb8969a03df1a4c09ca1871fb30c0fa8731f16b76031df42"},{"version":"0d82601d36ed5bfcd384f00489072984fc418c09861bda1187f515426901cfc6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"ad42288f8c9ebfd4451e4256a2f091cfc26b958d29db3612c19efbbb476882a2",{"version":"59b54146333f3ad62db9f636c988f09378b61c55c4bde0541602011d458a1ca9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b7724c5f8c92bf25a109abae1de5f939f4b2f08421c288329bbc01bcc515a265","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","8a66b5d7dc745a5269622054dcbe35f925664f52c16fdc9d005b02b38f187dc0","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"d828ff531a832da354516464c5e25ca4970561f97ed02c77cb02d91aec4e80a6","affectsGlobalScope":true},"79b8f465a03c8519a7451b609f77c7b0823ed324878c4254122fbbd8ff518032",{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[559,561],775,776,782,[805,811],[862,963],968,[971,976],980,982,983,1035,1036,1042,1119,1120,[1130,1134],[1136,1144],[1170,1207],[1218,1288],[1299,1359],[1364,1380],1458,[1463,1550],[1563,1576]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[1574,1],[1575,2],[1576,3],[1572,4],[559,2],[1573,5],[560,6],[776,7],[1127,8],[1126,9],[1125,10],[1129,11],[1128,12],[1124,13],[1031,13],[1032,14],[1363,15],[1362,16],[1361,17],[1360,18],[1095,19],[1096,20],[1211,18],[1210,21],[1209,22],[1215,23],[1214,24],[1213,21],[1208,21],[1150,25],[1212,26],[1084,27],[1067,28],[1069,29],[1065,30],[1082,31],[1050,32],[1085,33],[1070,32],[1071,34],[1086,32],[1080,35],[1072,32],[1074,36],[1075,32],[1076,37],[1073,32],[1049,38],[1077,31],[1078,32],[1087,39],[1079,27],[1088,40],[1081,41],[1083,42],[1048,2],[1148,43],[1149,44],[1216,45],[1217,46],[1028,47],[1147,48],[1039,2],[1294,13],[1026,2],[1027,49],[1145,10],[1030,50],[1068,51],[1060,10],[1090,52],[1091,53],[1100,53],[1099,54],[1102,13],[1101,13],[1118,55],[1117,56],[1103,13],[1104,13],[1105,57],[1106,58],[1107,52],[1108,54],[1110,53],[1109,13],[1098,59],[1093,60],[1097,61],[1092,62],[1112,63],[1111,64],[1116,13],[1113,65],[1114,13],[1094,66],[1038,67],[1037,13],[1163,52],[1156,53],[1167,13],[1166,13],[1154,13],[1169,68],[1168,69],[1161,53],[1162,13],[1160,13],[1151,21],[1159,13],[1158,57],[1155,58],[1157,52],[1146,70],[1164,13],[1165,13],[1152,21],[1153,13],[1115,13],[1135,71],[1292,72],[1298,73],[1297,74],[1296,72],[1290,72],[1289,18],[1295,75],[1293,72],[1291,72],[1029,76],[1041,77],[1040,51],[1064,78],[1063,79],[1061,2],[1062,80],[1089,81],[1054,10],[1057,82],[1055,2],[1058,83],[1052,84],[1053,85],[1059,86],[1056,87],[1066,10],[1044,88],[1046,89],[1047,90],[1043,2],[1045,2],[1022,91],[403,2],[566,2],[1016,92],[637,2],[779,93],[1018,94],[1024,95],[1023,96],[1014,97],[964,2],[965,98],[966,99],[967,100],[800,2],[797,2],[796,2],[791,101],[802,102],[787,103],[798,104],[790,105],[789,106],[799,2],[794,107],[801,2],[795,108],[788,2],[786,109],[785,110],[1551,110],[784,103],[804,111],[1443,112],[1444,112],[1446,113],[1445,112],[1438,112],[1439,112],[1441,114],[1440,112],[1416,2],[1418,2],[1417,2],[1420,115],[1419,2],[1383,116],[1381,117],[1384,2],[1431,118],[1385,112],[1421,119],[1430,120],[1422,2],[1425,121],[1423,2],[1426,2],[1428,2],[1424,121],[1427,2],[1429,2],[1382,122],[1457,123],[1442,112],[1437,124],[1447,125],[1453,126],[1454,127],[1456,128],[1455,129],[1435,124],[1436,130],[1432,131],[1434,132],[1433,133],[1448,112],[1452,134],[1449,112],[1450,135],[1451,112],[1386,2],[1387,2],[1390,2],[1388,2],[1389,2],[1392,2],[1393,136],[1394,2],[1395,2],[1391,2],[1396,2],[1397,2],[1398,2],[1399,2],[1400,137],[1401,2],[1415,138],[1402,2],[1403,2],[1404,2],[1405,2],[1406,2],[1407,2],[1408,2],[1411,2],[1409,2],[1410,2],[1412,112],[1413,112],[1414,139],[783,2],[640,140],[638,2],[1015,2],[161,141],[162,141],[163,142],[101,143],[164,144],[165,145],[166,146],[99,2],[167,147],[168,148],[169,149],[170,150],[171,151],[172,152],[173,152],[174,153],[175,154],[176,155],[177,156],[102,2],[100,2],[178,157],[179,158],[180,159],[220,160],[181,161],[182,162],[183,161],[184,163],[185,164],[186,165],[187,166],[188,166],[189,166],[190,167],[191,168],[192,169],[193,170],[194,171],[195,172],[196,172],[197,173],[198,2],[199,2],[200,174],[201,175],[202,174],[203,176],[204,177],[205,178],[206,179],[207,180],[208,181],[209,182],[210,183],[211,184],[212,185],[213,186],[214,187],[215,188],[216,189],[217,190],[103,161],[104,2],[105,191],[106,192],[107,2],[108,193],[109,2],[152,194],[153,195],[154,196],[155,196],[156,197],[157,2],[158,144],[159,198],[160,195],[218,199],[219,200],[224,201],[488,10],[225,202],[223,203],[490,204],[489,205],[803,10],[221,206],[486,2],[222,207],[90,2],[92,208],[485,10],[255,10],[781,209],[780,2],[669,210],[774,211],[665,2],[668,212],[678,213],[666,214],[667,215],[641,216],[647,217],[648,218],[646,2],[615,2],[624,219],[623,220],[643,219],[626,221],[628,222],[671,222],[627,223],[635,224],[634,2],[622,225],[616,226],[663,227],[618,228],[620,229],[662,2],[649,228],[619,2],[621,226],[617,2],[1005,2],[1007,230],[1006,2],[639,2],[991,231],[990,232],[989,233],[997,234],[998,235],[995,236],[996,237],[993,238],[994,239],[992,240],[1034,241],[1033,242],[969,2],[91,2],[583,2],[657,243],[659,244],[658,245],[656,246],[655,2],[1460,247],[1459,2],[1461,248],[845,249],[814,250],[824,250],[815,250],[825,250],[816,250],[817,250],[832,250],[831,250],[833,250],[834,250],[826,250],[818,250],[827,250],[819,250],[828,250],[820,250],[822,250],[830,251],[823,250],[829,251],[835,251],[821,250],[836,250],[841,250],[842,250],[837,250],[813,2],[843,2],[839,250],[838,250],[840,250],[844,250],[607,2],[609,252],[608,2],[1025,10],[812,253],[1121,254],[851,255],[850,256],[857,257],[859,258],[855,259],[854,260],[858,256],[852,261],[849,262],[860,263],[861,263],[853,264],[847,2],[848,265],[1123,266],[1122,267],[856,2],[981,10],[511,268],[516,269],[523,270],[506,271],[259,2],[267,272],[407,273],[410,274],[382,2],[395,275],[402,276],[284,2],[384,2],[265,2],[381,277],[427,278],[266,2],[257,279],[409,280],[411,281],[412,282],[483,283],[376,284],[329,285],[389,286],[390,287],[388,288],[387,2],[383,289],[408,290],[268,291],[453,2],[454,292],[295,293],[269,294],[296,293],[332,293],[235,293],[405,295],[404,2],[394,296],[501,2],[244,2],[522,297],[461,298],[462,299],[458,300],[540,2],[359,2],[463,301],[459,302],[545,303],[544,304],[539,2],[310,2],[362,305],[361,2],[538,306],[460,10],[315,307],[322,308],[324,309],[314,2],[319,310],[321,311],[323,312],[318,313],[316,2],[320,314],[541,2],[537,2],[543,315],[542,2],[313,316],[532,317],[535,318],[303,319],[302,320],[301,321],[548,10],[300,322],[289,2],[550,2],[978,323],[977,2],[551,10],[552,324],[227,2],[391,325],[392,326],[393,327],[231,2],[396,2],[251,328],[226,2],[475,10],[233,329],[474,330],[473,331],[464,2],[465,2],[472,2],[467,2],[470,332],[466,2],[468,333],[471,334],[469,333],[264,2],[261,2],[262,293],[416,2],[421,335],[422,336],[420,337],[418,338],[419,339],[414,2],[481,301],[256,301],[510,340],[517,341],[521,342],[350,343],[349,2],[344,2],[497,344],[505,345],[377,346],[378,347],[456,348],[366,2],[479,349],[354,10],[371,350],[482,351],[367,2],[370,352],[368,2],[480,353],[477,354],[476,2],[478,2],[374,2],[452,355],[239,356],[352,357],[356,358],[372,359],[375,360],[364,361],[357,362],[504,363],[430,364],[348,365],[236,366],[503,367],[232,368],[423,369],[415,2],[424,370],[441,371],[413,2],[440,372],[98,2],[435,373],[260,2],[455,374],[431,2],[245,2],[247,2],[386,2],[439,375],[263,2],[287,376],[373,377],[293,378],[353,2],[438,2],[417,2],[443,379],[444,380],[385,2],[446,381],[448,382],[447,383],[397,2],[437,366],[450,384],[347,385],[436,386],[442,387],[272,2],[276,2],[275,2],[274,2],[279,2],[273,2],[282,2],[281,2],[278,2],[277,2],[280,2],[283,388],[271,2],[339,389],[338,2],[343,390],[340,391],[342,392],[345,390],[341,391],[252,393],[331,394],[500,395],[498,2],[527,396],[529,397],[493,398],[528,399],[240,400],[237,400],[270,2],[254,401],[253,402],[249,403],[250,404],[258,405],[286,405],[297,405],[333,406],[298,406],[242,407],[241,2],[337,408],[336,409],[335,410],[334,411],[243,412],[484,413],[285,414],[492,415],[457,416],[487,417],[491,418],[380,419],[379,420],[360,421],[346,422],[328,423],[330,424],[327,425],[449,426],[351,2],[515,2],[248,427],[451,428],[499,429],[358,2],[288,430],[365,431],[363,432],[290,433],[425,434],[494,2],[291,435],[426,435],[513,2],[512,2],[514,2],[496,2],[495,2],[428,436],[355,2],[325,437],[246,438],[304,2],[230,439],[292,2],[519,10],[229,2],[531,440],[312,10],[525,301],[311,441],[508,442],[309,440],[234,2],[533,443],[307,10],[308,10],[299,2],[228,2],[306,444],[305,445],[294,446],[369,170],[429,170],[445,2],[433,447],[432,2],[317,316],[238,2],[326,10],[502,328],[509,448],[93,10],[96,449],[97,450],[94,10],[95,2],[406,192],[401,451],[400,2],[399,452],[398,2],[507,453],[518,454],[520,455],[524,456],[979,457],[526,458],[530,459],[558,460],[534,460],[557,461],[536,462],[546,463],[547,464],[549,465],[553,466],[556,328],[555,2],[554,467],[675,193],[676,468],[846,469],[772,470],[679,2],[680,470],[771,471],[773,472],[603,473],[601,474],[602,475],[590,476],[591,474],[598,477],[589,478],[594,479],[604,2],[595,480],[600,481],[606,482],[605,483],[588,484],[596,485],[597,486],[592,487],[599,473],[593,488],[793,489],[792,2],[1021,490],[1020,491],[1462,492],[999,2],[1000,493],[1001,2],[1002,494],[1051,2],[612,495],[574,496],[575,497],[578,498],[567,499],[577,500],[573,501],[565,2],[579,502],[580,503],[568,2],[569,2],[571,504],[570,2],[572,505],[434,506],[587,2],[1003,507],[986,2],[1008,508],[988,509],[1010,510],[1004,511],[1013,512],[1011,513],[987,514],[984,10],[1009,515],[1562,516],[985,10],[1012,517],[1561,518],[1553,2],[1552,2],[1560,519],[1555,520],[1558,521],[1559,522],[1554,2],[1556,2],[1557,523],[970,2],[644,2],[636,2],[88,2],[89,2],[14,2],[15,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[64,2],[65,2],[66,2],[11,2],[67,2],[68,2],[69,2],[70,2],[71,2],[72,2],[12,2],[73,2],[74,2],[75,2],[76,2],[77,2],[1,2],[78,2],[79,2],[13,2],[80,2],[81,2],[82,2],[83,2],[84,2],[85,2],[86,2],[87,2],[1019,2],[128,524],[140,525],[125,526],[141,527],[150,528],[116,529],[117,530],[115,531],[149,532],[144,533],[148,534],[119,535],[137,536],[118,537],[147,538],[113,539],[114,533],[120,540],[121,2],[127,541],[124,540],[111,542],[151,543],[142,544],[131,545],[130,540],[132,546],[135,547],[129,548],[133,549],[145,532],[122,550],[123,551],[136,552],[112,527],[139,553],[138,540],[126,551],[134,554],[143,2],[110,2],[146,555],[1017,556],[563,557],[614,558],[582,559],[564,557],[562,2],[581,560],[613,2],[611,2],[584,561],[610,562],[576,563],[586,2],[585,564],[670,565],[778,566],[664,567],[645,568],[633,569],[629,570],[661,2],[630,221],[653,571],[650,572],[673,573],[672,574],[631,575],[652,576],[625,2],[632,577],[777,578],[674,579],[660,580],[677,581],[654,582],[1577,583],[651,2],[642,2],[757,584],[760,585],[762,586],[769,587],[764,2],[765,2],[763,588],[766,589],[758,2],[759,2],[770,590],[761,591],[767,2],[768,592],[751,593],[755,594],[752,594],[748,593],[756,595],[753,596],[754,594],[749,597],[750,598],[744,599],[688,600],[690,601],[743,2],[689,602],[747,603],[746,604],[745,605],[681,2],[691,600],[692,2],[683,606],[687,607],[682,2],[684,608],[685,609],[686,2],[693,610],[694,610],[695,610],[696,610],[697,610],[698,610],[699,610],[700,610],[701,610],[702,610],[703,610],[704,610],[705,610],[707,610],[706,610],[708,610],[709,610],[710,610],[711,610],[742,611],[712,610],[713,610],[714,610],[715,610],[716,610],[717,610],[718,610],[719,610],[720,610],[721,610],[722,610],[723,610],[724,610],[726,610],[725,610],[727,610],[728,610],[729,610],[730,610],[731,610],[732,610],[733,610],[734,610],[735,610],[736,610],[737,610],[738,610],[741,610],[739,610],[740,610],[1181,612],[1182,613],[1143,614],[1183,615],[1184,616],[1171,617],[1185,618],[1186,619],[1172,620],[1187,621],[1188,622],[1173,623],[1189,624],[1190,625],[1176,626],[1191,627],[1192,628],[1175,629],[811,630],[810,631],[1178,624],[1180,632],[1179,633],[1200,634],[1201,635],[1193,636],[1202,637],[1203,638],[1194,639],[1204,640],[1205,641],[1195,642],[1206,643],[1207,644],[1196,642],[1197,645],[1199,646],[1198,647],[1225,648],[1226,649],[1220,650],[1227,651],[1228,652],[1221,653],[1222,654],[1224,655],[1223,656],[1236,657],[1237,658],[1230,659],[1238,660],[1239,661],[1231,662],[1240,663],[1241,664],[1232,665],[864,666],[1233,667],[1235,668],[1234,669],[866,670],[865,671],[868,672],[867,673],[872,674],[871,673],[870,675],[869,673],[874,676],[873,673],[876,677],[875,673],[878,678],[877,673],[882,679],[881,673],[884,680],[883,673],[880,681],[879,673],[886,682],[885,673],[890,683],[889,673],[888,684],[887,673],[896,685],[895,673],[898,686],[897,673],[893,687],[900,688],[899,689],[902,690],[901,689],[904,691],[903,689],[908,692],[907,689],[906,693],[905,689],[910,694],[909,689],[912,695],[911,673],[915,696],[916,696],[917,696],[918,697],[913,696],[914,698],[924,699],[923,673],[922,700],[921,673],[920,701],[919,673],[928,702],[927,673],[926,703],[925,673],[930,704],[929,673],[932,705],[931,673],[934,706],[933,673],[936,707],[935,673],[938,708],[937,673],[939,696],[940,696],[941,709],[894,687],[943,710],[942,673],[945,711],[944,673],[947,712],[946,673],[892,713],[891,673],[949,714],[948,673],[951,715],[950,716],[955,717],[954,673],[953,718],[952,673],[1248,719],[1249,720],[1243,721],[1250,722],[1251,723],[1244,724],[1252,725],[1253,726],[1242,727],[1245,728],[1247,729],[1246,730],[1267,731],[1268,732],[1260,733],[1269,734],[1270,735],[1261,736],[1271,737],[1272,738],[1263,739],[1273,740],[1274,741],[1262,742],[1264,743],[1266,744],[1265,745],[1275,746],[1276,747],[1254,724],[1277,748],[1278,749],[1255,623],[1279,750],[1280,751],[1256,752],[1257,753],[1259,754],[1258,755],[1309,756],[1310,757],[1301,758],[1311,759],[1312,760],[1300,761],[1313,762],[1305,763],[1314,764],[1315,765],[1302,766],[1316,767],[1317,768],[1303,736],[1318,769],[1319,770],[1304,771],[1306,772],[1308,773],[1307,774],[1320,775],[1321,776],[1282,777],[1322,778],[1285,779],[1323,780],[1324,781],[1283,782],[1325,783],[1326,784],[1284,785],[1281,786],[1333,787],[1334,788],[1327,789],[1335,790],[1336,791],[1328,742],[1337,792],[1338,793],[1329,794],[956,795],[1330,796],[1332,797],[1331,798],[1286,799],[1288,800],[1287,801],[1345,802],[1346,803],[1339,620],[1347,804],[1348,805],[1340,806],[1349,807],[1350,808],[1341,809],[957,687],[1342,810],[1344,811],[1343,812],[1356,813],[1357,814],[1351,815],[1358,816],[1359,817],[1352,818],[1353,816],[1355,819],[1354,820],[983,821],[1371,822],[1372,823],[1365,824],[1373,825],[1374,826],[1367,827],[1375,828],[1376,829],[1366,830],[1368,825],[1370,831],[1369,832],[1378,833],[1458,834],[1377,835],[1380,836],[1379,837],[1471,838],[1472,839],[1463,840],[1473,841],[1474,842],[1464,843],[1475,844],[1476,845],[1465,846],[1477,847],[1468,848],[1478,849],[1479,850],[1466,851],[1467,852],[1470,853],[1469,854],[1487,855],[1488,856],[1480,857],[1489,858],[1490,859],[1483,860],[1491,861],[1492,862],[1482,863],[1481,687],[1499,864],[1500,865],[1494,866],[1501,867],[1502,868],[1495,869],[1493,687],[1496,867],[1498,870],[1497,871],[1484,858],[1486,872],[1485,873],[1510,874],[1511,875],[1505,876],[1512,877],[1513,878],[1503,879],[1514,880],[1515,881],[1506,882],[1516,883],[1517,884],[1504,620],[958,687],[1507,880],[1509,885],[1508,886],[1526,887],[1527,888],[1518,889],[1528,890],[1529,891],[1519,892],[1530,893],[1531,894],[1520,895],[1532,896],[1533,897],[1522,898],[1534,899],[1535,900],[1521,901],[960,902],[959,795],[1523,896],[1525,903],[1524,904],[1536,905],[1537,906],[1229,907],[1538,908],[1539,909],[1142,910],[1540,911],[1541,912],[1036,913],[1542,914],[1543,915],[1131,916],[1546,917],[1547,918],[1137,919],[1548,920],[1549,921],[1139,922],[1544,923],[1545,924],[1140,925],[1550,926],[1120,927],[1565,928],[1566,929],[1132,930],[1567,931],[1568,932],[1133,933],[1563,934],[1564,935],[1134,936],[1141,937],[1130,938],[1042,939],[1035,940],[1138,941],[1364,942],[1119,943],[1218,944],[1144,941],[1170,945],[1136,946],[1299,947],[1174,941],[1219,941],[972,948],[973,949],[974,950],[1569,951],[975,952],[863,953],[862,954],[809,955],[961,795],[962,795],[963,795],[1177,687],[807,795],[806,687],[968,956],[971,957],[808,795],[1570,958],[980,959],[1571,960],[982,961],[561,962],[976,687],[782,963],[805,964],[775,965]],"affectedFilesPendingEmit":[1576,1573,776,1181,1182,1143,1183,1184,1171,1185,1186,1172,1187,1188,1173,1189,1190,1176,1191,1192,1175,811,810,1178,1180,1179,1200,1201,1193,1202,1203,1194,1204,1205,1195,1206,1207,1196,1197,1199,1198,1225,1226,1220,1227,1228,1221,1222,1224,1223,1236,1237,1230,1238,1239,1231,1240,1241,1232,864,1233,1235,1234,866,865,868,867,872,871,870,869,874,873,876,875,878,877,882,881,884,883,880,879,886,885,890,889,888,887,896,895,898,897,893,900,899,902,901,904,903,908,907,906,905,910,909,912,911,915,916,917,918,913,914,924,923,922,921,920,919,928,927,926,925,930,929,932,931,934,933,936,935,938,937,939,940,941,894,943,942,945,944,947,946,892,891,949,948,951,950,955,954,953,952,1248,1249,1243,1250,1251,1244,1252,1253,1242,1245,1247,1246,1267,1268,1260,1269,1270,1261,1271,1272,1263,1273,1274,1262,1264,1266,1265,1275,1276,1254,1277,1278,1255,1279,1280,1256,1257,1259,1258,1309,1310,1301,1311,1312,1300,1313,1305,1314,1315,1302,1316,1317,1303,1318,1319,1304,1306,1308,1307,1320,1321,1282,1322,1285,1323,1324,1283,1325,1326,1284,1281,1333,1334,1327,1335,1336,1328,1337,1338,1329,956,1330,1332,1331,1286,1288,1287,1345,1346,1339,1347,1348,1340,1349,1350,1341,957,1342,1344,1343,1356,1357,1351,1358,1359,1352,1353,1355,1354,983,1371,1372,1365,1373,1374,1367,1375,1376,1366,1368,1370,1369,1378,1458,1377,1380,1379,1471,1472,1463,1473,1474,1464,1475,1476,1465,1477,1468,1478,1479,1466,1467,1470,1469,1487,1488,1480,1489,1490,1483,1491,1492,1482,1481,1499,1500,1494,1501,1502,1495,1493,1496,1498,1497,1484,1486,1485,1510,1511,1505,1512,1513,1503,1514,1515,1506,1516,1517,1504,958,1507,1509,1508,1526,1527,1518,1528,1529,1519,1530,1531,1520,1532,1533,1522,1534,1535,1521,960,959,1523,1525,1524,1536,1537,1229,1538,1539,1142,1540,1541,1036,1542,1543,1131,1546,1547,1137,1548,1549,1139,1544,1545,1140,1550,1120,1565,1566,1132,1567,1568,1133,1563,1564,1134,1141,1130,1042,1035,1138,1364,1119,1218,1144,1170,1136,1299,1174,1219,972,973,974,1569,975,863,862,809,961,962,963,1177,807,806,968,971,808,1570,980,1571,982,976,782,805],"version":"6.0.3"}
\ No newline at end of file
diff --git a/ingestion/tasks.py b/ingestion/tasks.py
index e645dc0c..db737d06 100644
--- a/ingestion/tasks.py
+++ b/ingestion/tasks.py
@@ -12,6 +12,8 @@
from content.models import Content
from ingestion.models import IngestionRun, RunStatus
from ingestion.plugins import get_plugin_for_source_config
+from notifications.emit import notify_project_admins
+from notifications.models import NotificationLevel
from projects.models import LinkedInCredentials, SourceConfig
logger = logging.getLogger(__name__)
@@ -47,6 +49,17 @@ def run_ingestion(source_config_id: int):
ingestion_run.completed_at = timezone.now()
ingestion_run.error_message = str(exc)
ingestion_run.save(update_fields=["status", "completed_at", "error_message"])
+ notify_project_admins(
+ source_config.project,
+ level=NotificationLevel.ERROR,
+ body=f"{source_config.plugin_name} ingestion failed.",
+ metadata={
+ "project_id": _require_pk(source_config.project),
+ "source_config_id": source_config_id,
+ "plugin_name": source_config.plugin_name,
+ "error": str(exc),
+ },
+ )
logger.exception(
"Source ingestion failed", extra={"source_config_id": source_config_id}
)
diff --git a/ingestion/tests/test_tasks.py b/ingestion/tests/test_tasks.py
index 0742ca4b..796a50e4 100644
--- a/ingestion/tests/test_tasks.py
+++ b/ingestion/tests/test_tasks.py
@@ -13,8 +13,15 @@
run_all_ingestions,
run_ingestion,
)
+from notifications.models import Notification, NotificationLevel
from projects.model_support import SourcePluginName
-from projects.models import LinkedInCredentials, Project, SourceConfig
+from projects.models import (
+ LinkedInCredentials,
+ Project,
+ ProjectMembership,
+ ProjectRole,
+ SourceConfig,
+)
pytestmark = pytest.mark.django_db
@@ -458,6 +465,37 @@ def test_run_ingestion_marks_failure_when_plugin_errors(source_plugin_context, m
assert ingestion_run.error_message == "feed unavailable"
+def test_run_ingestion_notifies_project_admins_when_plugin_errors(
+ source_plugin_context, settings, mocker
+):
+ settings.MESSAGING_ENABLED = True
+ ProjectMembership.objects.create(
+ user=source_plugin_context.user,
+ project=source_plugin_context.project,
+ role=ProjectRole.ADMIN,
+ )
+ parse_mock = mocker.patch("ingestion.plugins.rss.feedparser.parse")
+ source_config = SourceConfig.objects.create(
+ project=source_plugin_context.project,
+ plugin_name=SourcePluginName.RSS,
+ config={"feed_url": "https://example.com/feed.xml"},
+ )
+ parse_mock.side_effect = RuntimeError("feed unavailable")
+
+ with pytest.raises(RuntimeError, match="feed unavailable"):
+ run_ingestion(_require_pk(source_config))
+
+ notification = Notification.objects.get()
+ assert notification.level == NotificationLevel.ERROR
+ assert notification.body == "rss ingestion failed."
+ assert notification.metadata["project_id"] == _require_pk(
+ source_plugin_context.project
+ )
+ assert notification.metadata["source_config_id"] == _require_pk(source_config)
+ assert notification.metadata["plugin_name"] == SourcePluginName.RSS
+ assert notification.metadata["error"] == "feed unavailable"
+
+
def test_ingest_source_config_truncates_fields_and_processes_inline(
source_plugin_context, settings, mocker
):
diff --git a/messaging/__init__.py b/messaging/__init__.py
new file mode 100644
index 00000000..5f81e619
--- /dev/null
+++ b/messaging/__init__.py
@@ -0,0 +1 @@
+"""User-to-user messaging models and API surface."""
diff --git a/messaging/admin.py b/messaging/admin.py
new file mode 100644
index 00000000..41c5dea5
--- /dev/null
+++ b/messaging/admin.py
@@ -0,0 +1,31 @@
+"""Admin registrations for direct-message models."""
+
+from django.contrib import admin
+
+from messaging.models import DirectMessage, Thread, ThreadParticipant
+
+
+@admin.register(Thread)
+class ThreadAdmin(admin.ModelAdmin):
+ """Audit thread state in Django admin."""
+
+ list_display = ("id", "last_message_at", "created_at")
+ search_fields = ("id",)
+
+
+@admin.register(ThreadParticipant)
+class ThreadParticipantAdmin(admin.ModelAdmin):
+ """Audit per-user thread participation state."""
+
+ list_display = ("thread", "user", "last_read_at")
+ list_filter = ("last_read_at",)
+ search_fields = ("user__username", "user__email")
+
+
+@admin.register(DirectMessage)
+class DirectMessageAdmin(admin.ModelAdmin):
+ """Audit direct-message rows in Django admin."""
+
+ list_display = ("id", "thread", "sender", "created_at")
+ list_filter = ("created_at",)
+ search_fields = ("sender__username", "body")
diff --git a/messaging/api.py b/messaging/api.py
new file mode 100644
index 00000000..e5b3e584
--- /dev/null
+++ b/messaging/api.py
@@ -0,0 +1,151 @@
+"""REST API endpoints for direct-message threads."""
+
+from __future__ import annotations
+
+from django.contrib.auth import get_user_model
+from django.db.models import Prefetch
+from django.utils import timezone
+from drf_spectacular.utils import OpenApiResponse, extend_schema, extend_schema_view
+from rest_framework import mixins, status, viewsets
+from rest_framework.decorators import action
+from rest_framework.permissions import IsAuthenticated
+from rest_framework.response import Response
+
+from core.api import AUTHENTICATION_REQUIRED_RESPONSE
+from messaging.models import DirectMessage, Thread, ThreadParticipant
+from messaging.serializers import (
+ DirectMessageCreateSerializer,
+ DirectMessageSerializer,
+ ThreadCreateSerializer,
+ ThreadSerializer,
+)
+
+
+@extend_schema_view(
+ list=extend_schema(
+ summary="List direct-message threads",
+ description="Return the current user's 1:1 messaging threads, newest first.",
+ tags=["Messaging"],
+ responses={
+ 200: ThreadSerializer(many=True),
+ 403: AUTHENTICATION_REQUIRED_RESPONSE,
+ },
+ ),
+ create=extend_schema(
+ summary="Open or find a direct-message thread",
+ description="Find an existing 1:1 thread with another visible user or create it.",
+ tags=["Messaging"],
+ request=ThreadCreateSerializer,
+ responses={201: ThreadSerializer, 403: AUTHENTICATION_REQUIRED_RESPONSE},
+ ),
+)
+class ThreadViewSet(
+ mixins.ListModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet
+):
+ """List, create, and interact with the current user's direct-message threads."""
+
+ permission_classes = [IsAuthenticated]
+ serializer_class = ThreadSerializer
+ queryset = Thread.objects.all()
+ http_method_names = ["get", "post", "head", "options"]
+
+ def get_queryset(self):
+ """Limit threads to those the authenticated user participates in."""
+
+ user_model = get_user_model()
+ return (
+ self.queryset.filter(participants=self.request.user)
+ .prefetch_related(
+ Prefetch(
+ "participants",
+ queryset=user_model.objects.all(),
+ ),
+ Prefetch(
+ "participant_states",
+ queryset=ThreadParticipant.objects.filter(user=self.request.user),
+ to_attr="current_participant_states",
+ ),
+ Prefetch(
+ "messages",
+ queryset=DirectMessage.objects.select_related("sender").order_by(
+ "-created_at"
+ ),
+ to_attr="prefetched_messages",
+ ),
+ )
+ .distinct()
+ )
+
+ def create(self, request, *args, **kwargs):
+ """Find or create the direct-message thread for the requested recipient."""
+
+ input_serializer = ThreadCreateSerializer(
+ data=request.data,
+ context=self.get_serializer_context(),
+ )
+ input_serializer.is_valid(raise_exception=True)
+ thread = input_serializer.save()
+ thread = self.get_queryset().get(pk=thread.pk)
+ output_serializer = self.get_serializer(thread)
+ return Response(output_serializer.data, status=status.HTTP_201_CREATED)
+
+ @extend_schema(
+ summary="List thread messages",
+ description="Return messages for one direct-message thread.",
+ tags=["Messaging"],
+ responses={
+ 200: DirectMessageSerializer(many=True),
+ 403: AUTHENTICATION_REQUIRED_RESPONSE,
+ },
+ )
+ @action(detail=True, methods=["get", "post"], url_path="messages")
+ def messages(self, request, *args, **kwargs):
+ """List or send messages within one thread."""
+
+ thread = self.get_object()
+ if request.method.lower() == "get":
+ serializer = DirectMessageSerializer(
+ thread.messages.select_related("sender").all(),
+ many=True,
+ )
+ return Response(serializer.data)
+
+ input_serializer = DirectMessageCreateSerializer(data=request.data)
+ input_serializer.is_valid(raise_exception=True)
+ message = DirectMessage.objects.create(
+ thread=thread,
+ sender=request.user,
+ body=input_serializer.validated_data["body"],
+ )
+ thread.last_message_at = message.created_at
+ thread.save(update_fields=["last_message_at"])
+ ThreadParticipant.objects.filter(thread=thread, user=request.user).update(
+ last_read_at=message.created_at
+ )
+ output_serializer = DirectMessageSerializer(message)
+ return Response(output_serializer.data, status=status.HTTP_201_CREATED)
+
+ @extend_schema(
+ summary="Mark a thread as read",
+ description="Update the current user's last-read cursor for one thread.",
+ tags=["Messaging"],
+ request=None,
+ responses={
+ 200: OpenApiResponse(description="Thread marked as read."),
+ 403: AUTHENTICATION_REQUIRED_RESPONSE,
+ },
+ )
+ @action(detail=True, methods=["post"], url_path="read")
+ def read(self, request, *args, **kwargs):
+ """Move the current user's read cursor to the latest message."""
+
+ thread = self.get_object()
+ participant_state = thread.participant_states.get(user=request.user)
+ participant_state.last_read_at = thread.last_message_at or timezone.now()
+ participant_state.save(update_fields=["last_read_at"])
+ return Response(
+ {
+ "thread_id": int(thread.pk),
+ "last_read_at": participant_state.last_read_at,
+ }
+ )
diff --git a/messaging/api_urls.py b/messaging/api_urls.py
new file mode 100644
index 00000000..c39d98b0
--- /dev/null
+++ b/messaging/api_urls.py
@@ -0,0 +1,11 @@
+"""API route registration for direct-message thread resources."""
+
+from rest_framework.routers import DefaultRouter
+
+from messaging.api import ThreadViewSet
+
+
+def register_root_routes(router: DefaultRouter) -> None:
+ """Register top-level messaging endpoints."""
+
+ router.register("messaging/threads", ThreadViewSet, basename="messaging-thread")
diff --git a/messaging/apps.py b/messaging/apps.py
new file mode 100644
index 00000000..73aab476
--- /dev/null
+++ b/messaging/apps.py
@@ -0,0 +1,14 @@
+"""App configuration for the messaging app."""
+
+from django.apps import AppConfig
+
+
+class MessagingConfig(AppConfig):
+ """Configure the messaging app."""
+
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "messaging"
+ verbose_name = "Messaging"
+
+ def ready(self) -> None:
+ import messaging.signals # noqa: F401
diff --git a/messaging/consumers.py b/messaging/consumers.py
new file mode 100644
index 00000000..26a58c60
--- /dev/null
+++ b/messaging/consumers.py
@@ -0,0 +1,60 @@
+"""WebSocket consumers for live direct-message delivery."""
+
+from __future__ import annotations
+
+from channels.generic.websocket import AsyncJsonWebsocketConsumer
+from django.conf import settings
+
+from messaging.models import ThreadParticipant
+from messaging.realtime import thread_group_name
+
+
+class ThreadConsumer(AsyncJsonWebsocketConsumer):
+ """Stream new direct messages for one authenticated participant thread."""
+
+ group_name: str | None = None
+
+ async def connect(self) -> None:
+ """Authenticate the websocket and subscribe it to one thread group."""
+
+ if not getattr(settings, "MESSAGING_ENABLED", False):
+ await self.close(code=4404)
+ return
+
+ user = self.scope.get("user")
+ if user is None or not user.is_authenticated:
+ await self.close(code=4401)
+ return
+
+ thread_id = self.scope["url_route"]["kwargs"].get("thread_id")
+ if thread_id is None:
+ await self.close(code=4404)
+ return
+
+ is_participant = await ThreadParticipant.objects.filter(
+ thread_id=thread_id,
+ user_id=user.pk,
+ ).aexists()
+ if not is_participant:
+ await self.close(code=4403)
+ return
+
+ self.group_name = thread_group_name(int(thread_id))
+ await self.channel_layer.group_add(self.group_name, self.channel_name)
+ await self.accept()
+
+ async def disconnect(self, close_code: int) -> None:
+ """Remove the socket from the thread group on disconnect."""
+
+ if self.group_name is not None:
+ await self.channel_layer.group_discard(self.group_name, self.channel_name)
+
+ async def message_created(self, event: dict[str, object]) -> None:
+ """Send the created-message payload to the browser client."""
+
+ await self.send_json(
+ {
+ "type": "message.created",
+ "message": event["message"],
+ }
+ )
diff --git a/messaging/migrations/0001_initial.py b/messaging/migrations/0001_initial.py
new file mode 100644
index 00000000..1da336d0
--- /dev/null
+++ b/messaging/migrations/0001_initial.py
@@ -0,0 +1,125 @@
+# Generated by Django 6.0.4 on 2026-05-03 18:06
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="Thread",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("last_message_at", models.DateTimeField(blank=True, null=True)),
+ ("created_at", models.DateTimeField(auto_now_add=True)),
+ ],
+ options={
+ "ordering": ["-last_message_at", "-created_at"],
+ },
+ ),
+ migrations.CreateModel(
+ name="DirectMessage",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("body", models.TextField()),
+ ("created_at", models.DateTimeField(auto_now_add=True)),
+ ("edited_at", models.DateTimeField(blank=True, null=True)),
+ (
+ "sender",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="messages_sent",
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ (
+ "thread",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="messages",
+ to="messaging.thread",
+ ),
+ ),
+ ],
+ options={
+ "ordering": ["created_at", "id"],
+ },
+ ),
+ migrations.CreateModel(
+ name="ThreadParticipant",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("last_read_at", models.DateTimeField(blank=True, null=True)),
+ (
+ "thread",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="participant_states",
+ to="messaging.thread",
+ ),
+ ),
+ (
+ "user",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="thread_states",
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.AddField(
+ model_name="thread",
+ name="participants",
+ field=models.ManyToManyField(
+ related_name="threads",
+ through="messaging.ThreadParticipant",
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ migrations.AddIndex(
+ model_name="threadparticipant",
+ index=models.Index(
+ fields=["user", "thread"], name="messaging_t_user_id_9405d5_idx"
+ ),
+ ),
+ migrations.AddConstraint(
+ model_name="threadparticipant",
+ constraint=models.UniqueConstraint(
+ fields=("thread", "user"),
+ name="messaging_threadparticipant_unique_thread_user",
+ ),
+ ),
+ ]
diff --git a/messaging/migrations/__init__.py b/messaging/migrations/__init__.py
new file mode 100644
index 00000000..25b16d3b
--- /dev/null
+++ b/messaging/migrations/__init__.py
@@ -0,0 +1 @@
+"""Messaging app migrations."""
diff --git a/messaging/models.py b/messaging/models.py
new file mode 100644
index 00000000..9b11892a
--- /dev/null
+++ b/messaging/models.py
@@ -0,0 +1,117 @@
+"""Models for direct user-to-user messaging threads and messages."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from django.conf import settings
+from django.db import models
+from django.db.models import Count
+
+from projects.models import ProjectMembership
+
+if TYPE_CHECKING:
+ from users.models import AppUser
+
+
+def shared_project_ids_for_users(first_user_id: int, second_user_id: int) -> list[int]:
+ """Return the project ids visible to both users."""
+
+ return list(
+ ProjectMembership.objects.filter(user_id=first_user_id)
+ .filter(project__memberships__user_id=second_user_id)
+ .values_list("project_id", flat=True)
+ .distinct()
+ )
+
+
+def users_share_project(first_user_id: int, second_user_id: int) -> bool:
+ """Return whether both users share at least one project membership."""
+
+ return bool(shared_project_ids_for_users(first_user_id, second_user_id))
+
+
+class Thread(models.Model):
+ """A 1:1 direct-message thread between two users."""
+
+ participants: models.ManyToManyField[AppUser, ThreadParticipant] = (
+ models.ManyToManyField(
+ settings.AUTH_USER_MODEL,
+ through="ThreadParticipant",
+ related_name="threads",
+ )
+ )
+ last_message_at = models.DateTimeField(null=True, blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+
+ class Meta:
+ ordering = ["-last_message_at", "-created_at"]
+
+ def __str__(self) -> str:
+ return f"Thread {self.pk}"
+
+ @classmethod
+ def find_between_users(
+ cls, first_user_id: int, second_user_id: int
+ ) -> "Thread | None":
+ """Return the existing 1:1 thread shared by the two users, if any."""
+
+ return (
+ cls.objects.filter(participants__id=first_user_id)
+ .filter(participants__id=second_user_id)
+ .annotate(participant_count=Count("participants", distinct=True))
+ .filter(participant_count=2)
+ .first()
+ )
+
+
+class ThreadParticipant(models.Model):
+ """Per-user thread state such as last read timestamps."""
+
+ thread = models.ForeignKey(
+ Thread,
+ on_delete=models.CASCADE,
+ related_name="participant_states",
+ )
+ user = models.ForeignKey(
+ settings.AUTH_USER_MODEL,
+ on_delete=models.CASCADE,
+ related_name="thread_states",
+ )
+ last_read_at = models.DateTimeField(null=True, blank=True)
+
+ class Meta:
+ constraints = [
+ models.UniqueConstraint(
+ fields=["thread", "user"],
+ name="messaging_threadparticipant_unique_thread_user",
+ )
+ ]
+ indexes = [models.Index(fields=["user", "thread"])]
+
+ def __str__(self) -> str:
+ return f"{self.user} in thread {self.thread_id}"
+
+
+class DirectMessage(models.Model):
+ """One message authored by one participant in a thread."""
+
+ thread = models.ForeignKey(
+ Thread,
+ on_delete=models.CASCADE,
+ related_name="messages",
+ )
+ sender = models.ForeignKey(
+ settings.AUTH_USER_MODEL,
+ on_delete=models.CASCADE,
+ related_name="messages_sent",
+ )
+ body = models.TextField()
+ created_at = models.DateTimeField(auto_now_add=True)
+ edited_at = models.DateTimeField(null=True, blank=True)
+
+ class Meta:
+ ordering = ["created_at", "id"]
+
+ def __str__(self) -> str:
+ return f"Message {self.pk} in thread {self.thread_id}"
diff --git a/messaging/realtime.py b/messaging/realtime.py
new file mode 100644
index 00000000..fde8e74d
--- /dev/null
+++ b/messaging/realtime.py
@@ -0,0 +1,31 @@
+"""Shared helpers for direct-message realtime delivery."""
+
+from __future__ import annotations
+
+from messaging.models import DirectMessage
+
+
+def thread_group_name(thread_id: int) -> str:
+ """Return the channel-layer group name for one thread."""
+
+ return f"thread.{thread_id}"
+
+
+def serialize_message(message: DirectMessage) -> dict[str, object]:
+ """Return the websocket payload shape for one direct message."""
+
+ sender = message.sender
+ return {
+ "id": int(message.pk),
+ "thread": int(message.thread_id),
+ "sender": int(message.sender_id),
+ "sender_username": sender.username,
+ "sender_display_name": sender.display_name or sender.username,
+ "body": message.body,
+ "created_at": message.created_at.isoformat().replace("+00:00", "Z"),
+ "edited_at": (
+ message.edited_at.isoformat().replace("+00:00", "Z")
+ if message.edited_at is not None
+ else None
+ ),
+ }
diff --git a/messaging/routing.py b/messaging/routing.py
new file mode 100644
index 00000000..2a00d596
--- /dev/null
+++ b/messaging/routing.py
@@ -0,0 +1,9 @@
+"""WebSocket routes for the messaging app."""
+
+from django.urls import path
+
+from messaging.consumers import ThreadConsumer
+
+websocket_urlpatterns = [
+ path("ws/messages//", ThreadConsumer.as_asgi()),
+]
diff --git a/messaging/serializers.py b/messaging/serializers.py
new file mode 100644
index 00000000..b3c33f61
--- /dev/null
+++ b/messaging/serializers.py
@@ -0,0 +1,212 @@
+"""Serializers for direct-message threads and messages."""
+
+from __future__ import annotations
+
+from django.contrib.auth import get_user_model
+from django.utils import timezone
+from rest_framework import serializers
+from typing import cast
+
+from messaging.models import (
+ DirectMessage,
+ Thread,
+ ThreadParticipant,
+ users_share_project,
+)
+
+
+class ThreadCounterpartSerializer(serializers.Serializer):
+ """Serialize the other user visible in a 1:1 thread."""
+
+ id = serializers.IntegerField()
+ username = serializers.CharField()
+ display_name = serializers.CharField()
+ avatar_url = serializers.CharField(allow_null=True)
+ avatar_thumbnail_url = serializers.CharField(allow_null=True)
+
+
+class DirectMessageSerializer(serializers.ModelSerializer):
+ """Serialize one direct message within a thread."""
+
+ sender_username = serializers.CharField(source="sender.username", read_only=True)
+ sender_display_name = serializers.SerializerMethodField()
+
+ class Meta:
+ model = DirectMessage
+ fields = [
+ "id",
+ "thread",
+ "sender",
+ "sender_username",
+ "sender_display_name",
+ "body",
+ "created_at",
+ "edited_at",
+ ]
+ read_only_fields = fields
+
+ def get_sender_display_name(self, obj: DirectMessage) -> str:
+ """Return the sender's display label for message lists."""
+
+ return obj.sender.display_name or obj.sender.username
+
+
+class ThreadSerializer(serializers.ModelSerializer):
+ """Serialize thread summaries for the current participant."""
+
+ counterpart = serializers.SerializerMethodField()
+ has_unread = serializers.SerializerMethodField()
+ last_message_preview = serializers.SerializerMethodField()
+ last_read_at = serializers.SerializerMethodField()
+
+ class Meta:
+ model = Thread
+ fields = [
+ "id",
+ "counterpart",
+ "has_unread",
+ "last_message_preview",
+ "last_message_at",
+ "last_read_at",
+ "created_at",
+ ]
+ read_only_fields = fields
+
+ def _current_user_id(self) -> int:
+ request = self.context["request"]
+ return int(request.user.pk)
+
+ def _participant_state(self, obj: Thread) -> ThreadParticipant | None:
+ prefetched_state = getattr(obj, "current_participant_states", None)
+ if prefetched_state:
+ return prefetched_state[0]
+ return obj.participant_states.filter(user_id=self._current_user_id()).first()
+
+ def _messages(self, obj: Thread) -> list[DirectMessage]:
+ prefetched_messages = getattr(obj, "prefetched_messages", None)
+ if prefetched_messages is not None:
+ return list(prefetched_messages)
+ return list(obj.messages.select_related("sender").order_by("-created_at"))
+
+ def get_counterpart(self, obj: Thread) -> dict[str, object] | None:
+ """Return the other participant shown in thread lists."""
+
+ current_user_id = self._current_user_id()
+ counterpart = next(
+ (
+ participant
+ for participant in obj.participants.all()
+ if participant.pk != current_user_id
+ ),
+ None,
+ )
+ if counterpart is None:
+ return None
+ return {
+ "id": int(counterpart.pk),
+ "username": counterpart.username,
+ "display_name": counterpart.display_name or counterpart.username,
+ "avatar_url": counterpart.avatar_url,
+ "avatar_thumbnail_url": counterpart.avatar_thumbnail_url,
+ }
+
+ def get_has_unread(self, obj: Thread) -> bool:
+ """Return whether the current user has unread incoming messages."""
+
+ participant_state = self._participant_state(obj)
+ last_read_at = participant_state.last_read_at if participant_state else None
+ current_user_id = self._current_user_id()
+ return any(
+ message.sender_id != current_user_id
+ and (last_read_at is None or message.created_at > last_read_at)
+ for message in self._messages(obj)
+ )
+
+ def get_last_message_preview(self, obj: Thread) -> str:
+ """Return a compact preview of the latest message body."""
+
+ messages = self._messages(obj)
+ if not messages:
+ return ""
+ return messages[0].body[:140]
+
+ def get_last_read_at(self, obj: Thread):
+ """Return the current participant's last-read timestamp."""
+
+ participant_state = self._participant_state(obj)
+ return participant_state.last_read_at if participant_state else None
+
+
+class ThreadCreateSerializer(serializers.Serializer):
+ """Validate the recipient and optional opening message for a new thread."""
+
+ recipient_user_id = serializers.IntegerField()
+ opening_message = serializers.CharField(
+ required=False, allow_blank=True, trim_whitespace=True
+ )
+
+ def validate_recipient_user_id(self, value: int) -> int:
+ """Require a real user distinct from the current sender."""
+
+ request = self.context["request"]
+ if value == request.user.pk:
+ raise serializers.ValidationError("You cannot message yourself.")
+
+ user_model = get_user_model()
+ if not user_model.objects.filter(pk=value).exists():
+ raise serializers.ValidationError("Recipient not found.")
+ return value
+
+ def validate(self, attrs: dict[str, object]) -> dict[str, object]:
+ """Require both users to share at least one project membership."""
+
+ request = self.context["request"]
+ recipient_user_id = cast(int, attrs["recipient_user_id"])
+ if not users_share_project(int(request.user.pk), recipient_user_id):
+ raise serializers.ValidationError(
+ {
+ "recipient_user_id": "You can only message users who share a project with you."
+ }
+ )
+ return attrs
+
+ def create(self, validated_data: dict[str, object]) -> Thread:
+ """Find or create the 1:1 thread and optionally add the opening message."""
+
+ request = self.context["request"]
+ recipient_user_id = cast(int, validated_data["recipient_user_id"])
+ opening_message = str(validated_data.get("opening_message", "")).strip()
+
+ thread = Thread.find_between_users(int(request.user.pk), recipient_user_id)
+ if thread is None:
+ thread = Thread.objects.create()
+ ThreadParticipant.objects.bulk_create(
+ [
+ ThreadParticipant(thread=thread, user=request.user),
+ ThreadParticipant(thread=thread, user_id=recipient_user_id),
+ ]
+ )
+
+ if opening_message:
+ message = DirectMessage.objects.create(
+ thread=thread,
+ sender=request.user,
+ body=opening_message,
+ )
+ thread.last_message_at = message.created_at
+ thread.save(update_fields=["last_message_at"])
+ ThreadParticipant.objects.filter(
+ thread=thread,
+ user=request.user,
+ ).update(last_read_at=message.created_at)
+ elif thread.last_message_at is None:
+ thread.last_message_at = timezone.now()
+ thread.save(update_fields=["last_message_at"])
+
+ return thread
+
+
+class DirectMessageCreateSerializer(serializers.Serializer):
+ """Validate a new outbound direct message body."""
+
+ body = serializers.CharField(trim_whitespace=True)
diff --git a/messaging/signals.py b/messaging/signals.py
new file mode 100644
index 00000000..74a7f2fe
--- /dev/null
+++ b/messaging/signals.py
@@ -0,0 +1,32 @@
+"""Signal handlers that broadcast new direct messages to live thread sessions."""
+
+from __future__ import annotations
+
+from asgiref.sync import async_to_sync
+from channels.layers import get_channel_layer
+from django.conf import settings
+from django.db.models.signals import post_save
+from django.dispatch import receiver
+
+from messaging.models import DirectMessage
+from messaging.realtime import serialize_message, thread_group_name
+
+
+@receiver(post_save, sender=DirectMessage)
+def broadcast_direct_message_created(sender, instance, created, **kwargs) -> None:
+ """Broadcast newly-created direct messages to the thread's live sessions."""
+
+ if kwargs.get("raw") or not created or not settings.MESSAGING_ENABLED:
+ return
+
+ channel_layer = get_channel_layer()
+ if channel_layer is None:
+ return
+
+ async_to_sync(channel_layer.group_send)(
+ thread_group_name(int(instance.thread_id)),
+ {
+ "type": "message.created",
+ "message": serialize_message(instance),
+ },
+ )
diff --git a/messaging/tests/__init__.py b/messaging/tests/__init__.py
new file mode 100644
index 00000000..2bee1b5b
--- /dev/null
+++ b/messaging/tests/__init__.py
@@ -0,0 +1 @@
+"""Messaging app test package."""
diff --git a/messaging/tests/test_api.py b/messaging/tests/test_api.py
new file mode 100644
index 00000000..c04d7b8c
--- /dev/null
+++ b/messaging/tests/test_api.py
@@ -0,0 +1,172 @@
+"""API tests for direct-message threads and messages."""
+
+from __future__ import annotations
+
+from typing import Any, cast
+
+from django.contrib.auth import get_user_model
+from django.db.models import Model
+from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APIClient, APITestCase
+
+from messaging.models import DirectMessage, Thread, ThreadParticipant
+from projects.models import Project, ProjectMembership, ProjectRole
+
+
+def _require_pk(instance: Model) -> int:
+ """Return a saved model primary key for typed test assertions."""
+
+ instance_pk = instance.pk
+ if instance_pk is None:
+ raise ValueError(f"{instance.__class__.__name__} must be saved first.")
+ return int(instance_pk)
+
+
+def _typed_client(client: object) -> APIClient:
+ """Cast the DRF client so type checkers see authentication helpers."""
+
+ return cast(APIClient, client)
+
+
+def _create_user(user_model: type[Any], **kwargs: object):
+ """Create one user through the custom manager with a typed escape hatch."""
+
+ return cast(Any, user_model.objects).create_user(**kwargs)
+
+
+class MessagingApiTests(APITestCase):
+ """Exercise the direct-message thread endpoints."""
+
+ def setUp(self):
+ user_model = get_user_model()
+ self.alice = _create_user(user_model, username="alice", password="testpass123")
+ self.bob = _create_user(user_model, username="bob", password="testpass123")
+ self.carol = _create_user(user_model, username="carol", password="testpass123")
+ self.shared_project = Project.objects.create(
+ name="Shared Project",
+ topic_description="Delivery",
+ )
+ self.private_project = Project.objects.create(
+ name="Private Project",
+ topic_description="Security",
+ )
+ ProjectMembership.objects.create(
+ user=self.alice,
+ project=self.shared_project,
+ role=ProjectRole.ADMIN,
+ )
+ ProjectMembership.objects.create(
+ user=self.bob,
+ project=self.shared_project,
+ role=ProjectRole.MEMBER,
+ )
+ ProjectMembership.objects.create(
+ user=self.carol,
+ project=self.private_project,
+ role=ProjectRole.ADMIN,
+ )
+ _typed_client(self.client).force_authenticate(self.alice)
+
+ def _create_thread(self) -> Thread:
+ thread = Thread.objects.create()
+ ThreadParticipant.objects.create(thread=thread, user=self.alice)
+ ThreadParticipant.objects.create(thread=thread, user=self.bob)
+ return thread
+
+ def test_thread_list_is_scoped_to_the_current_participant(self):
+ visible_thread = self._create_thread()
+ hidden_thread = Thread.objects.create()
+ ThreadParticipant.objects.create(thread=hidden_thread, user=self.bob)
+ ThreadParticipant.objects.create(thread=hidden_thread, user=self.carol)
+ DirectMessage.objects.create(
+ thread=visible_thread,
+ sender=self.bob,
+ body="Draft is ready.",
+ )
+
+ response = self.client.get(reverse("v1:messaging-thread-list"))
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(len(response.json()), 1)
+ payload = response.json()[0]
+ self.assertEqual(payload["id"], _require_pk(visible_thread))
+ self.assertEqual(payload["counterpart"]["username"], "bob")
+ self.assertEqual(payload["last_message_preview"], "Draft is ready.")
+ self.assertTrue(payload["has_unread"])
+
+ def test_thread_create_requires_a_shared_project(self):
+ response = self.client.post(
+ reverse("v1:messaging-thread-list"),
+ {"recipient_user_id": _require_pk(self.carol)},
+ format="json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+ self.assertEqual(response.json()["errors"][0]["attr"], "recipient_user_id")
+
+ def test_thread_create_creates_a_thread_and_optional_opening_message(self):
+ response = self.client.post(
+ reverse("v1:messaging-thread-list"),
+ {
+ "recipient_user_id": _require_pk(self.bob),
+ "opening_message": "Want to review this draft together?",
+ },
+ format="json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+ thread = Thread.objects.get(pk=response.json()["id"])
+ self.assertEqual(thread.participants.count(), 2)
+ self.assertEqual(thread.messages.count(), 1)
+ self.assertEqual(
+ thread.messages.get().body, "Want to review this draft together?"
+ )
+ self.assertEqual(response.json()["counterpart"]["username"], "bob")
+
+ def test_messages_action_lists_and_creates_messages_for_a_participant(self):
+ thread = self._create_thread()
+ DirectMessage.objects.create(
+ thread=thread, sender=self.bob, body="Initial note"
+ )
+
+ list_response = self.client.get(
+ reverse("v1:messaging-thread-messages", kwargs={"pk": _require_pk(thread)})
+ )
+
+ self.assertEqual(list_response.status_code, status.HTTP_200_OK)
+ self.assertEqual(len(list_response.json()), 1)
+ self.assertEqual(list_response.json()[0]["sender_username"], "bob")
+
+ create_response = self.client.post(
+ reverse("v1:messaging-thread-messages", kwargs={"pk": _require_pk(thread)}),
+ {"body": "Replying now."},
+ format="json",
+ )
+
+ self.assertEqual(create_response.status_code, status.HTTP_201_CREATED)
+ self.assertEqual(create_response.json()["sender_username"], "alice")
+ thread.refresh_from_db()
+ self.assertIsNotNone(thread.last_message_at)
+
+ def test_read_action_updates_the_current_users_last_read_cursor(self):
+ thread = self._create_thread()
+ message = DirectMessage.objects.create(
+ thread=thread,
+ sender=self.bob,
+ body="Unread message",
+ )
+ thread.last_message_at = message.created_at
+ thread.save(update_fields=["last_message_at"])
+
+ response = self.client.post(
+ reverse("v1:messaging-thread-read", kwargs={"pk": _require_pk(thread)}),
+ format="json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ participant_state = ThreadParticipant.objects.get(
+ thread=thread, user=self.alice
+ )
+ self.assertEqual(response.json()["thread_id"], _require_pk(thread))
+ self.assertIsNotNone(participant_state.last_read_at)
diff --git a/messaging/tests/test_signals.py b/messaging/tests/test_signals.py
new file mode 100644
index 00000000..2fece4bc
--- /dev/null
+++ b/messaging/tests/test_signals.py
@@ -0,0 +1,70 @@
+"""Signal tests for websocket fan-out of new direct messages."""
+
+from __future__ import annotations
+
+from types import SimpleNamespace
+from unittest.mock import Mock, patch
+
+from django.contrib.auth import get_user_model
+from django.test import TestCase, override_settings
+
+from messaging.models import DirectMessage, Thread, ThreadParticipant
+from projects.models import Project, ProjectMembership, ProjectRole
+
+
+@override_settings(MESSAGING_ENABLED=True)
+class DirectMessageSignalTests(TestCase):
+ """Verify newly created direct messages emit the expected channel-layer event."""
+
+ def setUp(self) -> None:
+ user_model = get_user_model()
+ self.sender = user_model.objects.create_user(
+ username="signal-sender",
+ password="testpass123",
+ )
+ self.recipient = user_model.objects.create_user(
+ username="signal-recipient",
+ password="testpass123",
+ )
+ self.project = Project.objects.create(
+ name="Signal Project",
+ topic_description="Realtime",
+ )
+ ProjectMembership.objects.create(
+ project=self.project,
+ user=self.sender,
+ role=ProjectRole.ADMIN,
+ )
+ ProjectMembership.objects.create(
+ project=self.project,
+ user=self.recipient,
+ role=ProjectRole.MEMBER,
+ )
+ self.thread = Thread.objects.create()
+ ThreadParticipant.objects.create(thread=self.thread, user=self.sender)
+ ThreadParticipant.objects.create(thread=self.thread, user=self.recipient)
+
+ def test_direct_message_create_broadcasts_to_thread_group(self) -> None:
+ send_mock = Mock()
+ fake_channel_layer = SimpleNamespace(group_send=object())
+
+ with (
+ patch(
+ "messaging.signals.get_channel_layer",
+ return_value=fake_channel_layer,
+ ),
+ patch("messaging.signals.async_to_sync", return_value=send_mock),
+ ):
+ message = DirectMessage.objects.create(
+ thread=self.thread,
+ sender=self.sender,
+ body="Draft is ready for review.",
+ )
+
+ send_mock.assert_called_once()
+ group_name, event = send_mock.call_args.args
+ self.assertEqual(group_name, f"thread.{self.thread.pk}")
+ self.assertEqual(event["type"], "message.created")
+ self.assertEqual(event["message"]["id"], int(message.pk))
+ self.assertEqual(event["message"]["thread"], int(self.thread.pk))
+ self.assertEqual(event["message"]["body"], "Draft is ready for review.")
diff --git a/newsletter_maker/asgi.py b/newsletter_maker/asgi.py
index 8f0cab98..ae5d4026 100644
--- a/newsletter_maker/asgi.py
+++ b/newsletter_maker/asgi.py
@@ -9,12 +9,32 @@
import os
+from channels.auth import AuthMiddlewareStack
+from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
+from messaging.routing import websocket_urlpatterns as messaging_websocket_urlpatterns
from newsletter_maker.telemetry import configure_telemetry
+from notifications.routing import (
+ websocket_urlpatterns as notification_websocket_urlpatterns,
+)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "newsletter_maker.settings")
configure_telemetry(instrument_django=True)
-application = get_asgi_application()
+django_asgi_application = get_asgi_application()
+
+application = ProtocolTypeRouter(
+ {
+ "http": django_asgi_application,
+ "websocket": AuthMiddlewareStack(
+ URLRouter(
+ [
+ *notification_websocket_urlpatterns,
+ *messaging_websocket_urlpatterns,
+ ]
+ )
+ ),
+ }
+)
diff --git a/newsletter_maker/settings/__init__.py b/newsletter_maker/settings/__init__.py
index 2498133f..4d1eb1aa 100644
--- a/newsletter_maker/settings/__init__.py
+++ b/newsletter_maker/settings/__init__.py
@@ -27,11 +27,15 @@
ALLOWED_HOSTS,
ANYMAIL,
ANYMAIL_WEBHOOK_SECRET,
+ ASGI_APPLICATION,
AUTH_PASSWORD_VALIDATORS,
AUTH_USER_MODEL,
AUTHENTICATION_BACKENDS,
BASE_DIR,
BLUESKY_CREDENTIALS_ENCRYPTION_KEY,
+ CHANNEL_LAYER_PREFIX,
+ CHANNEL_LAYER_URL,
+ CHANNEL_LAYERS,
CSRF_TRUSTED_ORIGINS,
DATABASE_URL,
DATABASES,
@@ -49,6 +53,7 @@
LINKEDIN_OAUTH_SCOPES,
MEDIA_ROOT,
MEDIA_URL,
+ MESSAGING_ENABLED,
METRICS_TOKEN,
MIDDLEWARE,
NEWSLETTER_API_BASE_URL,
@@ -116,6 +121,9 @@
"AUTH_PASSWORD_VALIDATORS",
"BASE_DIR",
"BLUESKY_CREDENTIALS_ENCRYPTION_KEY",
+ "ASGI_APPLICATION",
+ "CHANNEL_LAYER_PREFIX",
+ "CHANNEL_LAYER_URL",
"CELERY_BEAT_SCHEDULE",
"CELERY_BROKER_URL",
"CELERY_RESULT_BACKEND",
@@ -123,6 +131,7 @@
"CELERY_WORKER_REDIRECT_STDOUTS_LEVEL",
"CELERY_TASK_SOFT_TIME_LIMIT",
"CELERY_TASK_TIME_LIMIT",
+ "CHANNEL_LAYERS",
"CSRF_TRUSTED_ORIGINS",
"DATABASES",
"DATABASE_URL",
@@ -144,6 +153,7 @@
"LINKEDIN_OAUTH_SCOPES",
"LOGGING",
"LOG_LEVEL",
+ "MESSAGING_ENABLED",
"MIDDLEWARE",
"MEDIA_ROOT",
"MEDIA_URL",
diff --git a/newsletter_maker/settings/base.py b/newsletter_maker/settings/base.py
index f8fb3e0d..00a1210c 100644
--- a/newsletter_maker/settings/base.py
+++ b/newsletter_maker/settings/base.py
@@ -45,6 +45,9 @@ def env_list(name: str, default: str = "") -> list[str]:
FRONTEND_BASE_URL = os.getenv("FRONTEND_BASE_URL", "http://127.0.0.1:3000")
METRICS_TOKEN = os.getenv("METRICS_TOKEN", "")
OTEL_ENABLED = env_bool("OTEL_ENABLED", default=False)
+MESSAGING_ENABLED = env_bool("MESSAGING_ENABLED", default=False)
+CHANNEL_LAYER_URL = os.getenv("CHANNEL_LAYER_URL", "")
+CHANNEL_LAYER_PREFIX = os.getenv("CHANNEL_LAYER_PREFIX", "newsletter-maker")
OTEL_SERVICE_NAME = os.getenv("OTEL_SERVICE_NAME", "newsletter-maker")
OTEL_SERVICE_NAMESPACE = os.getenv("OTEL_SERVICE_NAMESPACE", "newsletter-maker")
OTEL_EXPORTER_OTLP_ENDPOINT = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT", "")
@@ -106,6 +109,7 @@ def env_list(name: str, default: str = "") -> list[str]:
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.sites", # Required for allauth
+ "channels",
# 4. Third-Party Authentication & API Tools
"rest_framework",
"rest_framework.authtoken",
@@ -130,6 +134,8 @@ def env_list(name: str, default: str = "") -> list[str]:
"newsletters",
"pipeline",
"trends",
+ "notifications",
+ "messaging",
"core",
]
@@ -145,6 +151,7 @@ def env_list(name: str, default: str = "") -> list[str]:
]
ROOT_URLCONF = "newsletter_maker.urls"
+ASGI_APPLICATION = "newsletter_maker.asgi.application"
TEMPLATES = [
{
@@ -163,6 +170,23 @@ def env_list(name: str, default: str = "") -> list[str]:
WSGI_APPLICATION = "newsletter_maker.wsgi.application"
+if CHANNEL_LAYER_URL:
+ CHANNEL_LAYERS = {
+ "default": {
+ "BACKEND": "channels_redis.core.RedisChannelLayer",
+ "CONFIG": {
+ "hosts": [CHANNEL_LAYER_URL],
+ "prefix": f"{CHANNEL_LAYER_PREFIX}:channels",
+ },
+ }
+ }
+else:
+ CHANNEL_LAYERS = {
+ "default": {
+ "BACKEND": "channels.layers.InMemoryChannelLayer",
+ }
+ }
+
DATABASES = {"default": dj_database_url.parse(DATABASE_URL, conn_max_age=600)}
AUTH_PASSWORD_VALIDATORS = [
@@ -255,6 +279,8 @@ def env_list(name: str, default: str = "") -> list[str]:
"NEWSLETTER_API_BASE_URL",
"FRONTEND_BASE_URL",
"BLUESKY_CREDENTIALS_ENCRYPTION_KEY",
+ "CHANNEL_LAYER_PREFIX",
+ "CHANNEL_LAYER_URL",
"LINKEDIN_CREDENTIALS_ENCRYPTION_KEY",
"LINKEDIN_CLIENT_ID",
"LINKEDIN_CLIENT_SECRET",
@@ -273,6 +299,7 @@ def env_list(name: str, default: str = "") -> list[str]:
"MIDDLEWARE",
"ROOT_URLCONF",
"TEMPLATES",
+ "ASGI_APPLICATION",
"WSGI_APPLICATION",
"DATABASES",
"AUTH_PASSWORD_VALIDATORS",
@@ -297,8 +324,10 @@ def env_list(name: str, default: str = "") -> list[str]:
"AWS_S3_FILE_OVERWRITE",
"MEDIA_URL",
"MEDIA_ROOT",
+ "MESSAGING_ENABLED",
"REST_FRAMEWORK",
"DRF_STANDARDIZED_ERRORS",
+ "CHANNEL_LAYERS",
"SECURE_PROXY_SSL_HEADER",
"USE_X_FORWARDED_HOST",
"DEFAULT_AUTO_FIELD",
diff --git a/newsletter_maker/telemetry.py b/newsletter_maker/telemetry.py
index 7a9ea168..d39e58d2 100644
--- a/newsletter_maker/telemetry.py
+++ b/newsletter_maker/telemetry.py
@@ -4,12 +4,15 @@
import logging
from contextlib import contextmanager
-from typing import Any, Iterator, Mapping
+from typing import TYPE_CHECKING, Any, Iterator, Mapping
from django.conf import settings
logger = logging.getLogger(__name__)
+if TYPE_CHECKING:
+ from opentelemetry.trace import TracerProvider as ApiTracerProvider
+
_PROVIDER_CONFIGURED = False
_DJANGO_INSTRUMENTED = False
_CELERY_INSTRUMENTED = False
@@ -85,8 +88,8 @@ def configure_telemetry(
"service.namespace": settings.OTEL_SERVICE_NAMESPACE,
}
)
- tracer_provider = TracerProvider(resource=resource)
- tracer_provider.add_span_processor(
+ sdk_tracer_provider = TracerProvider(resource=resource)
+ sdk_tracer_provider.add_span_processor(
BatchSpanProcessor(
OTLPSpanExporter(
endpoint=settings.OTEL_EXPORTER_OTLP_ENDPOINT,
@@ -95,10 +98,10 @@ def configure_telemetry(
)
)
)
- trace.set_tracer_provider(tracer_provider)
+ trace.set_tracer_provider(sdk_tracer_provider)
_PROVIDER_CONFIGURED = True
- tracer_provider = trace.get_tracer_provider()
+ tracer_provider: ApiTracerProvider = trace.get_tracer_provider()
if instrument_django and not _DJANGO_INSTRUMENTED:
DjangoInstrumentor().instrument(tracer_provider=tracer_provider)
diff --git a/newsletters/tasks.py b/newsletters/tasks.py
index f7fa3324..badd2e82 100644
--- a/newsletters/tasks.py
+++ b/newsletters/tasks.py
@@ -21,10 +21,14 @@
from newsletters.models import (
IntakeAllowlist,
NewsletterDraft,
+ NewsletterDraftSection,
+ NewsletterDraftStatus,
NewsletterIntake,
NewsletterIntakeStatus,
)
-from projects.models import ProjectConfig
+from notifications.emit import notify_project_admins
+from notifications.models import NotificationLevel
+from projects.models import Project, ProjectConfig
class DelayedTask(Protocol):
@@ -144,7 +148,40 @@ def generate_newsletter_draft(
) -> dict[str, object]:
"""Compose one newsletter draft from accepted trend inputs."""
- return compose_newsletter_draft(project_id, trigger_source=trigger_source)
+ project = Project.objects.get(pk=project_id)
+ try:
+ result = compose_newsletter_draft(project_id, trigger_source=trigger_source)
+ except Exception as exc:
+ notify_project_admins(
+ project,
+ level=NotificationLevel.ERROR,
+ body="Newsletter draft generation failed.",
+ link_path="/drafts",
+ metadata={
+ "project_id": project_id,
+ "trigger_source": trigger_source,
+ "error": str(exc),
+ },
+ )
+ raise
+
+ draft_id = result.get("draft_id")
+ if result.get("status") == NewsletterDraftStatus.READY and isinstance(
+ draft_id, int
+ ):
+ notify_project_admins(
+ project,
+ level=NotificationLevel.SUCCESS,
+ body="Newsletter draft is ready.",
+ link_path=f"/drafts/{draft_id}",
+ metadata={
+ "project_id": project_id,
+ "draft_id": draft_id,
+ "trigger_source": trigger_source,
+ "status": str(result.get("status", "")),
+ },
+ )
+ return result
@shared_task(name="core.tasks.run_all_scheduled_newsletter_drafts")
@@ -191,7 +228,42 @@ def run_all_scheduled_newsletter_drafts() -> dict[str, int]:
def regenerate_newsletter_draft_section(section_id: int) -> dict[str, object]:
"""Recompose one newsletter draft section in isolation."""
- return compose_newsletter_draft_section(section_id)
+ section = NewsletterDraftSection.objects.select_related("draft__project").get(
+ pk=section_id
+ )
+ project = section.draft.project
+ draft_id = _require_pk(section.draft)
+ try:
+ result = compose_newsletter_draft_section(section_id)
+ except Exception as exc:
+ notify_project_admins(
+ project,
+ level=NotificationLevel.ERROR,
+ body="Newsletter draft section regeneration failed.",
+ link_path=f"/drafts/{draft_id}",
+ metadata={
+ "project_id": _require_pk(project),
+ "draft_id": draft_id,
+ "section_id": section_id,
+ "error": str(exc),
+ },
+ )
+ raise
+
+ if result.get("status") == "completed":
+ notify_project_admins(
+ project,
+ level=NotificationLevel.SUCCESS,
+ body="Newsletter draft section refreshed.",
+ link_path=f"/drafts/{draft_id}",
+ metadata={
+ "project_id": _require_pk(project),
+ "draft_id": draft_id,
+ "section_id": section_id,
+ "status": str(result.get("status", "")),
+ },
+ )
+ return result
def _project_has_scheduled_draft_today(project_id: int, *, now) -> bool:
diff --git a/newsletters/tests/test_tasks.py b/newsletters/tests/test_tasks.py
index c84968ae..69a265ef 100644
--- a/newsletters/tests/test_tasks.py
+++ b/newsletters/tests/test_tasks.py
@@ -1,6 +1,7 @@
from datetime import timedelta
import pytest
+from django.contrib.auth import get_user_model
from django.utils import timezone
from content.models import Content
@@ -8,15 +9,21 @@
generate_newsletter_draft,
regenerate_newsletter_draft_section,
)
-from newsletters.tasks import run_all_scheduled_newsletter_drafts
from newsletters.models import (
NewsletterDraft,
NewsletterDraftItem,
- NewsletterDraftOriginalPiece,
NewsletterDraftSection,
NewsletterDraftStatus,
)
-from projects.models import Project, ProjectConfig
+from newsletters.tasks import (
+ generate_newsletter_draft as run_generate_newsletter_draft,
+)
+from newsletters.tasks import (
+ regenerate_newsletter_draft_section as run_regenerate_newsletter_draft_section,
+)
+from newsletters.tasks import run_all_scheduled_newsletter_drafts
+from notifications.models import Notification, NotificationLevel
+from projects.models import Project, ProjectConfig, ProjectMembership, ProjectRole
from trends.models import (
ContentClusterMembership,
OriginalContentIdea,
@@ -52,6 +59,17 @@ def _make_content(
)
+def _make_project_admin(project: Project, *, username: str):
+ user_model = get_user_model()
+ user = user_model.objects.create_user(username=username, password="testpass123")
+ ProjectMembership.objects.create(
+ user=user,
+ project=project,
+ role=ProjectRole.ADMIN,
+ )
+ return user
+
+
def test_generate_newsletter_draft_builds_tree_and_renderings(settings):
settings.OPENROUTER_API_KEY = ""
project = Project.objects.create(
@@ -244,6 +262,152 @@ def test_regenerate_newsletter_draft_section_replaces_items_and_marks_draft_edit
assert section.items.first().summary_used != "Old summary"
+def test_task_generate_newsletter_draft_notifies_project_admins_on_success(
+ settings, mocker
+):
+ settings.MESSAGING_ENABLED = True
+ project = Project.objects.create(
+ name="Task Project",
+ topic_description="Platform engineering",
+ )
+ _make_project_admin(project, username="admin-one")
+ _make_project_admin(project, username="admin-two")
+ compose_mock = mocker.patch(
+ "newsletters.tasks.compose_newsletter_draft",
+ return_value={
+ "project_id": _require_pk(project),
+ "draft_id": 42,
+ "status": NewsletterDraftStatus.READY,
+ "sections_created": 2,
+ "original_pieces_created": 1,
+ },
+ )
+
+ result = run_generate_newsletter_draft(
+ _require_pk(project), trigger_source="manual"
+ )
+
+ compose_mock.assert_called_once_with(_require_pk(project), trigger_source="manual")
+ assert result["draft_id"] == 42
+ notifications = list(Notification.objects.order_by("user__username"))
+ assert len(notifications) == 2
+ assert all(
+ notification.level == NotificationLevel.SUCCESS
+ for notification in notifications
+ )
+ assert {notification.link_path for notification in notifications} == {"/drafts/42"}
+ assert notifications[0].metadata["draft_id"] == 42
+
+
+def test_task_generate_newsletter_draft_notifies_project_admins_on_failure(
+ settings, mocker
+):
+ settings.MESSAGING_ENABLED = True
+ project = Project.objects.create(
+ name="Task Failure Project",
+ topic_description="Platform engineering",
+ )
+ _make_project_admin(project, username="admin-one")
+ mocker.patch(
+ "newsletters.tasks.compose_newsletter_draft",
+ side_effect=RuntimeError("LLM provider unavailable"),
+ )
+
+ with pytest.raises(RuntimeError, match="LLM provider unavailable"):
+ run_generate_newsletter_draft(_require_pk(project), trigger_source="scheduled")
+
+ notification = Notification.objects.get()
+ assert notification.level == NotificationLevel.ERROR
+ assert notification.body == "Newsletter draft generation failed."
+ assert notification.link_path == "/drafts"
+ assert notification.metadata["project_id"] == _require_pk(project)
+ assert notification.metadata["trigger_source"] == "scheduled"
+ assert notification.metadata["error"] == "LLM provider unavailable"
+
+
+def test_task_regenerate_newsletter_draft_section_notifies_project_admins_on_success(
+ settings, mocker
+):
+ settings.MESSAGING_ENABLED = True
+ project = Project.objects.create(
+ name="Section Task Project",
+ topic_description="Platform engineering",
+ )
+ _make_project_admin(project, username="admin-one")
+ draft = NewsletterDraft.objects.create(
+ project=project,
+ title="Draft",
+ intro="Intro",
+ outro="Outro",
+ status=NewsletterDraftStatus.READY,
+ generation_metadata={"source_theme_ids": [], "source_idea_ids": []},
+ )
+ section = NewsletterDraftSection.objects.create(
+ draft=draft,
+ title="Old title",
+ lede="Old lede",
+ order=0,
+ )
+ compose_mock = mocker.patch(
+ "newsletters.tasks.compose_newsletter_draft_section",
+ return_value={
+ "project_id": _require_pk(project),
+ "draft_id": _require_pk(draft),
+ "section_id": _require_pk(section),
+ "status": "completed",
+ },
+ )
+
+ result = run_regenerate_newsletter_draft_section(_require_pk(section))
+
+ compose_mock.assert_called_once_with(_require_pk(section))
+ assert result["status"] == "completed"
+ notification = Notification.objects.get()
+ assert notification.level == NotificationLevel.SUCCESS
+ assert notification.body == "Newsletter draft section refreshed."
+ assert notification.link_path == f"/drafts/{_require_pk(draft)}"
+ assert notification.metadata["section_id"] == _require_pk(section)
+
+
+def test_task_regenerate_newsletter_draft_section_notifies_project_admins_on_failure(
+ settings, mocker
+):
+ settings.MESSAGING_ENABLED = True
+ project = Project.objects.create(
+ name="Section Failure Project",
+ topic_description="Platform engineering",
+ )
+ _make_project_admin(project, username="admin-one")
+ draft = NewsletterDraft.objects.create(
+ project=project,
+ title="Draft",
+ intro="Intro",
+ outro="Outro",
+ status=NewsletterDraftStatus.READY,
+ generation_metadata={"source_theme_ids": [], "source_idea_ids": []},
+ )
+ section = NewsletterDraftSection.objects.create(
+ draft=draft,
+ title="Old title",
+ lede="Old lede",
+ order=0,
+ )
+ mocker.patch(
+ "newsletters.tasks.compose_newsletter_draft_section",
+ side_effect=RuntimeError("section composition failed"),
+ )
+
+ with pytest.raises(RuntimeError, match="section composition failed"):
+ run_regenerate_newsletter_draft_section(_require_pk(section))
+
+ notification = Notification.objects.get()
+ assert notification.level == NotificationLevel.ERROR
+ assert notification.body == "Newsletter draft section regeneration failed."
+ assert notification.link_path == f"/drafts/{_require_pk(draft)}"
+ assert notification.metadata["section_id"] == _require_pk(section)
+ assert notification.metadata["error"] == "section composition failed"
+
+
def test_run_all_scheduled_newsletter_drafts_executes_due_projects_inline(
settings, mocker
):
diff --git a/notifications/__init__.py b/notifications/__init__.py
new file mode 100644
index 00000000..6bdbddcd
--- /dev/null
+++ b/notifications/__init__.py
@@ -0,0 +1 @@
+"""Notifications app for persistent user-facing alerts."""
diff --git a/notifications/admin.py b/notifications/admin.py
new file mode 100644
index 00000000..61d9eb8e
--- /dev/null
+++ b/notifications/admin.py
@@ -0,0 +1,25 @@
+"""Admin registrations for persistent notifications."""
+
+from django.contrib import admin
+from django.utils import timezone
+
+from notifications.models import Notification
+
+
+@admin.action(description="Mark selected notifications as read")
+def mark_notifications_read(modeladmin, request, queryset):
+ """Bulk-mark the selected notifications as read."""
+
+ queryset.filter(read_at__isnull=True).update(read_at=timezone.now())
+
+
+@admin.register(Notification)
+class NotificationAdmin(admin.ModelAdmin):
+ """Read-mostly admin configuration for the notification inbox."""
+
+ actions = [mark_notifications_read]
+ list_display = ["id", "user", "project", "level", "body", "created_at", "read_at"]
+ list_filter = ["level", "read_at", "created_at"]
+ search_fields = ["user__username", "user__email", "body"]
+ autocomplete_fields = ["user", "project"]
+ ordering = ["-created_at"]
diff --git a/notifications/api.py b/notifications/api.py
new file mode 100644
index 00000000..019c3edc
--- /dev/null
+++ b/notifications/api.py
@@ -0,0 +1,100 @@
+"""User-scoped REST endpoints for persistent notifications."""
+
+from __future__ import annotations
+
+from django.utils import timezone
+from drf_spectacular.utils import (
+ OpenApiResponse,
+ extend_schema,
+ extend_schema_view,
+ inline_serializer,
+)
+from rest_framework import mixins, serializers, status, viewsets
+from rest_framework.decorators import action
+from rest_framework.response import Response
+
+from core.api import AUTHENTICATION_REQUIRED_RESPONSE
+from notifications.models import Notification
+from notifications.serializers import NotificationSerializer
+
+READ_ALL_RESPONSE = inline_serializer(
+ name="NotificationsReadAllResponse",
+ fields={
+ "updated_count": serializers.IntegerField(),
+ },
+)
+
+
+@extend_schema_view(
+ list=extend_schema(
+ summary="List notifications",
+ description="Return the current user's persistent notifications, newest first.",
+ tags=["Notifications"],
+ responses={
+ 200: NotificationSerializer(many=True),
+ 403: AUTHENTICATION_REQUIRED_RESPONSE,
+ },
+ ),
+ destroy=extend_schema(
+ summary="Delete notification",
+ description="Delete one notification from the current user's inbox.",
+ tags=["Notifications"],
+ responses={
+ 204: OpenApiResponse(description="Notification deleted."),
+ 403: AUTHENTICATION_REQUIRED_RESPONSE,
+ },
+ ),
+)
+class NotificationViewSet(
+ mixins.ListModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet
+):
+ """List and manage the authenticated user's notifications."""
+
+ serializer_class = NotificationSerializer
+ http_method_names = ["get", "post", "delete", "head", "options"]
+ queryset = Notification.objects.select_related("project")
+
+ def get_queryset(self):
+ """Scope notifications to the authenticated user and optional unread filter."""
+
+ queryset = self.queryset.filter(user=self.request.user)
+ unread_value = self.request.query_params.get("unread", "")
+ if unread_value.lower() in {"1", "true", "yes", "on"}:
+ queryset = queryset.filter(read_at__isnull=True)
+ return queryset
+
+ @extend_schema(
+ summary="Mark notification as read",
+ description="Set `read_at` for one notification owned by the current user.",
+ tags=["Notifications"],
+ request=None,
+ responses={200: NotificationSerializer, 403: AUTHENTICATION_REQUIRED_RESPONSE},
+ )
+ @action(detail=True, methods=["post"], url_path="read")
+ def read(self, request, *args, **kwargs):
+ """Mark one notification as read and return the updated payload."""
+
+ notification = self.get_object()
+ if notification.read_at is None:
+ notification.read_at = timezone.now()
+ notification.save(update_fields=["read_at"])
+ serializer = self.get_serializer(notification)
+ return Response(serializer.data)
+
+ @extend_schema(
+ summary="Mark all notifications as read",
+ description="Set `read_at` for every unread notification owned by the current user.",
+ tags=["Notifications"],
+ request=None,
+ responses={200: READ_ALL_RESPONSE, 403: AUTHENTICATION_REQUIRED_RESPONSE},
+ )
+ @action(detail=False, methods=["post"], url_path="read-all")
+ def read_all(self, request, *args, **kwargs):
+ """Mark every unread notification as read for the current user."""
+
+ updated_count = (
+ self.get_queryset()
+ .filter(read_at__isnull=True)
+ .update(read_at=timezone.now())
+ )
+ return Response({"updated_count": updated_count}, status=status.HTTP_200_OK)
diff --git a/notifications/api_urls.py b/notifications/api_urls.py
new file mode 100644
index 00000000..7862692a
--- /dev/null
+++ b/notifications/api_urls.py
@@ -0,0 +1,11 @@
+"""API route registration for top-level notification resources."""
+
+from rest_framework.routers import DefaultRouter
+
+from notifications.api import NotificationViewSet
+
+
+def register_root_routes(router: DefaultRouter) -> None:
+ """Register top-level current-user notification endpoints."""
+
+ router.register("notifications", NotificationViewSet, basename="notification")
diff --git a/notifications/apps.py b/notifications/apps.py
new file mode 100644
index 00000000..02ac275a
--- /dev/null
+++ b/notifications/apps.py
@@ -0,0 +1,13 @@
+"""Application configuration for the notifications app."""
+
+from django.apps import AppConfig
+
+
+class NotificationsConfig(AppConfig):
+ """App config for persistent user-facing notifications."""
+
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "notifications"
+
+ def ready(self) -> None:
+ import notifications.signals # noqa: F401
diff --git a/notifications/consumers.py b/notifications/consumers.py
new file mode 100644
index 00000000..e335575a
--- /dev/null
+++ b/notifications/consumers.py
@@ -0,0 +1,46 @@
+"""WebSocket consumers for live notification delivery."""
+
+from __future__ import annotations
+
+from channels.generic.websocket import AsyncJsonWebsocketConsumer
+from django.conf import settings
+
+from notifications.realtime import notification_group_name
+
+
+class NotificationConsumer(AsyncJsonWebsocketConsumer):
+ """Stream new notifications to the authenticated user's browser session."""
+
+ group_name: str | None = None
+
+ async def connect(self) -> None:
+ """Authenticate the websocket and subscribe it to the user's group."""
+
+ if not getattr(settings, "MESSAGING_ENABLED", False):
+ await self.close(code=4404)
+ return
+
+ user = self.scope.get("user")
+ if user is None or not user.is_authenticated:
+ await self.close(code=4401)
+ return
+
+ self.group_name = notification_group_name(int(user.pk))
+ await self.channel_layer.group_add(self.group_name, self.channel_name)
+ await self.accept()
+
+ async def disconnect(self, close_code: int) -> None:
+ """Remove the websocket from its channel-layer group on disconnect."""
+
+ if self.group_name is not None:
+ await self.channel_layer.group_discard(self.group_name, self.channel_name)
+
+ async def notification_created(self, event: dict[str, object]) -> None:
+ """Send the created-notification event payload to the browser client."""
+
+ await self.send_json(
+ {
+ "type": "notification.created",
+ "notification": event["notification"],
+ }
+ )
diff --git a/notifications/emit.py b/notifications/emit.py
new file mode 100644
index 00000000..93154dfb
--- /dev/null
+++ b/notifications/emit.py
@@ -0,0 +1,62 @@
+"""Helpers for emitting persistent user notifications from backend workflows."""
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from typing import Any
+
+from django.conf import settings
+
+from notifications.models import Notification, NotificationLevel
+from projects.models import ProjectRole
+
+
+def notify(
+ user,
+ *,
+ level: str = NotificationLevel.INFO,
+ body: str,
+ link_path: str = "",
+ project=None,
+ metadata: Mapping[str, Any] | None = None,
+) -> Notification | None:
+ """Create a persistent notification when messaging is enabled."""
+
+ if not getattr(settings, "MESSAGING_ENABLED", False):
+ return None
+ return Notification.objects.create(
+ user=user,
+ project=project,
+ level=level,
+ body=body,
+ link_path=link_path,
+ metadata=dict(metadata or {}),
+ )
+
+
+def notify_project_admins(
+ project,
+ *,
+ level: str = NotificationLevel.INFO,
+ body: str,
+ link_path: str = "",
+ metadata: Mapping[str, Any] | None = None,
+) -> int:
+ """Create one notification for each admin member of a project."""
+
+ created_count = 0
+ memberships = project.memberships.select_related("user").filter(
+ role=ProjectRole.ADMIN
+ )
+ for membership in memberships:
+ created = notify(
+ membership.user,
+ level=level,
+ body=body,
+ link_path=link_path,
+ project=project,
+ metadata=metadata,
+ )
+ if created is not None:
+ created_count += 1
+ return created_count
diff --git a/notifications/migrations/0001_initial.py b/notifications/migrations/0001_initial.py
new file mode 100644
index 00000000..352999b0
--- /dev/null
+++ b/notifications/migrations/0001_initial.py
@@ -0,0 +1,81 @@
+# Generated by Django 6.0.4 on 2026-05-03 00:00
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ initial = True
+
+ dependencies = [
+ ("projects", "0009_projectconfig_draft_schedule_cron"),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="Notification",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ (
+ "level",
+ models.CharField(
+ choices=[
+ ("info", "Info"),
+ ("success", "Success"),
+ ("error", "Error"),
+ ],
+ default="info",
+ max_length=16,
+ ),
+ ),
+ ("body", models.CharField(max_length=512)),
+ ("link_path", models.CharField(blank=True, default="", max_length=512)),
+ ("metadata", models.JSONField(blank=True, default=dict)),
+ ("created_at", models.DateTimeField(auto_now_add=True)),
+ ("read_at", models.DateTimeField(blank=True, null=True)),
+ (
+ "project",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="notifications",
+ to="projects.project",
+ ),
+ ),
+ (
+ "user",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="notifications",
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ options={
+ "ordering": ["-created_at"],
+ },
+ ),
+ migrations.AddIndex(
+ model_name="notification",
+ index=models.Index(
+ fields=["user", "-created_at"], name="notificatio_user_id_57cf6a_idx"
+ ),
+ ),
+ migrations.AddIndex(
+ model_name="notification",
+ index=models.Index(
+ fields=["user", "read_at"], name="notificatio_user_id_261d6f_idx"
+ ),
+ ),
+ ]
diff --git a/notifications/models.py b/notifications/models.py
new file mode 100644
index 00000000..cbd64061
--- /dev/null
+++ b/notifications/models.py
@@ -0,0 +1,57 @@
+"""Persistent notification records for the user-facing inbox."""
+
+from __future__ import annotations
+
+from django.conf import settings
+from django.db import models
+
+
+class NotificationLevel(models.TextChoices):
+ """Supported severity levels for frontend notification rendering."""
+
+ INFO = "info", "Info"
+ SUCCESS = "success", "Success"
+ ERROR = "error", "Error"
+
+
+class Notification(models.Model):
+ """Persist one user-facing notification emitted by backend workflows."""
+
+ user = models.ForeignKey(
+ settings.AUTH_USER_MODEL,
+ on_delete=models.CASCADE,
+ related_name="notifications",
+ )
+ project = models.ForeignKey(
+ "projects.Project",
+ on_delete=models.CASCADE,
+ related_name="notifications",
+ null=True,
+ blank=True,
+ )
+ level = models.CharField(
+ max_length=16,
+ choices=NotificationLevel.choices,
+ default=NotificationLevel.INFO,
+ )
+ body = models.CharField(max_length=512)
+ link_path = models.CharField(max_length=512, blank=True, default="")
+ metadata = models.JSONField(default=dict, blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+ read_at = models.DateTimeField(null=True, blank=True)
+
+ class Meta:
+ ordering = ["-created_at"]
+ indexes = [
+ models.Index(fields=["user", "-created_at"]),
+ models.Index(fields=["user", "read_at"]),
+ ]
+
+ def __str__(self) -> str:
+ return f"{self.user}: {self.level} - {self.body[:40]}"
+
+ @property
+ def is_read(self) -> bool:
+ """Return whether the notification has been marked as read."""
+
+ return self.read_at is not None
diff --git a/notifications/realtime.py b/notifications/realtime.py
new file mode 100644
index 00000000..5d933de7
--- /dev/null
+++ b/notifications/realtime.py
@@ -0,0 +1,16 @@
+"""Realtime notification helpers shared by signals and consumers."""
+
+from notifications.models import Notification
+from notifications.serializers import NotificationSerializer
+
+
+def notification_group_name(user_id: int) -> str:
+ """Return the channel-layer group name for one user's notification stream."""
+
+ return f"notif.{user_id}"
+
+
+def serialize_notification(notification: Notification) -> dict[str, object]:
+ """Return the websocket payload for a persisted notification row."""
+
+ return NotificationSerializer(notification).data
diff --git a/notifications/routing.py b/notifications/routing.py
new file mode 100644
index 00000000..0c13d170
--- /dev/null
+++ b/notifications/routing.py
@@ -0,0 +1,9 @@
+"""WebSocket routes for the notifications app."""
+
+from django.urls import path
+
+from notifications.consumers import NotificationConsumer
+
+websocket_urlpatterns = [
+ path("ws/notifications/", NotificationConsumer.as_asgi()),
+]
diff --git a/notifications/serializers.py b/notifications/serializers.py
new file mode 100644
index 00000000..aef86f79
--- /dev/null
+++ b/notifications/serializers.py
@@ -0,0 +1,31 @@
+"""DRF serializers for persistent user notifications."""
+
+from rest_framework import serializers
+
+from notifications.models import Notification
+
+
+class NotificationSerializer(serializers.ModelSerializer):
+ """Serialize notification rows for the current authenticated user."""
+
+ is_read = serializers.SerializerMethodField()
+
+ class Meta:
+ model = Notification
+ fields = [
+ "id",
+ "project",
+ "level",
+ "body",
+ "link_path",
+ "metadata",
+ "created_at",
+ "read_at",
+ "is_read",
+ ]
+ read_only_fields = fields
+
+ def get_is_read(self, obj: Notification) -> bool:
+ """Return whether the serialized notification has been read."""
+
+ return obj.is_read
diff --git a/notifications/signals.py b/notifications/signals.py
new file mode 100644
index 00000000..eac47314
--- /dev/null
+++ b/notifications/signals.py
@@ -0,0 +1,32 @@
+"""Signal handlers that broadcast new notifications to live websocket sessions."""
+
+from __future__ import annotations
+
+from asgiref.sync import async_to_sync
+from channels.layers import get_channel_layer
+from django.conf import settings
+from django.db.models.signals import post_save
+from django.dispatch import receiver
+
+from notifications.models import Notification
+from notifications.realtime import notification_group_name, serialize_notification
+
+
+@receiver(post_save, sender=Notification)
+def broadcast_notification_created(sender, instance, created, **kwargs) -> None:
+ """Broadcast newly-created notifications to the recipient's live sessions."""
+
+ if kwargs.get("raw") or not created or not settings.MESSAGING_ENABLED:
+ return
+
+ channel_layer = get_channel_layer()
+ if channel_layer is None:
+ return
+
+ async_to_sync(channel_layer.group_send)(
+ notification_group_name(int(instance.user_id)),
+ {
+ "type": "notification.created",
+ "notification": serialize_notification(instance),
+ },
+ )
diff --git a/notifications/tests/test_api.py b/notifications/tests/test_api.py
new file mode 100644
index 00000000..b4f4638b
--- /dev/null
+++ b/notifications/tests/test_api.py
@@ -0,0 +1,126 @@
+"""API tests for the notifications app."""
+
+from __future__ import annotations
+
+from typing import Any, cast
+
+from django.contrib.auth import get_user_model
+from django.db.models import Model
+from django.urls import reverse
+from django.utils import timezone
+from rest_framework import status
+from rest_framework.test import APIClient, APITestCase
+
+from notifications.models import Notification, NotificationLevel
+from projects.models import Project
+
+
+def _require_pk(instance: Model) -> int:
+ """Return a saved model primary key for typed API test assertions."""
+
+ instance_pk = instance.pk
+ if instance_pk is None:
+ raise ValueError(f"{instance.__class__.__name__} must be saved first.")
+ return int(instance_pk)
+
+
+def _typed_client(client: object) -> APIClient:
+ """Cast the DRF test client so Pylance sees APIClient helpers."""
+
+ return cast(APIClient, client)
+
+
+def _create_user(user_model: type[Any], **kwargs: object):
+ """Create a user through the custom manager with a typed escape hatch."""
+
+ return cast(Any, user_model.objects).create_user(**kwargs)
+
+
+class NotificationApiTests(APITestCase):
+ """Exercise the current-user notification endpoints."""
+
+ def setUp(self):
+ user_model = get_user_model()
+ self.owner = _create_user(user_model, username="owner", password="testpass123")
+ self.other_user = _create_user(
+ user_model,
+ username="other",
+ password="testpass123",
+ )
+ self.project = Project.objects.create(
+ name="Owner Project",
+ topic_description="Platform engineering",
+ )
+ self.read_notification = Notification.objects.create(
+ user=self.owner,
+ project=self.project,
+ level=NotificationLevel.INFO,
+ body="Already read",
+ read_at=timezone.now(),
+ )
+ self.unread_notification = Notification.objects.create(
+ user=self.owner,
+ project=self.project,
+ level=NotificationLevel.ERROR,
+ body="Needs attention",
+ )
+ Notification.objects.create(
+ user=self.other_user,
+ level=NotificationLevel.SUCCESS,
+ body="Other user notification",
+ )
+ _typed_client(self.client).force_authenticate(self.owner)
+
+ def test_list_returns_only_current_user_notifications(self):
+ response = self.client.get(reverse("v1:notification-list"))
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ payload = response.json()
+ self.assertEqual(len(payload), 2)
+ self.assertEqual(payload[0]["body"], "Needs attention")
+ self.assertEqual(payload[1]["body"], "Already read")
+
+ def test_list_can_filter_to_unread_notifications(self):
+ response = self.client.get(reverse("v1:notification-list"), {"unread": "true"})
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ payload = response.json()
+ self.assertEqual(len(payload), 1)
+ self.assertEqual(payload[0]["body"], "Needs attention")
+ self.assertFalse(payload[0]["is_read"])
+
+ def test_read_action_sets_read_at(self):
+ response = self.client.post(
+ reverse(
+ "v1:notification-read",
+ kwargs={"pk": _require_pk(self.unread_notification)},
+ )
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.unread_notification.refresh_from_db()
+ self.assertIsNotNone(self.unread_notification.read_at)
+ self.assertTrue(response.json()["is_read"])
+
+ def test_read_all_marks_only_current_users_unread_rows(self):
+ response = self.client.post(reverse("v1:notification-read-all"))
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(response.json()["updated_count"], 1)
+ self.unread_notification.refresh_from_db()
+ self.assertIsNotNone(self.unread_notification.read_at)
+
+ def test_destroy_deletes_owned_notification(self):
+ response = self.client.delete(
+ reverse(
+ "v1:notification-detail",
+ kwargs={"pk": _require_pk(self.unread_notification)},
+ )
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
+ self.assertFalse(
+ Notification.objects.filter(
+ pk=_require_pk(self.unread_notification)
+ ).exists()
+ )
diff --git a/notifications/tests/test_consumer.py b/notifications/tests/test_consumer.py
new file mode 100644
index 00000000..88e0f931
--- /dev/null
+++ b/notifications/tests/test_consumer.py
@@ -0,0 +1,46 @@
+"""Consumer tests for live notification delivery over websockets."""
+
+from __future__ import annotations
+
+from unittest.mock import AsyncMock
+
+from asgiref.sync import async_to_sync
+from django.contrib.auth import get_user_model
+from django.test import TransactionTestCase, override_settings
+
+from notifications.consumers import NotificationConsumer
+from projects.models import Project
+
+
+@override_settings(
+ MESSAGING_ENABLED=True,
+ CHANNEL_LAYERS={"default": {"BACKEND": "channels.layers.InMemoryChannelLayer"}},
+)
+class NotificationConsumerTests(TransactionTestCase):
+ """Verify new notifications are pushed to authenticated websocket clients."""
+
+ def setUp(self) -> None:
+ user_model = get_user_model()
+ self.user = user_model.objects.create_user(
+ username="socket-user",
+ password="testpass123",
+ )
+ self.project = Project.objects.create(
+ name="Socket Project",
+ topic_description="Realtime",
+ )
+
+ def test_authenticated_user_joins_user_group_on_connect(self) -> None:
+ consumer = NotificationConsumer()
+ consumer.scope = {"user": self.user}
+ consumer.channel_layer = AsyncMock()
+ consumer.channel_name = "test-channel"
+ consumer.accept = AsyncMock()
+
+ async_to_sync(consumer.connect)()
+
+ consumer.channel_layer.group_add.assert_awaited_once_with(
+ f"notif.{self.user.pk}",
+ "test-channel",
+ )
+ consumer.accept.assert_awaited_once()
diff --git a/notifications/tests/test_emit.py b/notifications/tests/test_emit.py
new file mode 100644
index 00000000..9c1e8f56
--- /dev/null
+++ b/notifications/tests/test_emit.py
@@ -0,0 +1,94 @@
+"""Tests for the notification emit helper."""
+
+from __future__ import annotations
+
+from typing import Any, cast
+
+from django.contrib.auth import get_user_model
+from django.test import TestCase, override_settings
+
+from notifications.emit import notify, notify_project_admins
+from notifications.models import Notification, NotificationLevel
+from projects.models import Project, ProjectMembership, ProjectRole
+
+
+def _create_user(user_model: type[Any], **kwargs: object):
+ """Create a user through the custom manager with a typed escape hatch."""
+
+ return cast(Any, user_model.objects).create_user(**kwargs)
+
+
+class NotificationEmitTests(TestCase):
+ """Verify notification creation respects the messaging feature flag."""
+
+ def setUp(self):
+ user_model = get_user_model()
+ self.user = _create_user(user_model, username="owner", password="testpass123")
+ self.project = Project.objects.create(
+ name="Owner Project",
+ topic_description="Platform engineering",
+ )
+
+ @override_settings(MESSAGING_ENABLED=False)
+ def test_notify_is_noop_when_messaging_disabled(self):
+ result = notify(
+ self.user,
+ level=NotificationLevel.INFO,
+ body="Should not persist",
+ )
+
+ self.assertIsNone(result)
+ self.assertEqual(Notification.objects.count(), 0)
+
+ @override_settings(MESSAGING_ENABLED=True)
+ def test_notify_persists_notification_when_messaging_enabled(self):
+ result = notify(
+ self.user,
+ level=NotificationLevel.SUCCESS,
+ body="Draft generation completed",
+ link_path="/messages",
+ project=self.project,
+ metadata={"draft_id": 42},
+ )
+
+ self.assertIsNotNone(result)
+ notification = Notification.objects.get()
+ self.assertEqual(notification.user, self.user)
+ self.assertEqual(notification.project, self.project)
+ self.assertEqual(notification.level, NotificationLevel.SUCCESS)
+ self.assertEqual(notification.link_path, "/messages")
+ self.assertEqual(notification.metadata, {"draft_id": 42})
+
+ @override_settings(MESSAGING_ENABLED=True)
+ def test_notify_project_admins_notifies_each_project_admin(self):
+ user_model = get_user_model()
+ second_admin = _create_user(
+ user_model,
+ username="second-admin",
+ password="testpass123",
+ )
+ ProjectMembership.objects.create(
+ user=self.user,
+ project=self.project,
+ role=ProjectRole.ADMIN,
+ )
+ ProjectMembership.objects.create(
+ user=second_admin,
+ project=self.project,
+ role=ProjectRole.ADMIN,
+ )
+
+ created_count = notify_project_admins(
+ self.project,
+ level=NotificationLevel.INFO,
+ body="Draft generation completed",
+ link_path="/drafts/42",
+ metadata={"draft_id": 42},
+ )
+
+ self.assertEqual(created_count, 2)
+ self.assertEqual(Notification.objects.count(), 2)
+ self.assertEqual(
+ set(Notification.objects.values_list("user__username", flat=True)),
+ {"owner", "second-admin"},
+ )
diff --git a/notifications/tests/test_signals.py b/notifications/tests/test_signals.py
new file mode 100644
index 00000000..04e7d3c0
--- /dev/null
+++ b/notifications/tests/test_signals.py
@@ -0,0 +1,56 @@
+"""Signal tests for websocket fan-out of new notifications."""
+
+from __future__ import annotations
+
+from types import SimpleNamespace
+from unittest.mock import Mock, patch
+
+from django.contrib.auth import get_user_model
+from django.test import TestCase, override_settings
+
+from notifications.models import Notification, NotificationLevel
+from projects.models import Project
+
+
+@override_settings(MESSAGING_ENABLED=True)
+class NotificationSignalTests(TestCase):
+ """Verify newly created notifications emit the expected channel-layer event."""
+
+ def setUp(self) -> None:
+ user_model = get_user_model()
+ self.user = user_model.objects.create_user(
+ username="signal-user",
+ password="testpass123",
+ )
+ self.project = Project.objects.create(
+ name="Signal Project",
+ topic_description="Realtime",
+ )
+
+ def test_notification_create_broadcasts_to_user_group(self) -> None:
+ send_mock = Mock()
+ fake_channel_layer = SimpleNamespace(group_send=object())
+
+ with (
+ patch(
+ "notifications.signals.get_channel_layer",
+ return_value=fake_channel_layer,
+ ),
+ patch("notifications.signals.async_to_sync", return_value=send_mock),
+ ):
+ notification = Notification.objects.create(
+ user=self.user,
+ project=self.project,
+ level=NotificationLevel.SUCCESS,
+ body="Draft ready",
+ link_path="/drafts/42",
+ metadata={"draft_id": 42},
+ )
+
+ send_mock.assert_called_once()
+ group_name, event = send_mock.call_args.args
+ self.assertEqual(group_name, f"notif.{self.user.pk}")
+ self.assertEqual(event["type"], "notification.created")
+ self.assertEqual(event["notification"]["id"], int(notification.pk))
+ self.assertEqual(event["notification"]["body"], "Draft ready")
+ self.assertEqual(event["notification"]["link_path"], "/drafts/42")
diff --git a/requirements.txt b/requirements.txt
index 051c1eb5..97a7b241 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,11 +1,18 @@
atproto==0.0.65
+autobahn==25.12.2
+automat==25.4.16
boto3==1.42.97
botocore==1.42.97
+cbor2==6.0.1
celery[redis]==5.6.3
cfgv==3.5.0
+channels==4.3.2
+channels-redis==4.3.0
+constantly==23.10.4
coverage==7.13.5
cryptography==46.0.7
cssbeautifier==1.15.4
+daphne==4.2.1
Deprecated==1.3.1
dj-database-url==3.1.2
dj-rest-auth==7.2.0
@@ -18,6 +25,7 @@ django-stubs-ext==6.0.3
django-stubs==6.0.3
django-unfold==0.91.0
Django==6.0.4
+djangochannelsrestframework==1.3.0
djangorestframework-simplejwt==5.5.1
djangorestframework==3.17.1
djlint==1.36.4
@@ -30,12 +38,14 @@ editorconfig==0.17.1
feedparser==6.0.12
gunicorn==25.3.0
httpx==0.28.1
+hyperlink==21.0.0
identify==2.6.19
+incremental==24.11.0
inflection==0.5.1
jmespath==1.1.0
jsbeautifier==1.15.4
langchain-core==1.3.2
-langchain-protocol==0.0.12
+langchain-protocol==0.0.15
langgraph-checkpoint==4.0.3
langgraph-prebuilt==1.0.12
langgraph-sdk==0.3.13
@@ -45,20 +55,25 @@ libipld==3.3.2
librt==0.9.0
markdown==3.10.2
Mastodon.py==2.2.1
+msgpack==1.1.2
mypy==1.20.2
nodeenv==1.10.0
-ormsgpack==1.12.2
-opentelemetry-api>=1.28,<2
+opentelemetry-api>=1.41.1
opentelemetry-exporter-otlp-proto-http>=1.28,<2
opentelemetry-instrumentation-celery>=0.49b0,<1
opentelemetry-instrumentation-django>=0.49b0,<1
-opentelemetry-sdk>=1.28,<2
+opentelemetry-sdk>=1.41.1
+ormsgpack==1.12.2
pillow==12.2.0
praw==7.8.1
pre-commit==4.6.0
psycopg[binary]==3.3.3
+py-ubjson==0.16.1
+pyasn1-modules==0.4.2
+pyasn1==0.6.3
pylint-django==2.7.0
pylint-plugin-utils==0.9.0
+pyopenssl==26.1.0
pytest-django==4.12.0
pytest-mock==3.15.1
pytest==9.0.3
@@ -68,16 +83,21 @@ requests-toolbelt==1.0.0
ruff==0.15.12
s3transfer==0.16.1
sentence-transformers==5.4.1
+service-identity==24.2.0
standardwebhooks==1.0.1
structlog==25.5.0
svix==1.92.2
+twisted==25.5.0
+txaio==25.12.2
types-Deprecated==1.3.1.20260408
-types-requests==2.32.4.20250913
types-python-dateutil==2.9.0.20260408
types-pyyaml==6.0.12
+types-requests==2.32.4.20250913
+ujson==5.12.0
uritemplate==4.2.0
uuid-utils==0.14.1
watchdog==6.0.0
websockets==15.0.1
wrapt==2.1.2
xxhash==3.7.0
+zope-interface==8.4
diff --git a/skills/newsletter_extraction/SKILL.md b/skills/newsletter_extraction/SKILL.md
index 5cec8b22..7e085e2d 100644
--- a/skills/newsletter_extraction/SKILL.md
+++ b/skills/newsletter_extraction/SKILL.md
@@ -19,4 +19,4 @@ Rules:
- Ignore unsubscribe links, privacy links, share links, logo links, and obvious navigation links.
- Prefer article destinations over tracking or redirect wrappers when the destination is visible in the email body.
- Use the newsletter subject only when no better title is available.
-- Return an empty `items` array when the email contains no article candidates.
\ No newline at end of file
+- Return an empty `items` array when the email contains no article candidates.