-
- Used to access the (limited) Hemolog API. No documenation exists yet
- but you can find more info inside the readme on Github.
-
-
-
-
-
In case of emergency
-
- A medical worker can simply type in the URL listed on the card, or
- eaiser scan the QR code with their phone. This gives the worker a
- quick summary of all your info including your 3 most recent logs, and
- emergency contacts. These features aren’t available with Medic Alert.
-
-
-
-
-
-
- {/*
-
-
-
-
-
-
- */}
-
-
-
- Delete account
-
- Deleting your account removes your profile, infusions, and emergency
- info forever. This action cannot be undone.
-
-
-
-
-
- Delete your account?
-
-
- This permanently deletes your Hemolog data and cannot be reversed.
- You will need to create a new account to return.
-
-
- setVisible(false)}>
- Cancel
-
-
- Delete account
-
-
-
- )
-}
-
-export default ProfilePage
diff --git a/components/settingsForm.tsx b/components/settingsForm.tsx
deleted file mode 100644
index 7816f00..0000000
--- a/components/settingsForm.tsx
+++ /dev/null
@@ -1,265 +0,0 @@
-import { useState } from 'react'
-import { useFormik } from 'formik'
-import {
- Input,
- Button,
- Text,
- Spacer,
- useToasts,
- Grid,
- AutoComplete,
-} from '@geist-ui/react'
-
-import { useAuth } from 'lib/auth'
-import useDbUser from 'lib/hooks/useDbUser'
-import { updateUser } from 'lib/db/users'
-import { track } from 'lib/helpers'
-
-const SettingsForm = (): JSX.Element => {
- const { user } = useAuth()
- const [, setToast] = useToasts()
- const { person } = useDbUser(user?.uid || '')
-
- const formik = useFormik({
- initialValues: {
- hemophiliaType: person ? person.hemophiliaType : '',
- severity: person ? person.severity : '',
- factor: person ? person.factor : '',
- medication: person ? person.medication : '',
- monoclonalAntibody: person ? person.monoclonalAntibody : '',
- injectionFrequency: person ? person.injectionFrequency : '',
- // emergencyContacts: [
- // {
- // name: '',
- // phone: '',
- // },
- // ],
- },
- enableReinitialize: true,
- onSubmit: (values) => {
- updateUser(user?.uid || '', values)
- .then(() => {
- setToast({
- text: 'Profile updated!',
- type: 'success',
- delay: 5000,
- })
- })
- .catch((error) => {
- console.error(error)
- setToast({
- text: `Something went wrong: ${error}`,
- type: 'error',
- delay: 10000,
- })
- })
- },
- })
-
- const severityOptions = [
- { label: 'Mild', value: 'Mild' },
- { label: 'Moderate', value: 'Moderate' },
- { label: 'Severe', value: 'Severe' },
- ]
-
- const hemophiliaTypeOptions = [
- { label: 'A', value: 'A' },
- { label: 'B', value: 'B' },
- { label: 'Von Willebrand Disease', value: 'Von Willebrand Disease' },
- ]
-
- const factorOptions = [
- { label: 'Advate', value: 'Advate' },
- { label: 'Adynovate', value: 'Adynovate' },
- { label: 'Afstyla', value: 'Afstyla' },
- { label: 'Alprolix', value: 'Alprolix' },
- { label: 'Benefix', value: 'Benefix' },
- { label: 'Eloctate', value: 'Eloctate' },
- { label: 'Esperoct', value: 'Esperoct' },
- { label: 'Idelvion', value: 'Idelvion' },
- { label: 'Ixinity', value: 'Ixinity' },
- { label: 'Jivi', value: 'Jivi' },
- { label: 'Kogenate FS', value: 'Kogenate FS' },
- { label: 'Kovaltry', value: 'Kovaltry' },
- { label: 'NovoEight', value: 'NovoEight' },
- { label: 'NovoSeven', value: 'NovoSeven' },
- { label: 'NUWIQ', value: 'NUWIQ' },
- { label: 'Rebinyn', value: 'Rebinyn' },
- { label: 'Recombinate', value: 'Recombinate' },
- { label: 'Rixubis', value: 'Rixubis' },
- { label: 'Xyntha', value: 'Xyntha' },
- ]
-
- const monoclonalAntibodyOptions = [{ label: 'Hemlibra', value: 'Hemlibra' }]
-
- const injectionFrequencyOptions = [
- {
- label: 'Weekly',
- value: 'Weekly',
- },
- {
- label: 'Every other week',
- value: 'Every other week',
- },
- {
- label: 'Monthly',
- value: 'Monthly',
- },
- ]
-
- const handleSubmitForm = () => {
- track('Updated Profile', { ...formik.values })
- formik.submitForm()
- }
-
- const [filteredFactorOptions, setFilteredFactorOptions] =
- useState(factorOptions)
-
- interface Option {
- label: string
- value: string
- }
-
- const searchHandler = (
- currentValue: string,
- allOptions: Option[],
- setOptions: (options: Option[]) => void
- ) => {
- if (!currentValue) return setOptions(allOptions)
- const relatedOptions = allOptions.filter((item) =>
- item.value.toLowerCase().startsWith(currentValue.toLowerCase())
- )
- setOptions(relatedOptions)
- }
-
- return (
-
- )
-}
-
-export default SettingsForm
diff --git a/components/statCard.tsx b/components/statCard.tsx
deleted file mode 100644
index 2fd13ab..0000000
--- a/components/statCard.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Card, Text, Loading } from '@geist-ui/react'
-import type { CardTypes } from '@geist-ui/react/dist/utils/prop-types'
-
-interface Props {
- value: string | number
- label: string | React.Component
- loading?: boolean
- type?: CardTypes
- shadow?: boolean
- style?: React.CSSProperties
-}
-
-export default function StatCard(props: Props): JSX.Element {
- const {
- value,
- label,
- loading = false,
- type = 'default',
- shadow = true,
- style,
- } = props
-
- return (
-
- {value}
- {label}
- {loading && }
-
- )
-}
diff --git a/components/staticHeader.tsx b/components/staticHeader.tsx
deleted file mode 100644
index e0ff104..0000000
--- a/components/staticHeader.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { Grid, Button } from '@geist-ui/react'
-import styled from 'styled-components'
-import { useRouter } from 'next/router'
-
-import { useAuth } from 'lib/auth'
-import Logo from 'components/logo'
-
-const StaticHeader = (): JSX.Element => {
- const { user, loading } = useAuth()
-
- const router = useRouter()
-
- return (
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default StaticHeader
-
-const StyledPageHeader = styled.header`
- padding: 24px;
-`
diff --git a/components/stats.tsx b/components/stats.tsx
deleted file mode 100644
index c507c86..0000000
--- a/components/stats.tsx
+++ /dev/null
@@ -1,245 +0,0 @@
-import _ from 'underscore'
-import styled from 'styled-components'
-import { Grid, Note, Card, useModal, Tooltip, Text } from '@geist-ui/react'
-
-import StatCard from 'components/statCard'
-import useInfusions from 'lib/hooks/useInfusions'
-import { FirestoreStatusType } from 'lib/hooks/useFirestoreQuery'
-import { TreatmentTypeEnum } from 'lib/db/infusions'
-import FeedbackModal from 'components/feedbackModal'
-import { filterInfusions } from 'lib/helpers'
-
-// TODO(michael) move types to types file
-type Value = string[]
-
-interface ValueRanges {
- range: string
- majorDimension: string
- values: Value[]
-}
-
-export interface InfusionSheet {
- error?: Error
- spreadsheetId: string
- valueRanges: ValueRanges[]
-}
-
-// TODO(michael) create array of factor brands with associated prices
-// const PHARMACY_ORDERS = 6
-const COST_OF_FACTOR = 1.66
-
-interface StatsProps {
- filterYear: string
-}
-
-export default function Stats(props: StatsProps): JSX.Element {
- const { filterYear } = props
- const { data, status, error } = useInfusions()
-
- const filteredInfusions = filterInfusions(data, filterYear)
-
- // TODO(michael): Remove the feedback modal from this component at some point
- // since we already use it in the footer, maybe figure out a way to share
- // the modal across multiple components my lifting it up into context.
- const {
- visible: feedbackModal,
- setVisible: setFeedbackModalVisible,
- bindings: feedbackModalBindings,
- } = useModal(false)
-
- if (status === FirestoreStatusType.LOADING) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
- }
-
- if (error) {
- return (
-
- Oops, the database didn’t respond. Refresh the page to try again.
-
- )
- }
-
- if (status === FirestoreStatusType.ERROR && !error) {
- return (
-
- Something went wrong accessing your treatment data. Refresh the page to
- try again.
-
- )
- }
-
- // TODO(michael) there has to be a better way to understand this data without
- // iterating through it so many times. Iterating through it once would be a lot better
- // but doing it on the server would be even better.
-
- // Another idea could be to make all these cards individual components as the logic
- // could get a lot more complicated for some of them.
-
- const numberOfInfusions = filteredInfusions.length
- const affectedAreas = filteredInfusions.map((entry) => entry.sites)
- const causes = filteredInfusions.map((entry) => entry.cause)
- const numberOfBleeds = filteredInfusions.filter(
- (entry) => entry.type === TreatmentTypeEnum.BLEED
- ).length
- const mostAffectedArea = _.chain(affectedAreas)
- .compact()
- .countBy()
- .pairs()
- .max(_.last)
- .head()
- .value()
-
- const biggestCause = _.chain(causes)
- .compact()
- .countBy()
- .pairs()
- .max(_.last)
- .head()
- .value()
-
- const consecutiveProphyInfusions = (): number => {
- let longestStreak = 0
- let currentStreak = 0
-
- for (const entry of filteredInfusions) {
- const isProphy = entry.type === TreatmentTypeEnum.PROPHY
-
- if (isProphy) {
- currentStreak++
- } else {
- currentStreak = 0
- }
-
- if (currentStreak > longestStreak) {
- longestStreak = currentStreak
- }
- }
-
- return longestStreak
- }
-
- const getTotalUnits = () => {
- let units = 0
- for (const entry of filteredInfusions) {
- units += entry.medication.units
- }
-
- return units
- }
-
- const totalUnits = getTotalUnits()
- const estimatedTotalCost = totalUnits * COST_OF_FACTOR
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* I think this is between $1.19 and $1.66 per unit based on this article
- https://www.ashclinicalnews.org/spotlight/feature-articles/high-price-hemophilia/ */}
-
-
-
-
-
-
- Missing something?
-
-
- setFeedbackModalVisible(true)}
- >
- Give feedback
-
-
-
-
-
- {/*
- TODO(michael) could setup a separate collection for this data as well as a
- separate api call
-
- */}
-
-
- >
- )
-}
-
-const StyledButton = styled.button`
- background: none;
- border: none;
- cursor: pointer;
- padding: 0;
- margin: 0;
- color: red;
- font-weight: bold;
-`
diff --git a/components/withAuth.tsx b/components/withAuth.tsx
deleted file mode 100644
index 9fbdfca..0000000
--- a/components/withAuth.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import dynamic from 'next/dynamic'
-import type { ComponentType } from 'react'
-import LoadingScreen from 'components/loadingScreen'
-
-// Dynamically import AuthProvider to avoid loading Firebase on public pages
-const AuthProvider = dynamic(
- () => import('lib/auth').then((mod) => mod.AuthProvider),
- {
- ssr: false,
- loading: () => ,
- }
-)
-
-// HOC that wraps a page component with AuthProvider
-export function withAuth
+ More than you would ever want to know about Hemolog
+
+
+
+
+
+
+
+
+
+ Let's face it, there are some exciting developments in the world
+ of Hemophilia research. Honestly, it's not just research
+ anymore. Clinical trials are happening now across the globe. Gene
+ therapy is definitely going to change things for the better, it's
+ just a matter of when it's available to all of us.
+
+
+
+ That being said, it's still important to keep track of your
+ treatments. Maybe even more now than ever. If getting on a trial
+ is something you're interested in, knowing how many bleeds you
+ were having before is really important.
+
+
+
+ Trial or not, keeping track of your treatment habits can be hard
+ and the tools we have aren't great. Hemolog is simple. You track
+ your treatments and Hemolog gives you instant feedback.
+
+
+
+ Insights are something that I always wanted to be a part of
+ Hemolog and now they're finally here.
+
+
+
+
+
+
+ High level insights that help you understand your habits
+
+
+
+
+ These insights are calculated as you log your treatments. Filter by
+ year for a comprehensive view into your treatment history. I've
+ chosen a few insights that are interesting to me. If you have
+ thoughts on what you would like to see, just let me know.
+
+
+
+
Note
+
+ Development is ongoing. Check out the{' '}
+
+ development blog
+ {' '}
+ for updates and changes.
+
+
+
+
+
+
+ Now that Hemolog is back, I hope you enjoy using it as much as I
+ have. It's up to all of us to keep each other accountable. You
+ can{' '}
+
+ view my emergency page
+ {' '}
+ at any time to verify I've been keeping up with my prophy
+ regimen.
+
+
— Michael Schultz
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default About
diff --git a/src/app/api/alert-lightstrip/route.ts b/src/app/api/alert-lightstrip/route.ts
new file mode 100644
index 0000000..06bce00
--- /dev/null
+++ b/src/app/api/alert-lightstrip/route.ts
@@ -0,0 +1,15 @@
+// NOTE(michael): this endpoint isn't used anywhere and was just an
+// exploration of the HUE api.
+import type { NextRequest } from 'next/server'
+
+const REQUEST_URL = `${process.env.HUE_BRIDGE_URL}/lights/3`
+
+export async function PUT(_request: NextRequest) {
+ const response = await fetch(`${REQUEST_URL}/state`, {
+ method: 'PUT',
+ body: JSON.stringify({ on: true, hue: 0 }),
+ })
+
+ const result = await response.json()
+ return Response.json(result)
+}
diff --git a/src/app/api/delete-account/route.ts b/src/app/api/delete-account/route.ts
new file mode 100644
index 0000000..bc9a031
--- /dev/null
+++ b/src/app/api/delete-account/route.ts
@@ -0,0 +1,27 @@
+import type { NextRequest } from 'next/server'
+import { deleteUserAndData } from '@/lib/admin-db/users'
+import { auth } from '@/lib/firebase-admin'
+
+export async function DELETE(request: NextRequest) {
+ try {
+ const token = request.headers.get('token')
+
+ if (!token) {
+ throw new Error('Access denied. Missing valid token.')
+ }
+
+ const { uid } = await auth.verifyIdToken(token)
+
+ if (!uid) {
+ throw new Error('Access denied. Invalid token.')
+ }
+
+ await deleteUserAndData(uid)
+
+ return Response.json({ success: true })
+ } catch (error: unknown) {
+ const errorMessage =
+ error instanceof Error ? error.message : 'Unable to delete account.'
+ return Response.json({ error: errorMessage }, { status: 500 })
+ }
+}
diff --git a/pages/api/feedback.ts b/src/app/api/feedback/route.ts
similarity index 52%
rename from pages/api/feedback.ts
rename to src/app/api/feedback/route.ts
index 23ce7f3..f22e386 100644
--- a/pages/api/feedback.ts
+++ b/src/app/api/feedback/route.ts
@@ -1,14 +1,16 @@
-import { auth } from 'lib/firebase-admin'
-import { getAllFeedback } from 'lib/admin-db/feedback'
-import type { NextApiRequest, NextApiResponse } from 'next'
+import type { NextRequest } from 'next/server'
+import { getAllFeedback } from '@/lib/admin-db/feedback'
+import { auth } from '@/lib/firebase-admin'
-const feedback = async (req: NextApiRequest, res: NextApiResponse) => {
+export async function GET(request: NextRequest) {
try {
- if (!req.headers.token) {
+ const token = request.headers.get('token')
+
+ if (!token) {
throw { message: 'Access denied. Missing valid token.' }
}
- const { uid } = await auth.verifyIdToken(req.headers.token as string)
+ const { uid } = await auth.verifyIdToken(token)
if (!uid) {
throw {
message: `Invalid token`,
@@ -21,7 +23,7 @@ const feedback = async (req: NextApiRequest, res: NextApiResponse) => {
throw error
}
- return res.status(200).json(feedback)
+ return Response.json(feedback)
} catch (error: unknown) {
const errorMessage =
error &&
@@ -30,8 +32,6 @@ const feedback = async (req: NextApiRequest, res: NextApiResponse) => {
typeof error.message === 'string'
? error.message
: 'An error occurred'
- return res.status(500).send(errorMessage)
+ return Response.json({ error: errorMessage }, { status: 500 })
}
}
-
-export default feedback
diff --git a/src/app/api/flip-lightstrip/route.ts b/src/app/api/flip-lightstrip/route.ts
new file mode 100644
index 0000000..0ffacd1
--- /dev/null
+++ b/src/app/api/flip-lightstrip/route.ts
@@ -0,0 +1,45 @@
+// NOTE(michael): this endpoint isn't used anywhere and was just an
+// exploration of the HUE api.
+import type { NextRequest } from 'next/server'
+
+const REQUEST_URL = `${process.env.HUE_BRIDGE_URL}/lights/3`
+
+export async function PUT(request: NextRequest) {
+ const { searchParams } = new URL(request.url)
+ const onParam = searchParams.get('on')
+ let on: boolean | undefined
+
+ if (onParam) {
+ switch (onParam) {
+ case 'false': {
+ on = false
+ break
+ }
+ case 'true': {
+ on = true
+ break
+ }
+ case 'default': {
+ on = true
+ break
+ }
+ }
+ } else {
+ // Get current state and toggle
+ const stateResponse = await fetch(REQUEST_URL, {
+ method: 'GET',
+ })
+ const data = await stateResponse.json()
+ const currentState = data.state.on
+ // toggle light state
+ on = !currentState
+ }
+
+ const response = await fetch(`${REQUEST_URL}/state`, {
+ method: 'PUT',
+ body: JSON.stringify({ on: on }),
+ })
+
+ const result = await response.json()
+ return Response.json(result)
+}
diff --git a/src/app/api/log-treatment/route.ts b/src/app/api/log-treatment/route.ts
new file mode 100644
index 0000000..9078d7d
--- /dev/null
+++ b/src/app/api/log-treatment/route.ts
@@ -0,0 +1,57 @@
+import type { NextRequest } from 'next/server'
+import {
+ getRecentUserTreatmentsByApiKey,
+ postTreatmentByApiKey,
+} from '@/lib/admin-db/treatments'
+
+export async function POST(request: NextRequest) {
+ try {
+ const { searchParams } = new URL(request.url)
+ const apikey = searchParams.get('apikey')
+
+ if (!apikey) {
+ throw { message: 'Access denied. Missing api key.' }
+ }
+
+ const body = await request.json()
+
+ if (!body) {
+ throw { message: 'Missing treatment data.' }
+ }
+
+ const { treatments, error } = await getRecentUserTreatmentsByApiKey(apikey)
+
+ if (error) throw error
+
+ const mostRecentTreatment =
+ treatments && treatments.length > 0 ? treatments[0] : null
+
+ try {
+ const { treatment, error } = await postTreatmentByApiKey(
+ apikey,
+ mostRecentTreatment,
+ body
+ )
+ if (error) throw error
+ return Response.json(treatment)
+ } catch (error: unknown) {
+ const errorMessage =
+ error &&
+ typeof error === 'object' &&
+ 'message' in error &&
+ typeof error.message === 'string'
+ ? error.message
+ : 'An error occurred'
+ return Response.json({ error: errorMessage }, { status: 500 })
+ }
+ } catch (error: unknown) {
+ const errorMessage =
+ error &&
+ typeof error === 'object' &&
+ 'message' in error &&
+ typeof error.message === 'string'
+ ? error.message
+ : 'An error occurred'
+ return Response.json({ error: errorMessage }, { status: 500 })
+ }
+}
diff --git a/src/app/api/recent-treatments/route.ts b/src/app/api/recent-treatments/route.ts
new file mode 100644
index 0000000..9d75c45
--- /dev/null
+++ b/src/app/api/recent-treatments/route.ts
@@ -0,0 +1,34 @@
+import type { NextRequest } from 'next/server'
+import { getRecentUserTreatmentsByApiKey } from '@/lib/admin-db/treatments'
+
+export async function GET(request: NextRequest) {
+ try {
+ const { searchParams } = new URL(request.url)
+ const apikey = searchParams.get('apikey')
+ const alertid = searchParams.get('alertid')
+
+ if (!apikey && !alertid) {
+ throw { message: 'Access denied. Missing api key.' }
+ }
+
+ const { treatments, error } = await getRecentUserTreatmentsByApiKey(
+ apikey || undefined,
+ alertid || undefined
+ )
+
+ if (error) {
+ throw error
+ }
+
+ return Response.json(treatments)
+ } catch (error: unknown) {
+ const errorMessage =
+ error &&
+ typeof error === 'object' &&
+ 'message' in error &&
+ typeof error.message === 'string'
+ ? error.message
+ : 'An error occurred'
+ return Response.json({ error: errorMessage }, { status: 500 })
+ }
+}
diff --git a/src/app/api/treatments/route.ts b/src/app/api/treatments/route.ts
new file mode 100644
index 0000000..e3a5431
--- /dev/null
+++ b/src/app/api/treatments/route.ts
@@ -0,0 +1,30 @@
+import type { NextRequest } from 'next/server'
+import { getAllTreatmentsByApiKey } from '@/lib/admin-db/treatments'
+
+export async function GET(request: NextRequest) {
+ try {
+ const { searchParams } = new URL(request.url)
+ const apikey = searchParams.get('apikey')
+
+ if (!apikey) {
+ throw { message: 'Access denied. Missing api key.' }
+ }
+
+ const { treatments, error } = await getAllTreatmentsByApiKey(apikey)
+
+ if (error) {
+ throw error
+ }
+
+ return Response.json(treatments)
+ } catch (error: unknown) {
+ const errorMessage =
+ error &&
+ typeof error === 'object' &&
+ 'message' in error &&
+ typeof error.message === 'string'
+ ? error.message
+ : 'An error occurred'
+ return Response.json({ error: errorMessage }, { status: 500 })
+ }
+}
diff --git a/src/app/changelog/[slug]/page.tsx b/src/app/changelog/[slug]/page.tsx
new file mode 100644
index 0000000..50c1721
--- /dev/null
+++ b/src/app/changelog/[slug]/page.tsx
@@ -0,0 +1,196 @@
+import { notFound } from 'next/navigation'
+import BlogFooter from '@/components/blog/blogFooter'
+import PostFooter from '@/components/blog/postFooter'
+import Footer from '@/components/shared/footer'
+import StaticHeader from '@/components/shared/staticHeader'
+
+interface PageProps {
+ params: Promise<{
+ slug: string
+ }>
+}
+
+const ChangelogPost = async ({ params }: PageProps): Promise => {
+ const { slug } = await params
+
+ // For now, redirect to 404 for unknown slugs
+ // In a real implementation, you would fetch content based on slug
+ if (
+ ![
+ 'hello-world-again',
+ 'mobile-enhancements',
+ 'monoclonal-antibodies',
+ 'raycast-extension',
+ ].includes(slug)
+ ) {
+ notFound()
+ }
+
+ const postData = getPostData(slug)
+
+ return (
+
+
+
+
+
Changelog
+
+ Development blog about new features, fixes, and updates to Hemolog
+
+ Hemolog is back! After 8 years, I've built a reincarnation of the
+ old iPhone app Hemolog. This time around, it does a bit more than
+ just storing your treatment logs. In this incarnation, Hemolog is
+ now a web app and helps you understand your logs by showing you
+ stats.
+
+
+ The original Hemolog was built with the help of a contract
+ developer. This time around I've designed and built everything from
+ the ground up with the purpose of being the best place to store your
+ treatment data and learn from it.
+
+ I designed Hemolog to be used anywhere. That meant building a web
+ app verses an iPhone, Android, or some hybrid app.
+
+ >
+ ),
+ },
+ 'monoclonal-antibodies': {
+ title: 'A brand new treatment type',
+ subtitle:
+ "It's finally here. Monoclonal antibodies officially can treat hemophilia, giving us a new method of getting our medicine in our body and a whole lot more.",
+ updateLabel: 'Update #3',
+ postId: 'post-3',
+ richResults: {
+ '@context': 'https://schema.org',
+ '@type': 'NewsArticle',
+ headline: 'A brand new treatment type',
+ image: ['https://hemolog.com/images/changelog/about-you.png'],
+ datePublished: '2020-02-05T08:00:00+08:00',
+ dateModified: '2020-02-05T09:20:00+08:00',
+ },
+ content: (
+ <>
+
+ I never thought I'd say this, but I no longer simply{' '}
+ infuse to treat bleeds. I also{' '}
+ inject.
+
+
+ That might not sound like a huge difference off the bat, but I can
+ assure you it is. Having to find a vein all the time is now a thing
+ of the past, finally we can inject subcutaneously under the skin,
+ like so many other people. I'm so excited for what this means for
+ people with bad or damage veins and kids! It's just lessens the
+ burden so much.
+
+ >
+ ),
+ },
+ 'raycast-extension': {
+ title: 'Log treatments at the speed of light',
+ subtitle:
+ 'A brand new way to log treatments, directly from your keyboard. Now available on Mac and Windows (beta) via Raycast.',
+ updateLabel: 'Update #4',
+ postId: 'post-4',
+ richResults: {
+ '@context': 'https://schema.org',
+ '@type': 'NewsArticle',
+ headline: 'Log treatments at the speed of light',
+ image: ['https://hemolog.com/images/changelog/log-treatment.png'],
+ datePublished: '2020-02-05T08:00:00+08:00',
+ dateModified: '2020-02-05T09:20:00+08:00',
+ },
+ content: (
+ <>
+
+ One of my favorite tools to use on my Mac is{' '}
+
+ Raycast
+
+ . It's a productivity tool that lets you quickly launch apps, search
+ the web, and run commands all from your keyboard.
+
+ >
+ ),
+ },
+ }
+
+ return posts[slug as keyof typeof posts] || posts['hello-world-again']
+}
+
+export default ChangelogPost
diff --git a/src/app/changelog/page.tsx b/src/app/changelog/page.tsx
new file mode 100644
index 0000000..89154bd
--- /dev/null
+++ b/src/app/changelog/page.tsx
@@ -0,0 +1,225 @@
+'use client'
+
+import Image from 'next/image'
+import BlogFooter from '@/components/blog/blogFooter'
+import PostFooter from '@/components/blog/postFooter'
+import Footer from '@/components/shared/footer'
+import StaticHeader from '@/components/shared/staticHeader'
+
+const Changelog = (): JSX.Element => {
+ return (
+
+
+
+
+
Changelog
+
+ Development blog about new features, fixes, and updates to Hemolog
+
+
+
+
+
+
+ Log treatments at the speed of light
+
+
+ A brand new way to log treatments, directly from your keyboard.
+ Now available on Mac and Windows (beta) via{' '}
+
+ Raycast
+
+ .
+
+
+
+
+ Update #4
+
+
+
+ One of my favorite tools to use on my Mac is{' '}
+
+ Raycast
+
+ . It's a productivity tool that lets you quickly launch apps,
+ search the web, and run commands all from your keyboard.
+
+ It's finally here. Monoclonal antibodies officially can treat
+ hemophilia, giving us a new method of getting our medicine in our
+ body and a whole lot more.
+
+
+
+
+ Update #3
+
+
+
+ I never thought I'd say this, but I no longer simply{' '}
+ infuse to treat bleeds. I also{' '}
+ inject.
+
+
+ That might not sound like a huge difference off the bat, but I can
+ assure you it is. Having to find a vein all the time is now a
+ thing of the past, finally we can inject subcutaneously under the
+ skin, like so many other people. I'm so excited for what this
+ means for people with bad or damage veins and kids! It's just
+ lessens the burden so much.
+
+ Hemolog is back! After 8 years, I've built a reincarnation of the
+ old iPhone app Hemolog. This time around, it does a bit more than
+ just storing your treatment logs. In this incarnation, Hemolog is
+ now a web app and helps you understand your logs by giving showing
+ you stats.
+
+
+ The original Hemolog was built with the help of a contract
+ developer. This time around I've designed and built everything
+ from the ground up with the purpose of being the best place to
+ store your treatment data and learn from it.
+
+ Nothing could be found at this address. Please make sure the URL
+ matches the link provided on the Hemolog Emergency Card.
+
+
+ )}
+
+ {mounted && person && }
+
+
+
+ )
+}
+
+export default Emergency
diff --git a/src/app/emergency/print/page.tsx b/src/app/emergency/print/page.tsx
new file mode 100644
index 0000000..903b70a
--- /dev/null
+++ b/src/app/emergency/print/page.tsx
@@ -0,0 +1,55 @@
+'use client'
+
+import EmergencyCard from '@/components/home/emergencyCard'
+import Logo from '@/components/shared/logo'
+
+export default function Print(): JSX.Element {
+ // TODO(michael) Could improve this by determining the user on the server side
+ // and redirecting before hitting this page. Similar to how Lee Robinson explains
+ // it here https://www.youtube.com/watch?v=NSR_Y_rm_zU
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print and cut your emergency card
+
+
+ To print, go to File {'>'} Print, or hit Control + P{' '}
+ (Command on Mac).
+
+
+ )
+}
+
+export default withAuth(Home)
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
new file mode 100644
index 0000000..7c8ecfe
--- /dev/null
+++ b/src/app/layout.tsx
@@ -0,0 +1,74 @@
+import type { Metadata } from 'next'
+import { Nanum_Pen_Script } from 'next/font/google'
+import { Providers } from './providers'
+import './globals.css'
+
+const nanumPenScript = Nanum_Pen_Script({
+ weight: '400',
+ subsets: ['latin'],
+ display: 'swap',
+ variable: '--font-nanum-pen-script',
+})
+
+export const metadata: Metadata = {
+ title: 'Hemolog',
+ description:
+ 'Back and better than ever! Hemolog 2 provides real-time insights on your hemophilia treatment regimen for free.',
+ openGraph: {
+ url: 'https://hemolog.com',
+ type: 'website',
+ title: 'Hemolog 2',
+ description:
+ 'Back and better than ever! Hemolog 2 provides real-time insights on your hemophilia treatment regimen for free.',
+ images: [
+ {
+ url: 'https://hemolog.com/images/og-image.png',
+ },
+ ],
+ },
+ twitter: {
+ card: 'summary_large_image',
+ title: 'Hemolog 2',
+ description:
+ 'Back and better than ever! Hemolog 2 provides real-time insights on your hemophilia treatment regimen for free.',
+ images: [
+ {
+ url: 'https://hemolog.com/images/og-image.png',
+ },
+ ],
+ },
+ icons: {
+ apple: '/images/apple-touch-icon.png',
+ icon: [
+ {
+ url: '/images/favicon-32x32.png',
+ sizes: '32x32',
+ type: 'image/png',
+ },
+ {
+ url: '/images/favicon-16x16.png',
+ sizes: '16x16',
+ type: 'image/png',
+ },
+ ],
+ },
+ manifest: '/manifest.json',
+ other: {
+ 'mobile-web-app-capable': 'yes',
+ 'apple-mobile-web-app-capable': 'yes',
+ },
+}
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode
+}) {
+ return (
+
+
+ {children}
+
+
+ )
+}
diff --git a/pages/404.tsx b/src/app/not-found.tsx
similarity index 66%
rename from pages/404.tsx
rename to src/app/not-found.tsx
index d03fd74..5056c81 100644
--- a/pages/404.tsx
+++ b/src/app/not-found.tsx
@@ -1,8 +1,10 @@
+'use client'
+
+import { useRouter } from 'next/navigation'
import { useEffect } from 'react'
-import { useRouter } from 'next/router'
-import { withAuth } from 'components/withAuth'
-import { useAuth } from 'lib/auth'
-import LoadingScreen from 'components/loadingScreen'
+import LoadingScreen from '@/components/shared/loadingScreen'
+import { withAuth } from '@/components/shared/withAuth'
+import { useAuth } from '@/lib/auth'
function Custom404(): JSX.Element {
const router = useRouter()
diff --git a/src/app/page.tsx b/src/app/page.tsx
new file mode 100644
index 0000000..168281a
--- /dev/null
+++ b/src/app/page.tsx
@@ -0,0 +1,57 @@
+import Image from 'next/image'
+import Link from 'next/link'
+import DescriptionCards from '@/components/landing/descriptionCards'
+import Footer from '@/components/shared/footer'
+import StaticHeader from '@/components/shared/staticHeader'
+
+export default function Landing(): JSX.Element {
+ return (
+
+
+
+ {/* Background illustration */}
+
+
+
+
+ {/* Content */}
+
+
+ TREATMENT INSIGHTS
+ THAT MATTER
+
+
+ The last treatment log you'll ever need.
+
+
+
+
+ Log your treatments and get fantastic insights that help you
+ change your habits.
+
+ Sign up for free and start using the newest version of Hemolog
+ today!
+
+
+
+ Learn more about the Hemolog story...
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/app/providers.tsx b/src/app/providers.tsx
new file mode 100644
index 0000000..2857c69
--- /dev/null
+++ b/src/app/providers.tsx
@@ -0,0 +1,29 @@
+'use client'
+
+import { useEffect } from 'react'
+import { Toaster } from 'react-hot-toast'
+import { AuthProvider } from '@/lib/auth'
+import { ThemeProvider } from '@/lib/contexts/ThemeContext'
+import { QueryProvider } from '@/lib/providers/query-provider'
+
+export function Providers({ children }: { children: React.ReactNode }) {
+ useEffect(() => {
+ document.body.setAttribute('data-hydrated', 'true')
+ }, [])
+
+ return (
+
+
+
+
+ {children}
+
+
+
+ )
+}
diff --git a/src/app/signin/page.tsx b/src/app/signin/page.tsx
new file mode 100644
index 0000000..25e595f
--- /dev/null
+++ b/src/app/signin/page.tsx
@@ -0,0 +1,104 @@
+'use client'
+
+import { useRouter } from 'next/navigation'
+import { useEffect } from 'react'
+import Footer from '@/components/shared/footer'
+import LoadingScreen from '@/components/shared/loadingScreen'
+import Logo from '@/components/shared/logo'
+import { withAuth } from '@/components/shared/withAuth'
+import { useAuth } from '@/lib/auth'
+
+const Signin = () => {
+ const auth = useAuth()
+ const router = useRouter()
+ const version = process.env.npm_package_version
+
+ // Redirect authenticated users to home
+ useEffect(() => {
+ if (auth.user && !auth.loading) {
+ router.replace('/home')
+ }
+ }, [auth.user, auth.loading, router])
+
+ // Show loading while checking auth state or redirecting
+ if (auth.loading || auth.user) {
+ return
+ }
+
+ return (
+
+
+
+ >
+ )
+}
diff --git a/src/components/emergency/emergencyInfo.tsx b/src/components/emergency/emergencyInfo.tsx
new file mode 100644
index 0000000..f991d80
--- /dev/null
+++ b/src/components/emergency/emergencyInfo.tsx
@@ -0,0 +1,140 @@
+import React from 'react'
+import TreatmentTable from '@/components/home/treatmentTable'
+import { useAuth } from '@/lib/auth'
+import type { Person } from '@/lib/types/person'
+
+interface Props {
+ person: Person
+}
+
+export default function EmergencyInfo(props: Props): JSX.Element {
+ const { person } = props
+ const { user } = useAuth()
+ const [smallerThanSmall, setSmallerThanSmall] = React.useState(false)
+
+ React.useEffect(() => {
+ const checkMobile = () => {
+ setSmallerThanSmall(window.innerWidth < 640) // Tailwind's sm breakpoint
+ }
+
+ checkMobile()
+ window.addEventListener('resize', checkMobile)
+ return () => window.removeEventListener('resize', checkMobile)
+ }, [])
+
+ if (person) {
+ return (
+ <>
+
+ {person.photoUrl ? (
+
+ ) : (
+
+ {person.name?.charAt(0) || '?'}
+
+ )}
+
+
+
{person.name}
+
+ {person.severity} Hemophilia {person.hemophiliaType}, treat with
+ factor {person.factor}
+
+
+
+
+
+
+
Most recent treatments
+
+ {smallerThanSmall && 'Swipe →'}
+
+
+ {person.uid ? (
+
+ ) : (
+
+
Warning
+
+ User ID is missing. Treatment data cannot be loaded.
+
+
+ )}
+
+
+
Note
+
+ Pay attention to the date on each of these logs. We're only showing
+ you the 3 most recent logs. If
+ you want to see more,{' '}
+ {person.name?.split(' ')[0]} will
+ have to give you permission.
+
+
+
+
+
+ {user && (
+ <>
+
+ Emergency contacts (coming soon)
+
+
+ Soon you'll be able to add these from your settings page.
+
+ >
+ )}
+
+ {/* NOTE(michael) remember when you implement this that you remember
+ to update the example logic on /emergency/alertId as to not
+ leak my actual emergency contact's info */}
+
+ {/*
+
+
+
+ Jenifer Schultz
+
+
+ 555-555-5555
+
+
+
+
+
+ Mike Schultz
+
+
+ 555-555-5555
+
+
+ */}
+ >
+ )
+ }
+
+ return (
+
+ Used to access the (limited) Hemolog API. No documentation exists yet
+ but you can find more info inside the readme on Github.
+
+
+
+
+
In case of emergency
+
+ A medical worker can simply type in the URL listed on the card, or
+ easier scan the QR code with their phone. This gives the worker a
+ quick summary of all your info including your 3 most recent logs, and
+ emergency contacts. These features aren't available with Medic Alert.
+
+
+
+
+
+
+
+
+
+
+
+
Delete account
+
+ Deleting your account removes your profile, treatments, and emergency
+ info forever. This action cannot be undone.
+
+
+
+
+
+ {deleteModalVisible && (
+
+
+
Delete your account?
+
+ This permanently deletes your Hemolog data and cannot be reversed.
+ You will need to create a new account to return.
+
+ )
+}
diff --git a/src/components/home/stats.tsx b/src/components/home/stats.tsx
new file mode 100644
index 0000000..afcf344
--- /dev/null
+++ b/src/components/home/stats.tsx
@@ -0,0 +1,188 @@
+import { useState } from 'react'
+import _ from 'underscore'
+import FeedbackModal from '@/components/home/feedbackModal'
+import StatCard from '@/components/home/statCard'
+import { TreatmentTypeEnum } from '@/lib/db/treatments'
+import { filterTreatments } from '@/lib/helpers'
+import { useTreatmentsQuery } from '@/lib/hooks/useTreatmentsQuery'
+
+// TODO(michael) move types to types file
+type Value = string[]
+
+interface ValueRanges {
+ range: string
+ majorDimension: string
+ values: Value[]
+}
+
+export interface TreatmentSheet {
+ error?: Error
+ spreadsheetId: string
+ valueRanges: ValueRanges[]
+}
+
+// TODO(michael) create array of factor brands with associated prices
+// const PHARMACY_ORDERS = 6
+const COST_OF_FACTOR = 1.66
+
+interface StatsProps {
+ filterYear: string
+}
+
+export default function Stats(props: StatsProps): JSX.Element {
+ const { filterYear } = props
+ const { data, isLoading, isError, error } = useTreatmentsQuery()
+
+ const filteredTreatments = filterTreatments(data, filterYear)
+
+ // TODO(michael): Remove the feedback modal from this component at some point
+ // since we already use it in the footer, maybe figure out a way to share
+ // the modal across multiple components my lifting it up into context.
+ const [feedbackModal, setFeedbackModal] = useState(false)
+
+ if (isLoading) {
+ return (
+
+
+
+
+
+
+
+
+
+
+ )
+ }
+
+ if (isError || error) {
+ return (
+
+
Error
+
+ Oops, the database didn't respond. Refresh the page to try again.
+
+
+ )
+ }
+
+ // TODO(michael) there has to be a better way to understand this data without
+ // iterating through it so many times. Iterating through it once would be a lot better
+ // but doing it on the server would be even better.
+
+ // Another idea could be to make all these cards individual components as the logic
+ // could get a lot more complicated for some of them.
+
+ const numberOfTreatments = filteredTreatments.length
+ const affectedAreas = filteredTreatments.map((entry) => entry.sites)
+ const causes = filteredTreatments.map((entry) => entry.cause)
+ const numberOfBleeds = filteredTreatments.filter(
+ (entry) => entry.type === TreatmentTypeEnum.BLEED
+ ).length
+ const mostAffectedArea = _.chain(affectedAreas)
+ .compact()
+ .countBy()
+ .pairs()
+ .max(_.last)
+ .head()
+ .value()
+
+ const biggestCause = _.chain(causes)
+ .compact()
+ .countBy()
+ .pairs()
+ .max(_.last)
+ .head()
+ .value()
+
+ const consecutiveProphyTreatments = (): number => {
+ let longestStreak = 0
+ let currentStreak = 0
+
+ for (const entry of filteredTreatments) {
+ const isProphy = entry.type === TreatmentTypeEnum.PROPHY
+
+ if (isProphy) {
+ currentStreak++
+ } else {
+ currentStreak = 0
+ }
+
+ if (currentStreak > longestStreak) {
+ longestStreak = currentStreak
+ }
+ }
+
+ return longestStreak
+ }
+
+ const getTotalUnits = () => {
+ let units = 0
+ for (const entry of filteredTreatments) {
+ units += entry.medication.units
+ }
+
+ return units
+ }
+
+ const totalUnits = getTotalUnits()
+ const estimatedTotalCost = totalUnits * COST_OF_FACTOR
+
+ return (
+ <>
+
+
+
+
+
+
+
+ {/* I think this is between $1.19 and $1.66 per unit based on this article
+ https://www.ashclinicalnews.org/spotlight/feature-articles/high-price-hemophilia/ */}
+
+
+
+ Current
+
+
+
+
Missing something?
+
+
+
+
+ {/*
+ TODO(michael) could setup a separate collection for this data as well as a
+ separate api call
+
+
+ Oops, the database didn't respond. Refresh the page to try again.
+
+
+ )
+ }
+
+ // Show empty state if query completed successfully but no treatments found
+ if (!treatments || treatments.length === 0) {
+ const emptyMessage = isLoggedInUser
+ ? "You haven't logged any treatments yet. Add one by clicking 'New Treatment' above."
+ : 'This person has not logged any treatments yet.'
+
+ return (
+
+ )
+}
diff --git a/src/components/shared/footer.tsx b/src/components/shared/footer.tsx
new file mode 100644
index 0000000..bebea68
--- /dev/null
+++ b/src/components/shared/footer.tsx
@@ -0,0 +1,82 @@
+'use client'
+
+// All Geist UI components have been migrated to Tailwind
+
+import { useEffect, useState } from 'react'
+import EmergencySnippet from '@/components/shared/emergencySnippet'
+import { useAuth } from '@/lib/auth'
+import { CONFIG } from '@/lib/helpers'
+
+export default function Footer(): JSX.Element {
+ const { user, loading } = useAuth()
+ const [mounted, setMounted] = useState(false)
+
+ useEffect(() => {
+ setMounted(true)
+ }, [])
+
+ // Use a consistent default during SSR and initial hydration to avoid mismatch
+ const alertId = () => {
+ if (!mounted || loading) {
+ return 'example'
+ }
+ if (user?.alertId) {
+ return user.alertId
+ }
+ return 'example'
+ }
+
+ return (
+
+ )
+}
diff --git a/src/components/shared/loadingScreen.tsx b/src/components/shared/loadingScreen.tsx
new file mode 100644
index 0000000..c7edbe7
--- /dev/null
+++ b/src/components/shared/loadingScreen.tsx
@@ -0,0 +1,10 @@
+const LoadingScreen = () => {
+ return (
+
+
+ Loading
+
+ )
+}
+
+export default LoadingScreen
diff --git a/src/components/shared/logo.tsx b/src/components/shared/logo.tsx
new file mode 100644
index 0000000..5971623
--- /dev/null
+++ b/src/components/shared/logo.tsx
@@ -0,0 +1,19 @@
+import Image from 'next/image'
+import Link from 'next/link'
+
+export default function Logo() {
+ return (
+
+
+
+ )
+}
diff --git a/src/components/shared/staticHeader.tsx b/src/components/shared/staticHeader.tsx
new file mode 100644
index 0000000..7d3ecb0
--- /dev/null
+++ b/src/components/shared/staticHeader.tsx
@@ -0,0 +1,46 @@
+'use client'
+
+import { useRouter } from 'next/navigation'
+import { useEffect, useState } from 'react'
+import Logo from '@/components/shared/logo'
+import { useAuth } from '@/lib/auth'
+
+const StaticHeader = (): JSX.Element => {
+ const { user, loading } = useAuth()
+ const router = useRouter()
+ const [mounted, setMounted] = useState(false)
+
+ useEffect(() => {
+ setMounted(true)
+ }, [])
+
+ // Use consistent "Loading..." state during SSR and initial hydration
+ const isLoading = !mounted || loading
+
+ return (
+
+
+
+
+
+
+ )
+}
+
+export default StaticHeader
diff --git a/src/components/shared/withAuth.tsx b/src/components/shared/withAuth.tsx
new file mode 100644
index 0000000..a953928
--- /dev/null
+++ b/src/components/shared/withAuth.tsx
@@ -0,0 +1,22 @@
+'use client'
+
+import type { ComponentType } from 'react'
+
+// HOC that marks a page as needing auth
+// Note: AuthProvider is now provided at the root layout level via Providers
+// This HOC is kept for backward compatibility and can be used for additional auth logic
+export function withAuth
(
+ WrappedComponent: ComponentType
+): ComponentType
{
+ const WithAuthComponent = (props: P) => {
+ // Simply render the wrapped component - AuthProvider is already at root level
+ return
+ }
+
+ // Copy display name for debugging
+ const displayName =
+ WrappedComponent.displayName || WrappedComponent.name || 'Component'
+ WithAuthComponent.displayName = `withAuth(${displayName})`
+
+ return WithAuthComponent
+}
diff --git a/global.d.ts b/src/global.d.ts
similarity index 100%
rename from global.d.ts
rename to src/global.d.ts
diff --git a/lib/admin-db/feedback.ts b/src/lib/admin-db/feedback.ts
similarity index 91%
rename from lib/admin-db/feedback.ts
rename to src/lib/admin-db/feedback.ts
index 8387d16..cca874a 100644
--- a/lib/admin-db/feedback.ts
+++ b/src/lib/admin-db/feedback.ts
@@ -1,6 +1,6 @@
-import { adminFirestore } from 'lib/firebase-admin'
import { compareAsc, compareDesc, parseISO } from 'date-fns'
-import type { FeedbackType } from 'lib/db/feedback'
+import type { FeedbackType } from '@/lib/db/feedback'
+import { adminFirestore } from '@/lib/firebase-admin'
async function getAllFeedback() {
try {
diff --git a/lib/admin-db/infusions.ts b/src/lib/admin-db/treatments.ts
similarity index 57%
rename from lib/admin-db/infusions.ts
rename to src/lib/admin-db/treatments.ts
index aeff44b..921b12d 100644
--- a/lib/admin-db/infusions.ts
+++ b/src/lib/admin-db/treatments.ts
@@ -1,44 +1,43 @@
-import { adminFirestore } from 'lib/firebase-admin'
import { compareDesc, parseISO } from 'date-fns'
+import { adminFirestore } from '@/lib/firebase-admin'
+import type { AttachedUserType } from '@/lib/types/users'
+import { type TreatmentType, TreatmentTypeEnum } from '../db/treatments'
-import { TreatmentTypeEnum, type TreatmentType } from '../db/infusions'
-import type { AttachedUserType } from 'lib/types/users'
-
-async function getAllInfusions() {
+async function getAllTreatments() {
const snapshot = await adminFirestore.collection('infusions').get()
- const infusions: TreatmentType[] = []
+ const treatments: TreatmentType[] = []
snapshot.forEach((doc) => {
- infusions.push({ id: doc.id, ...doc.data() } as TreatmentType & {
+ treatments.push({ id: doc.id, ...doc.data() } as TreatmentType & {
id: string
})
})
- return { infusions }
+ return { treatments }
}
-async function getInfusion(infusionId: string) {
+async function getTreatment(treatmentId: string) {
const snapshot = await adminFirestore
.collection('infusions')
- .where('uid', '==', infusionId)
+ .where('uid', '==', treatmentId)
.get()
- const infusions: TreatmentType[] = []
+ const treatments: TreatmentType[] = []
snapshot.forEach((doc) => {
- infusions.push({ id: doc.id, ...doc.data() } as TreatmentType & {
+ treatments.push({ id: doc.id, ...doc.data() } as TreatmentType & {
id: string
})
})
- infusions.sort((a: TreatmentType, b: TreatmentType) =>
+ treatments.sort((a: TreatmentType, b: TreatmentType) =>
compareDesc(parseISO(a.createdAt), parseISO(b.createdAt))
)
- return { infusions }
+ return { treatments }
}
-async function getAllInfusionsByApiKey(apiKey: string) {
+async function getAllTreatmentsByApiKey(apiKey: string) {
try {
const userSnapshot = await adminFirestore
.collection('users')
@@ -60,21 +59,21 @@ async function getAllInfusionsByApiKey(apiKey: string) {
.orderBy('date', 'desc')
.get()
- const infusions: TreatmentType[] = []
+ const treatments: TreatmentType[] = []
snapshot.forEach((doc) => {
- infusions.push({ id: doc.id, ...doc.data() } as TreatmentType & {
+ treatments.push({ id: doc.id, ...doc.data() } as TreatmentType & {
id: string
})
})
- return { infusions }
+ return { treatments }
} catch (error) {
return { error }
}
}
-async function getRecentUserInfusionsByApiKey(
+async function getRecentUserTreatmentsByApiKey(
apiKey?: string,
alertId?: string
) {
@@ -96,37 +95,37 @@ async function getRecentUserInfusionsByApiKey(
.collection('infusions')
.where('user.uid', '==', user.uid)
.where('deletedAt', '==', null)
- // TODO: Need to add a timestamp value to each infusion and replace createdAt
+ // TODO: Need to add a timestamp value to each treatment and replace createdAt
// .orderBy('timestamp', 'asc')
// .limitToLast(3)
.get()
- const infusions: TreatmentType[] = []
+ const treatments: TreatmentType[] = []
// TODO: Find out why I was adding an id here.
// The doc.id should already be available as the uid.
// Removing for now.
snapshot.forEach((doc) => {
- // infusions.push({ id: doc.id, ...doc.data() })
- infusions.push(doc.data() as TreatmentType)
+ // treatments.push({ id: doc.id, ...doc.data() })
+ treatments.push(doc.data() as TreatmentType)
})
// TODO: remove this hack after fixing the orderBy issue above
- infusions.sort((a: TreatmentType, b: TreatmentType) =>
+ treatments.sort((a: TreatmentType, b: TreatmentType) =>
compareDesc(parseISO(a.createdAt), parseISO(b.createdAt))
)
- infusions.length = 3
+ treatments.length = 3
- return { infusions }
+ return { treatments }
} catch (error) {
return { error }
}
}
-async function postInfusionByApiKey(
+async function postTreatmentByApiKey(
apiKey: string,
- lastInfusion: TreatmentType | null,
- newInfusion: Partial
+ lastTreatment: TreatmentType | null,
+ newTreatment: Partial
) {
try {
const userSnapshot = await adminFirestore
@@ -150,42 +149,42 @@ async function postInfusionByApiKey(
}
const now = new Date().toISOString()
- const baseInfusion: TreatmentType = lastInfusion
- ? { ...lastInfusion }
+ const baseTreatment: TreatmentType = lastTreatment
+ ? { ...lastTreatment }
: {
cause: '',
createdAt: now,
- date: newInfusion.date || now.slice(0, 10),
+ date: newTreatment.date || now.slice(0, 10),
deletedAt: null,
medication: {
- brand: newInfusion.medication?.brand || '',
- costPerUnit: newInfusion.medication?.costPerUnit,
- lot: newInfusion.medication?.lot,
- units: newInfusion.medication?.units || 0,
+ brand: newTreatment.medication?.brand || '',
+ costPerUnit: newTreatment.medication?.costPerUnit,
+ lot: newTreatment.medication?.lot,
+ units: newTreatment.medication?.units || 0,
},
sites: '',
- type: newInfusion.type || TreatmentTypeEnum.PROPHY,
- user: (newInfusion.user as AttachedUserType) || baseUser,
+ type: newTreatment.type || TreatmentTypeEnum.PROPHY,
+ user: (newTreatment.user as AttachedUserType) || baseUser,
}
const sanitizedBase = {
- ...baseInfusion,
+ ...baseTreatment,
createdAt: now,
- cause: baseInfusion.cause || '',
- sites: baseInfusion.sites || '',
+ cause: baseTreatment.cause || '',
+ sites: baseTreatment.sites || '',
deletedAt: null,
- user: baseInfusion.user || baseUser,
+ user: baseTreatment.user || baseUser,
}
delete (sanitizedBase as Partial).uid
- const infusion: TreatmentType = {
+ const treatment: TreatmentType = {
...sanitizedBase,
- ...newInfusion,
- user: (newInfusion.user as AttachedUserType) || sanitizedBase.user,
+ ...newTreatment,
+ user: (newTreatment.user as AttachedUserType) || sanitizedBase.user,
medication: {
...sanitizedBase.medication,
- ...(newInfusion.medication || {}),
+ ...(newTreatment.medication || {}),
},
createdAt: now,
deletedAt: null,
@@ -193,21 +192,21 @@ async function postInfusionByApiKey(
await adminFirestore
.collection('infusions')
- .add(infusion)
+ .add(treatment)
.then((docRef) => {
- docRef.set({ uid: docRef.id, ...infusion })
+ docRef.set({ uid: docRef.id, ...treatment })
})
- return { infusion: { message: 'Success' } }
+ return { treatment: { message: 'Success' } }
} catch (error) {
return { error }
}
}
export {
- getAllInfusions,
- getAllInfusionsByApiKey,
- getInfusion,
- getRecentUserInfusionsByApiKey,
- postInfusionByApiKey,
+ getAllTreatments,
+ getAllTreatmentsByApiKey,
+ getTreatment,
+ getRecentUserTreatmentsByApiKey,
+ postTreatmentByApiKey,
}
diff --git a/lib/admin-db/users.ts b/src/lib/admin-db/users.ts
similarity index 91%
rename from lib/admin-db/users.ts
rename to src/lib/admin-db/users.ts
index 8e4e07e..240e96a 100644
--- a/lib/admin-db/users.ts
+++ b/src/lib/admin-db/users.ts
@@ -1,4 +1,4 @@
-import { auth, adminFirestore } from 'lib/firebase-admin'
+import { adminFirestore, auth } from '@/lib/firebase-admin'
const BATCH_LIMIT = 400
@@ -49,13 +49,13 @@ async function deleteUserAndData(uid: string) {
// Auth user deleted (or didn't exist), now safe to delete Firestore data
const userDocRef = adminFirestore.collection('users').doc(uid)
- const infusionSnapshot = await adminFirestore
+ const treatmentSnapshot = await adminFirestore
.collection('infusions')
.where('user.uid', '==', uid)
.get()
const docRefs: FirebaseFirestore.DocumentReference[] = [userDocRef]
- infusionSnapshot.forEach((docSnapshot) => {
+ treatmentSnapshot.forEach((docSnapshot) => {
docRefs.push(docSnapshot.ref)
})
diff --git a/src/lib/auth.tsx b/src/lib/auth.tsx
new file mode 100644
index 0000000..26a3f79
--- /dev/null
+++ b/src/lib/auth.tsx
@@ -0,0 +1,453 @@
+'use client'
+
+import {
+ createUserWithEmailAndPassword,
+ signOut as firebaseSignOut,
+ GoogleAuthProvider,
+ onIdTokenChanged,
+ signInWithEmailAndPassword,
+ signInWithPopup,
+ type User,
+} from 'firebase/auth'
+import cookie from 'js-cookie'
+import { usePathname, useRouter } from 'next/navigation'
+import {
+ createContext,
+ useCallback,
+ useContext,
+ useEffect,
+ useState,
+} from 'react'
+import LoadingScreen from '@/components/shared/loadingScreen'
+import { createUser, fetchUserByUid } from '@/lib/db/users'
+import { getAuth } from '@/lib/firebase'
+import { generateUniqueString } from '@/lib/helpers'
+import type { UserType } from '@/lib/types/users'
+
+type ContextProps = {
+ user: UserType | null
+ loading?: boolean
+ signout: () => Promise
+ signinWithGoogle: (redirect: string) => Promise
+ signinWithTestUser: () => Promise
+}
+
+const authContext = createContext>({
+ user: null,
+ loading: true, // Start with true to wait for auth state
+})
+
+export function AuthProvider({
+ children,
+}: {
+ children: React.ReactNode
+}): React.ReactElement {
+ const auth = useProvideAuth()
+ // Always provide the context with consistent initial values
+ // This ensures server and client render the same initial state
+ return {children}
+}
+
+export const useAuth = () => useContext(authContext)
+
+let globalUser: UserType | null = null
+let globalLoading = true // Start with true to wait for auth state to be determined
+let authListenerInitialized = false
+
+function useProvideAuth() {
+ const [user, setUser] = useState(globalUser)
+ const [loading, setLoading] = useState(globalLoading)
+ const [pendingRedirect, setPendingRedirect] = useState(null)
+ const router = useRouter()
+
+ // Handle pending redirects after user state is set
+ useEffect(() => {
+ if (pendingRedirect && user && !loading) {
+ router.push(pendingRedirect)
+ setPendingRedirect(null)
+ }
+ }, [user, loading, pendingRedirect, router])
+
+ const handleUser = useCallback(async (rawUser: User | null) => {
+ if (rawUser) {
+ let formattedUser: UserType
+ try {
+ formattedUser = await formatUser(rawUser)
+ } catch (error) {
+ console.error('Error formatting user:', error)
+ // If formatting fails, still set loading to false to unblock UI
+ globalLoading = false
+ setLoading(false)
+ return false
+ }
+
+ try {
+ // Fetch user data from Firestore using Firestore Lite with timeout
+ const dbUser = await withTimeout(
+ fetchUserByUid(formattedUser.uid),
+ 5000
+ )
+
+ const { ...userWithoutToken } = formattedUser
+
+ if (dbUser) {
+ formattedUser.alertId = dbUser.alertId
+ formattedUser.isAdmin = (dbUser as unknown as UserType).isAdmin
+ formattedUser.apiKey = dbUser.apiKey
+ formattedUser.medication = dbUser.medication || ''
+ formattedUser.monoclonalAntibody = dbUser.monoclonalAntibody || ''
+ delete userWithoutToken.alertId
+ // Only update if document exists but might be missing fields
+ // Don't update on every auth token change to prevent loops
+ } else {
+ // Only create user document if it doesn't exist
+ await createUser(formattedUser.uid, userWithoutToken)
+ }
+ } catch (error) {
+ // Handle offline/connection/timeout errors gracefully
+ // These errors are expected when emulator isn't running, connection is temporarily unavailable,
+ // or operations take too long on page refresh
+ const errorMessage =
+ error instanceof Error ? error.message : String(error)
+ const isExpectedError =
+ errorMessage.includes('offline') ||
+ errorMessage.includes('unavailable') ||
+ errorMessage.includes('Failed to get document') ||
+ errorMessage.includes('Could not reach Cloud Firestore backend') ||
+ errorMessage.includes('Firestore not available') ||
+ errorMessage.includes('timed out')
+
+ if (isExpectedError) {
+ // Don't log these errors - they're expected in development when emulator isn't running
+ // or when connection is temporarily unavailable
+ console.warn('Firestore operation skipped:', errorMessage)
+ } else {
+ // Only log unexpected errors
+ console.error('Error handling user Firestore operations:', error)
+ }
+ // Continue even if Firestore operations fail - user can still sign in
+ // The user document will be created on next sign-in attempt or when connection is restored
+ }
+
+ globalUser = formattedUser
+ globalLoading = false
+ setUser(formattedUser)
+ setLoading(false)
+
+ cookie.set('hemolog-auth', {
+ expires: 1,
+ })
+
+ return formattedUser
+ } else {
+ globalUser = null
+ globalLoading = false
+ setUser(null)
+ setLoading(false)
+
+ cookie.remove('hemolog-auth')
+
+ return false
+ }
+ }, [])
+
+ const signinWithGoogle = async (redirect: string) => {
+ if (process.env.NEXT_PUBLIC_USE_EMULATORS) {
+ console.warn(
+ 'Google sign-in is disabled when NEXT_PUBLIC_USE_EMULATORS is enabled. Use the Test User button instead.'
+ )
+ setLoading(false)
+ return
+ }
+
+ setLoading(true)
+ const auth = getAuth()
+
+ if (!auth) {
+ console.error('Firebase auth not available for Google sign-in')
+ setLoading(false)
+ return
+ }
+
+ try {
+ const provider = new GoogleAuthProvider()
+ const result = await signInWithPopup(auth, provider)
+ await handleUser(result.user)
+
+ if (redirect) {
+ router.push(redirect)
+ }
+ } catch (error) {
+ console.error('Google sign-in error:', error)
+ setLoading(false)
+ }
+ }
+
+ const signinWithTestUser = async () => {
+ setLoading(true)
+
+ if (typeof window === 'undefined') {
+ console.error('Error: Cannot sign in on server-side')
+ setLoading(false)
+ return
+ }
+
+ const auth = getAuth()
+
+ if (!auth) {
+ console.error(
+ 'Error: Firebase auth not available. Make sure Firebase is initialized and emulator is running.'
+ )
+ setLoading(false)
+ return
+ }
+
+ const testEmail = 'michael+test@hemolog.com'
+ const testPassword = 'test123'
+
+ try {
+ const signInResponse = await signInWithEmailAndPassword(
+ auth,
+ testEmail,
+ testPassword
+ )
+ if (signInResponse.user) {
+ await handleUser(signInResponse.user)
+ // Set pending redirect - will navigate after state is updated
+ setPendingRedirect('/home')
+ return
+ }
+ } catch (signInError: unknown) {
+ const error =
+ signInError && typeof signInError === 'object' && 'code' in signInError
+ ? (signInError as { code?: string })
+ : null
+
+ const isUserNotFound =
+ error?.code === 'auth/user-not-found' ||
+ error?.code === 'auth/invalid-credential'
+
+ if (!isUserNotFound) {
+ console.error('Sign in error:', signInError)
+ setLoading(false)
+ return
+ }
+
+ try {
+ const createResponse = await createUserWithEmailAndPassword(
+ auth,
+ testEmail,
+ testPassword
+ )
+ if (createResponse.user) {
+ await handleUser(createResponse.user)
+ // Set pending redirect - will navigate after state is updated
+ setPendingRedirect('/home')
+ return
+ }
+ } catch (createError: unknown) {
+ const createErr =
+ createError &&
+ typeof createError === 'object' &&
+ 'code' in createError
+ ? (createError as { code?: string })
+ : null
+
+ if (createErr?.code === 'auth/email-already-in-use') {
+ try {
+ const retrySignIn = await signInWithEmailAndPassword(
+ auth,
+ testEmail,
+ testPassword
+ )
+ if (retrySignIn.user) {
+ await handleUser(retrySignIn.user)
+ // Set pending redirect - will navigate after state is updated
+ setPendingRedirect('/home')
+ return
+ }
+ } catch (retryError) {
+ console.error('Retry sign in error:', retryError)
+ }
+ } else {
+ console.error('Create user error:', createError)
+ }
+ setLoading(false)
+ }
+ }
+ }
+
+ const signout = async () => {
+ router.push('/signin')
+ const auth = getAuth()
+ if (!auth) {
+ await handleUser(null)
+ return
+ }
+ await firebaseSignOut(auth)
+ await handleUser(null)
+ }
+
+ // biome-ignore lint/correctness/useExhaustiveDependencies: Will cause infinite loop
+ useEffect(() => {
+ if (typeof window === 'undefined') {
+ // On server, keep loading true (will be set to false on client)
+ return
+ }
+
+ const auth = getAuth()
+
+ if (!auth) {
+ globalLoading = false
+ setLoading(false)
+ return
+ }
+
+ if (globalUser && !user) {
+ setUser(globalUser)
+ setLoading(false)
+ return
+ }
+
+ if (authListenerInitialized) {
+ // Sync state with global state if it changed
+ // Use functional updates to avoid needing user in dependencies
+ setUser((currentUser) => {
+ if (currentUser !== globalUser) {
+ return globalUser
+ }
+ return currentUser
+ })
+ setLoading((currentLoading) => {
+ if (currentLoading !== globalLoading) {
+ return globalLoading
+ }
+ return currentLoading
+ })
+ return
+ }
+
+ // Initialize auth listener - it will call handleUser when auth state is determined
+ // This restores the user from Firebase Auth persistence on page refresh
+ // The listener fires immediately with the current user (if any) and then on changes
+ authListenerInitialized = true
+ const unsubscribe = onIdTokenChanged(auth, (firebaseUser) => {
+ // This will be called immediately with current user (or null) and then on changes
+ // Wrap in async IIFE to properly handle errors and prevent unhandled rejections
+ ;(async () => {
+ try {
+ await handleUser(firebaseUser)
+ } catch (error) {
+ console.error('Error in auth state handler:', error)
+ // Ensure loading state is set to false even if handleUser fails
+ globalLoading = false
+ setLoading(false)
+ }
+ })()
+ })
+
+ return () => {
+ unsubscribe()
+ authListenerInitialized = false
+ }
+ }, [handleUser]) // Only depend on handleUser to prevent re-initialization
+
+ return {
+ user,
+ loading,
+ signinWithGoogle,
+ signinWithTestUser,
+ signout,
+ }
+}
+
+// Helper to add timeout to a promise
+function withTimeout(promise: Promise, timeoutMs: number): Promise {
+ return Promise.race([
+ promise,
+ new Promise((_, reject) =>
+ setTimeout(
+ () => reject(new Error(`Operation timed out after ${timeoutMs}ms`)),
+ timeoutMs
+ )
+ ),
+ ])
+}
+
+const formatUser = async (rawUser: User): Promise => {
+ let token = ''
+ try {
+ // Add 5 second timeout to token retrieval to prevent hanging on page refresh
+ const idTokenResult = await withTimeout(rawUser.getIdTokenResult(), 5000)
+ token = idTokenResult.token
+ } catch (error) {
+ // Token retrieval failed or timed out, continue without token
+ console.warn(
+ 'Token retrieval failed:',
+ error instanceof Error ? error.message : 'Unknown error'
+ )
+ }
+
+ const alertId = await generateUniqueString(6)
+
+ return {
+ alertId,
+ email: rawUser.email || '',
+ name: rawUser.displayName || '',
+ photoUrl: rawUser.photoURL || undefined,
+ provider: rawUser.providerData?.[0]?.providerId || 'password',
+ token: token || '',
+ uid: rawUser.uid,
+ }
+}
+
+export function ProtectRoute({
+ children,
+}: {
+ children: React.ReactNode
+}): React.ReactElement | null {
+ const { user, loading } = useAuth()
+ const pathname = usePathname()
+ const router = useRouter()
+ const [isRedirecting, setIsRedirecting] = useState(false)
+
+ // Handle redirect in useEffect to avoid updating Router during render
+ useEffect(() => {
+ // Don't redirect if we're already redirecting or if we're on an allowed page
+ if (
+ isRedirecting ||
+ pathname === '/signin' ||
+ pathname.includes('emergency')
+ ) {
+ return
+ }
+
+ if (!loading && !user) {
+ setIsRedirecting(true)
+ router.replace('/signin')
+ }
+ }, [loading, user, pathname, router, isRedirecting])
+
+ // Reset redirecting flag when user becomes available
+ useEffect(() => {
+ if (user) {
+ setIsRedirecting(false)
+ }
+ }, [user])
+
+ if (loading && !user) {
+ return
+ }
+
+ if (!user) {
+ // Allow access to signin and emergency pages
+ if (pathname === '/signin' || pathname.includes('emergency')) {
+ return <>{children}>
+ }
+
+ // Show loading screen while redirecting
+ return
+ }
+
+ return <>{children}>
+}
diff --git a/src/lib/contexts/ThemeContext.tsx b/src/lib/contexts/ThemeContext.tsx
new file mode 100644
index 0000000..d15d990
--- /dev/null
+++ b/src/lib/contexts/ThemeContext.tsx
@@ -0,0 +1,64 @@
+import type React from 'react'
+import { createContext, useContext, useEffect, useState } from 'react'
+
+export type Theme = 'light' | 'dark'
+
+export interface ThemeContextValue {
+ theme: Theme
+ switchTheme: () => void
+}
+
+export interface ThemeProviderProps {
+ children: React.ReactNode
+}
+
+const ThemeContext = createContext(undefined)
+
+const THEME_STORAGE_KEY = 'hemolog-theme'
+
+export function ThemeProvider({ children }: ThemeProviderProps): JSX.Element {
+ // Always start with 'light' to match server-rendered HTML
+ const [theme, setTheme] = useState('light')
+ const [mounted, setMounted] = useState(false)
+
+ // Load theme from localStorage after mount to avoid hydration mismatch
+ useEffect(() => {
+ setMounted(true)
+ const stored = localStorage.getItem(THEME_STORAGE_KEY)
+ if (stored === 'dark' || stored === 'light') {
+ setTheme(stored)
+ }
+ }, [])
+
+ useEffect(() => {
+ // Only apply theme changes after initial mount to avoid hydration issues
+ if (!mounted) return
+
+ const root = document.documentElement
+ if (theme === 'dark') {
+ root.classList.add('dark')
+ } else {
+ root.classList.remove('dark')
+ }
+ localStorage.setItem(THEME_STORAGE_KEY, theme)
+ }, [theme, mounted])
+
+ const switchTheme = (): void => {
+ setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'))
+ }
+
+ const value: ThemeContextValue = {
+ theme,
+ switchTheme,
+ }
+
+ return {children}
+}
+
+export function useTheme(): ThemeContextValue {
+ const context = useContext(ThemeContext)
+ if (context === undefined) {
+ throw new Error('useTheme must be used within a ThemeProvider')
+ }
+ return context
+}
diff --git a/src/lib/db/feedback.ts b/src/lib/db/feedback.ts
new file mode 100644
index 0000000..da79989
--- /dev/null
+++ b/src/lib/db/feedback.ts
@@ -0,0 +1,32 @@
+import {
+ createDocument,
+ deleteDocument,
+ updateDocument,
+} from '@/lib/firestore-lite'
+import type { AttachedUserType } from '@/lib/types/users'
+
+export interface FeedbackType {
+ uid?: string
+ createdAt: string
+ message: string
+ user: AttachedUserType
+}
+
+// Create a new feedback document
+export async function createFeedback(data: FeedbackType): Promise {
+ const docId = await createDocument('feedback', data)
+ return docId
+}
+
+// Delete a feedback document (hard delete)
+export async function deleteFeedback(uid: string): Promise {
+ await deleteDocument('feedback', uid)
+}
+
+// Update a feedback document
+export async function updateFeedback(
+ uid: string,
+ newValues: Partial
+): Promise {
+ await updateDocument('feedback', uid, newValues)
+}
diff --git a/src/lib/db/treatments.ts b/src/lib/db/treatments.ts
new file mode 100644
index 0000000..f8f61f9
--- /dev/null
+++ b/src/lib/db/treatments.ts
@@ -0,0 +1,71 @@
+import {
+ createDocument,
+ getDocuments,
+ softDeleteDocument,
+ updateDocument,
+ where,
+} from '@/lib/firestore-lite'
+import type { AttachedUserType } from '@/lib/types/users'
+
+export enum TreatmentTypeEnum {
+ PROPHY = 'PROPHY',
+ BLEED = 'BLEED',
+ PREVENTATIVE = 'PREVENTATIVE',
+ ANTIBODY = 'ANTIBODY',
+}
+
+export type TreatmentTypeOptions =
+ | TreatmentTypeEnum.PROPHY
+ | TreatmentTypeEnum.BLEED
+ | TreatmentTypeEnum.PREVENTATIVE
+ | TreatmentTypeEnum.ANTIBODY
+
+export interface Medication {
+ brand: string
+ costPerUnit?: number
+ lot?: string
+ units: number
+}
+
+export interface TreatmentType {
+ deletedAt: string | null
+ uid?: string
+ cause: string
+ createdAt: string
+ date: string
+ medication: Medication
+ sites: string
+ type: TreatmentTypeOptions
+ user: AttachedUserType
+}
+
+// Create a new treatment document
+export async function createTreatment(data: TreatmentType): Promise {
+ const docId = await createDocument('infusions', data)
+ return docId
+}
+
+// Soft delete a treatment (sets deletedAt timestamp)
+export async function deleteTreatment(uid: string): Promise {
+ await softDeleteDocument('infusions', uid)
+}
+
+// Update a treatment document
+export async function updateTreatment(
+ uid: string,
+ newValues: Partial
+): Promise {
+ await updateDocument('infusions', uid, newValues)
+}
+
+// Fetch treatments for a user (used by TanStack Query)
+export async function fetchTreatments(
+ userUid: string
+): Promise {
+ const treatments = await getDocuments(
+ 'infusions',
+ where('user.uid', '==', userUid),
+ where('deletedAt', '==', null)
+ )
+ return treatments
+}
diff --git a/src/lib/db/users.ts b/src/lib/db/users.ts
new file mode 100644
index 0000000..a42fb4c
--- /dev/null
+++ b/src/lib/db/users.ts
@@ -0,0 +1,70 @@
+import {
+ getDocument,
+ getDocuments,
+ limit,
+ setDocument,
+ where,
+} from '@/lib/firestore-lite'
+import type { Person } from '../types/person'
+import type { UserType } from '../types/users'
+
+// Helper to add timeout to a promise
+function withTimeout(promise: Promise, timeoutMs: number): Promise {
+ return Promise.race([
+ promise,
+ new Promise((_, reject) =>
+ setTimeout(
+ () => reject(new Error(`Operation timed out after ${timeoutMs}ms`)),
+ timeoutMs
+ )
+ ),
+ ])
+}
+
+// Create or update a user document
+export async function createUser(
+ uid: string,
+ userData: Partial
+): Promise {
+ // Remove token from userData as it shouldn't be stored in Firestore
+ const { token: _token, ...dataWithoutToken } = userData
+
+ try {
+ // Create or update user document with 10 second timeout
+ await withTimeout(
+ setDocument('users', uid, { uid, ...dataWithoutToken }),
+ 10000 // 10 second timeout
+ )
+
+ console.log('User document created/updated:', uid)
+ } catch (error) {
+ console.error('Error creating/updating user document:', error)
+ throw error
+ }
+}
+
+// Update a user document
+export async function updateUser(
+ uid: string,
+ userData: Partial
+): Promise {
+ await setDocument('users', uid, userData, true)
+}
+
+// Fetch a user by UID (used by TanStack Query)
+export async function fetchUserByUid(uid: string): Promise {
+ const user = await getDocument('users', uid)
+ return user
+}
+
+// Fetch a user by alertId (used for emergency access)
+export async function fetchUserByAlertId(
+ alertId: string
+): Promise {
+ const users = await getDocuments(
+ 'users',
+ where('alertId', '==', alertId),
+ limit(1)
+ )
+ return users.length > 0 ? users[0] : null
+}
diff --git a/lib/firebase-admin.ts b/src/lib/firebase-admin.ts
similarity index 88%
rename from lib/firebase-admin.ts
rename to src/lib/firebase-admin.ts
index 5316f46..01b4840 100644
--- a/lib/firebase-admin.ts
+++ b/src/lib/firebase-admin.ts
@@ -2,9 +2,9 @@
// Initializes firebase with admin privileges and returns both {db} used for accessing Firestore
// and {auth} use to verify logged in people.
-import { initializeApp, getApps, cert, type App } from 'firebase-admin/app'
-import { getFirestore, type Firestore } from 'firebase-admin/firestore'
-import { getAuth, type Auth } from 'firebase-admin/auth'
+import { type App, cert, getApps, initializeApp } from 'firebase-admin/app'
+import { type Auth, getAuth } from 'firebase-admin/auth'
+import { type Firestore, getFirestore } from 'firebase-admin/firestore'
const useEmulators = process.env.NEXT_PUBLIC_USE_EMULATORS === 'true'
diff --git a/src/lib/firebase.ts b/src/lib/firebase.ts
new file mode 100644
index 0000000..4b3c2a1
--- /dev/null
+++ b/src/lib/firebase.ts
@@ -0,0 +1,78 @@
+// firebase.ts
+// Initializes firebase across app for authentication only
+// Firestore operations are now handled by firestore-lite.ts
+
+import { type FirebaseApp, getApps, initializeApp } from 'firebase/app'
+import {
+ type Auth,
+ connectAuthEmulator,
+ getAuth as getFirebaseAuth,
+} from 'firebase/auth'
+
+const firebaseConfig = {
+ apiKey: process.env.NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY || 'development',
+ authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || 'localhost',
+ projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || 'hemolog',
+}
+
+let firebaseApp: FirebaseApp | null = null
+let authInstance: Auth | null = null
+let authEmulatorConnected = false
+
+function getApp(): FirebaseApp | null {
+ if (typeof window === 'undefined') {
+ return null
+ }
+
+ if (!firebaseApp) {
+ const apps = getApps()
+ if (apps.length === 0) {
+ firebaseApp = initializeApp(firebaseConfig)
+ } else {
+ firebaseApp = apps[0]
+ }
+ }
+
+ return firebaseApp
+}
+
+export function getAuth(): Auth | null {
+ if (typeof window === 'undefined') {
+ return null
+ }
+
+ const app = getApp()
+ if (!app) {
+ return null
+ }
+
+ if (!authInstance) {
+ authInstance = getFirebaseAuth(app)
+
+ // Connect to emulator if developing locally
+ const useEmulators =
+ process.env.NEXT_PUBLIC_USE_EMULATORS === 'true' ||
+ process.env.NEXT_PUBLIC_USE_EMULATORS === '1'
+
+ if (useEmulators && !authEmulatorConnected) {
+ try {
+ connectAuthEmulator(authInstance, 'http://localhost:9099', {
+ disableWarnings: true,
+ })
+ authEmulatorConnected = true
+ } catch (error) {
+ // If emulator is already connected, Firebase throws an error
+ // We can safely ignore it, but log other errors for debugging
+ if (
+ error instanceof Error &&
+ !error.message.includes('already been called')
+ ) {
+ console.warn('Auth emulator connection warning:', error.message)
+ }
+ authEmulatorConnected = true // Mark as connected even if error occurred
+ }
+ }
+ }
+
+ return authInstance
+}
diff --git a/src/lib/firestore-lite.ts b/src/lib/firestore-lite.ts
new file mode 100644
index 0000000..918578e
--- /dev/null
+++ b/src/lib/firestore-lite.ts
@@ -0,0 +1,228 @@
+// firestore-lite.ts
+// Lightweight Firestore client using REST API via firebase/firestore/lite
+// This replaces the full Firestore SDK to reduce bundle size and eliminate WebSocket issues
+
+import { type FirebaseApp, getApps, initializeApp } from 'firebase/app'
+import {
+ addDoc,
+ collection,
+ connectFirestoreEmulator,
+ type DocumentData,
+ deleteDoc,
+ doc,
+ type Firestore,
+ getDoc,
+ getDocs,
+ getFirestore,
+ limit,
+ orderBy,
+ type QueryConstraint,
+ query,
+ setDoc,
+ updateDoc,
+ type WithFieldValue,
+ where,
+} from 'firebase/firestore/lite'
+
+const firebaseConfig = {
+ apiKey: process.env.NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY || 'development',
+ authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || 'localhost',
+ projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || 'hemolog',
+}
+
+let firebaseApp: FirebaseApp | null = null
+let firestoreInstance: Firestore | null = null
+let emulatorConnected = false
+
+function getApp(): FirebaseApp | null {
+ if (typeof window === 'undefined') {
+ return null
+ }
+
+ if (!firebaseApp) {
+ const apps = getApps()
+ if (apps.length === 0) {
+ firebaseApp = initializeApp(firebaseConfig)
+ } else {
+ firebaseApp = apps[0]
+ }
+ }
+
+ return firebaseApp
+}
+
+export function getFirestoreLite(): Firestore | null {
+ if (typeof window === 'undefined') {
+ return null
+ }
+
+ const app = getApp()
+ if (!app) {
+ return null
+ }
+
+ if (!firestoreInstance) {
+ firestoreInstance = getFirestore(app)
+
+ // Connect to emulator if in development mode
+ const useEmulators =
+ process.env.NEXT_PUBLIC_USE_EMULATORS === 'true' ||
+ process.env.NEXT_PUBLIC_USE_EMULATORS === '1' ||
+ window.location.hostname === 'localhost'
+
+ if (useEmulators && !emulatorConnected) {
+ try {
+ connectFirestoreEmulator(firestoreInstance, 'localhost', 8082)
+ emulatorConnected = true
+ console.log('✓ Connected to Firestore Lite emulator at localhost:8082')
+ } catch (error) {
+ if (
+ error instanceof Error &&
+ error.message.includes('already been called')
+ ) {
+ emulatorConnected = true
+ } else {
+ console.warn(
+ 'Firestore Lite emulator connection warning:',
+ error instanceof Error ? error.message : String(error)
+ )
+ emulatorConnected = true
+ }
+ }
+ }
+ }
+
+ return firestoreInstance
+}
+
+// Helper to filter undefined values from objects (Firestore doesn't accept undefined)
+function cleanUndefined(obj: T): Partial {
+ return Object.fromEntries(
+ Object.entries(obj).filter(([, v]) => v !== undefined)
+ ) as Partial
+}
+
+// Generic document fetch by ID
+export async function getDocument(
+ collectionName: string,
+ docId: string
+): Promise<(T & { id: string }) | null> {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const docRef = doc(collection(db, collectionName), docId)
+ const docSnap = await getDoc(docRef)
+
+ if (!docSnap.exists()) {
+ return null
+ }
+
+ return { id: docSnap.id, ...docSnap.data() } as T & { id: string }
+}
+
+// Generic collection query
+export async function getDocuments(
+ collectionName: string,
+ ...queryConstraints: QueryConstraint[]
+): Promise<(T & { id: string })[]> {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const collectionRef = collection(db, collectionName)
+ const q = query(collectionRef, ...queryConstraints)
+ const querySnapshot = await getDocs(q)
+
+ return querySnapshot.docs.map((docSnap) => ({
+ id: docSnap.id,
+ ...docSnap.data(),
+ })) as (T & { id: string })[]
+}
+
+// Create a new document with auto-generated ID
+export async function createDocument(
+ collectionName: string,
+ data: WithFieldValue
+): Promise {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const cleanData = cleanUndefined(data as object)
+ const collectionRef = collection(db, collectionName)
+ const docRef = await addDoc(collectionRef, cleanData)
+
+ // Update the document with its own ID (common pattern for this app)
+ await setDoc(docRef, { uid: docRef.id, ...cleanData }, { merge: true })
+
+ return docRef.id
+}
+
+// Create or update a document with a specific ID
+export async function setDocument(
+ collectionName: string,
+ docId: string,
+ data: WithFieldValue,
+ merge = true
+): Promise {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const cleanData = cleanUndefined(data as object)
+ const docRef = doc(collection(db, collectionName), docId)
+ await setDoc(docRef, cleanData, { merge })
+}
+
+// Update specific fields of a document
+export async function updateDocument(
+ collectionName: string,
+ docId: string,
+ data: Partial
+): Promise {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const cleanData = cleanUndefined(data as object)
+ const docRef = doc(collection(db, collectionName), docId)
+ await updateDoc(docRef, cleanData)
+}
+
+// Delete a document (hard delete)
+export async function deleteDocument(
+ collectionName: string,
+ docId: string
+): Promise {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const docRef = doc(collection(db, collectionName), docId)
+ await deleteDoc(docRef)
+}
+
+// Soft delete a document (set deletedAt timestamp)
+export async function softDeleteDocument(
+ collectionName: string,
+ docId: string
+): Promise {
+ const db = getFirestoreLite()
+ if (!db) {
+ throw new Error('Firestore not available')
+ }
+
+ const docRef = doc(collection(db, collectionName), docId)
+ await setDoc(docRef, { deletedAt: new Date().toISOString() }, { merge: true })
+}
+
+// Re-export query helpers for building constraints
+export { collection, doc, query, where, limit, orderBy }
+export type { QueryConstraint, DocumentData }
diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts
new file mode 100644
index 0000000..c14ee09
--- /dev/null
+++ b/src/lib/helpers.ts
@@ -0,0 +1,36 @@
+export const CONFIG = {
+ blueskyUrl: 'https://bsky.app/profile/michaelschultz.com',
+}
+
+export async function generateUniqueString(length: number): Promise {
+ return Math.random()
+ .toString(36)
+ .substring(2, 2 + length)
+}
+
+export function track(event: string, data: Record) {
+ console.log('track', event, data)
+}
+
+import type { TreatmentType } from './db/treatments'
+
+export function filterTreatments(
+ treatments: TreatmentType[] | undefined,
+ filterYear: string
+): TreatmentType[] {
+ if (!treatments) {
+ return []
+ }
+
+ if (filterYear === 'All time') {
+ return treatments
+ }
+
+ return treatments.filter((treatment) => {
+ if (!treatment.date) {
+ return false
+ }
+ const treatmentYear = new Date(treatment.date).getFullYear().toString()
+ return treatmentYear === filterYear
+ })
+}
diff --git a/src/lib/hooks/useEmergencyUserQuery.ts b/src/lib/hooks/useEmergencyUserQuery.ts
new file mode 100644
index 0000000..d17a851
--- /dev/null
+++ b/src/lib/hooks/useEmergencyUserQuery.ts
@@ -0,0 +1,52 @@
+import { useQuery } from '@tanstack/react-query'
+import { fetchUserByAlertId } from '@/lib/db/users'
+import type { Person } from '@/lib/types/person'
+
+// Query key factory for emergency users (by alertId)
+export const emergencyUserKeys = {
+ all: ['users', 'alertId'] as const,
+ detail: (alertId: string) => [...emergencyUserKeys.all, alertId] as const,
+}
+
+interface UseEmergencyUserQueryOptions {
+ enabled?: boolean
+}
+
+interface EmergencyUserQueryResult {
+ person: Person | null
+ isLoading: boolean
+ isError: boolean
+ error: Error | null
+ refetch: () => void
+}
+
+export function useEmergencyUserQuery(
+ alertId: string | string[] | undefined,
+ options: UseEmergencyUserQueryOptions = {}
+): EmergencyUserQueryResult {
+ // Normalize alertId to string
+ const normalizedAlertId = Array.isArray(alertId) ? alertId[0] : alertId
+ const { enabled = true } = options
+
+ const query = useQuery({
+ queryKey: emergencyUserKeys.detail(normalizedAlertId ?? ''),
+ queryFn: async () => {
+ if (!normalizedAlertId) {
+ return null
+ }
+ return fetchUserByAlertId(normalizedAlertId)
+ },
+ enabled: enabled && !!normalizedAlertId,
+ staleTime: 60 * 1000, // 1 minute (emergency data doesn't change often)
+ })
+
+ return {
+ person: query.data ?? null,
+ isLoading: query.isLoading,
+ isError: query.isError,
+ error: query.error,
+ refetch: query.refetch,
+ }
+}
+
+export default useEmergencyUserQuery
diff --git a/src/lib/hooks/useFeedbackMutations.ts b/src/lib/hooks/useFeedbackMutations.ts
new file mode 100644
index 0000000..4822512
--- /dev/null
+++ b/src/lib/hooks/useFeedbackMutations.ts
@@ -0,0 +1,100 @@
+import { useMutation } from '@tanstack/react-query'
+import toast from 'react-hot-toast'
+import {
+ createFeedback,
+ deleteFeedback,
+ type FeedbackType,
+ updateFeedback,
+} from '@/lib/db/feedback'
+
+interface UseFeedbackMutationsOptions {
+ onCreateSuccess?: (docId: string) => void
+ onDeleteSuccess?: () => void
+ onUpdateSuccess?: () => void
+ onError?: (error: Error) => void
+}
+
+export function useFeedbackMutations(
+ options: UseFeedbackMutationsOptions = {}
+) {
+ const { onCreateSuccess, onDeleteSuccess, onUpdateSuccess, onError } = options
+
+ // Create feedback mutation
+ const createMutation = useMutation({
+ mutationFn: async (data: FeedbackType) => {
+ const docId = await createFeedback(data)
+ return docId
+ },
+ onError: (error) => {
+ toast.error(
+ `Failed to submit feedback: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: (docId) => {
+ toast.success('Thank you for your feedback!')
+ onCreateSuccess?.(docId)
+ },
+ })
+
+ // Delete feedback mutation
+ const deleteMutation = useMutation({
+ mutationFn: async (uid: string) => {
+ await deleteFeedback(uid)
+ return uid
+ },
+ onError: (error) => {
+ toast.error(
+ `Failed to delete feedback: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: () => {
+ onDeleteSuccess?.()
+ },
+ })
+
+ // Update feedback mutation
+ const updateMutation = useMutation({
+ mutationFn: async ({
+ uid,
+ data,
+ }: {
+ uid: string
+ data: Partial
+ }) => {
+ await updateFeedback(uid, data)
+ return { uid, data }
+ },
+ onError: (error) => {
+ toast.error(
+ `Failed to update feedback: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: () => {
+ onUpdateSuccess?.()
+ },
+ })
+
+ return {
+ createFeedback: createMutation.mutate,
+ createFeedbackAsync: createMutation.mutateAsync,
+ isCreating: createMutation.isPending,
+
+ deleteFeedback: deleteMutation.mutate,
+ deleteFeedbackAsync: deleteMutation.mutateAsync,
+ isDeleting: deleteMutation.isPending,
+
+ updateFeedback: updateMutation.mutate,
+ updateFeedbackAsync: updateMutation.mutateAsync,
+ isUpdating: updateMutation.isPending,
+
+ isPending:
+ createMutation.isPending ||
+ deleteMutation.isPending ||
+ updateMutation.isPending,
+ }
+}
+
+export default useFeedbackMutations
diff --git a/src/lib/hooks/useTreatmentMutations.ts b/src/lib/hooks/useTreatmentMutations.ts
new file mode 100644
index 0000000..8d9c68a
--- /dev/null
+++ b/src/lib/hooks/useTreatmentMutations.ts
@@ -0,0 +1,197 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query'
+import toast from 'react-hot-toast'
+import {
+ createTreatment,
+ deleteTreatment,
+ type TreatmentType,
+ updateTreatment,
+} from '@/lib/db/treatments'
+import { treatmentKeys } from './useTreatmentsQuery'
+
+interface UseTreatmentMutationsOptions {
+ onCreateSuccess?: (docId: string) => void
+ onUpdateSuccess?: () => void
+ onDeleteSuccess?: () => void
+ onError?: (error: Error) => void
+}
+
+export function useTreatmentMutations(
+ options: UseTreatmentMutationsOptions = {}
+) {
+ const queryClient = useQueryClient()
+ const { onCreateSuccess, onUpdateSuccess, onDeleteSuccess, onError } = options
+
+ // Create treatment mutation with optimistic update
+ const createMutation = useMutation({
+ mutationFn: async (data: TreatmentType) => {
+ const docId = await createTreatment(data)
+ return docId
+ },
+ onMutate: async (newTreatment) => {
+ // Cancel any outgoing refetches
+ await queryClient.cancelQueries({ queryKey: treatmentKeys.all })
+
+ // Snapshot the previous value
+ const userUid = newTreatment.user.uid
+ const previousTreatments = queryClient.getQueryData(
+ treatmentKeys.list(userUid)
+ )
+
+ // Optimistically update with a temporary ID
+ const optimisticTreatment: TreatmentType = {
+ ...newTreatment,
+ uid: `temp-${Date.now()}`,
+ }
+
+ queryClient.setQueryData(
+ treatmentKeys.list(userUid),
+ (old) => (old ? [optimisticTreatment, ...old] : [optimisticTreatment])
+ )
+
+ return { previousTreatments, userUid }
+ },
+ onError: (error, _newTreatment, context) => {
+ // Rollback on error
+ if (context?.previousTreatments !== undefined) {
+ queryClient.setQueryData(
+ treatmentKeys.list(context.userUid),
+ context.previousTreatments
+ )
+ }
+ toast.error(
+ `Failed to create treatment: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: (docId) => {
+ toast.success('Treatment logged! Hope all is well.')
+ onCreateSuccess?.(docId)
+ },
+ onSettled: (_data, _error, variables) => {
+ // Refetch to ensure consistency
+ queryClient.invalidateQueries({
+ queryKey: treatmentKeys.list(variables.user.uid),
+ })
+ },
+ })
+
+ // Update treatment mutation with optimistic update
+ const updateMutation = useMutation({
+ mutationFn: async ({
+ uid,
+ userUid,
+ data,
+ }: {
+ uid: string
+ userUid: string
+ data: Partial
+ }) => {
+ await updateTreatment(uid, data)
+ return { uid, userUid, data }
+ },
+ onMutate: async ({ uid, userUid, data }) => {
+ await queryClient.cancelQueries({ queryKey: treatmentKeys.all })
+
+ const previousTreatments = queryClient.getQueryData(
+ treatmentKeys.list(userUid)
+ )
+
+ // Optimistically update
+ queryClient.setQueryData(
+ treatmentKeys.list(userUid),
+ (old) =>
+ old?.map((treatment) =>
+ treatment.uid === uid ? { ...treatment, ...data } : treatment
+ ) ?? []
+ )
+
+ return { previousTreatments, userUid }
+ },
+ onError: (error, _variables, context) => {
+ if (context?.previousTreatments !== undefined) {
+ queryClient.setQueryData(
+ treatmentKeys.list(context.userUid),
+ context.previousTreatments
+ )
+ }
+ toast.error(
+ `Failed to update treatment: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: () => {
+ toast.success('Treatment updated!')
+ onUpdateSuccess?.()
+ },
+ onSettled: (_data, _error, variables) => {
+ queryClient.invalidateQueries({
+ queryKey: treatmentKeys.list(variables.userUid),
+ })
+ },
+ })
+
+ // Delete treatment mutation with optimistic update (soft delete)
+ const deleteMutation = useMutation({
+ mutationFn: async ({ uid, userUid }: { uid: string; userUid: string }) => {
+ await deleteTreatment(uid)
+ return { uid, userUid }
+ },
+ onMutate: async ({ uid, userUid }) => {
+ await queryClient.cancelQueries({ queryKey: treatmentKeys.all })
+
+ const previousTreatments = queryClient.getQueryData(
+ treatmentKeys.list(userUid)
+ )
+
+ // Optimistically remove from list
+ queryClient.setQueryData(
+ treatmentKeys.list(userUid),
+ (old) => old?.filter((treatment) => treatment.uid !== uid) ?? []
+ )
+
+ return { previousTreatments, userUid }
+ },
+ onError: (error, _variables, context) => {
+ if (context?.previousTreatments !== undefined) {
+ queryClient.setQueryData(
+ treatmentKeys.list(context.userUid),
+ context.previousTreatments
+ )
+ }
+ toast.error(
+ `Failed to delete treatment: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: () => {
+ toast.success('Treatment deleted')
+ onDeleteSuccess?.()
+ },
+ onSettled: (_data, _error, variables) => {
+ queryClient.invalidateQueries({
+ queryKey: treatmentKeys.list(variables.userUid),
+ })
+ },
+ })
+
+ return {
+ createTreatment: createMutation.mutate,
+ createTreatmentAsync: createMutation.mutateAsync,
+ isCreating: createMutation.isPending,
+
+ updateTreatment: updateMutation.mutate,
+ updateTreatmentAsync: updateMutation.mutateAsync,
+ isUpdating: updateMutation.isPending,
+
+ deleteTreatment: deleteMutation.mutate,
+ deleteTreatmentAsync: deleteMutation.mutateAsync,
+ isDeleting: deleteMutation.isPending,
+
+ isPending:
+ createMutation.isPending ||
+ updateMutation.isPending ||
+ deleteMutation.isPending,
+ }
+}
+
+export default useTreatmentMutations
diff --git a/src/lib/hooks/useTreatmentsQuery.ts b/src/lib/hooks/useTreatmentsQuery.ts
new file mode 100644
index 0000000..7e97afc
--- /dev/null
+++ b/src/lib/hooks/useTreatmentsQuery.ts
@@ -0,0 +1,74 @@
+import { useQuery } from '@tanstack/react-query'
+import { compareDesc } from 'date-fns'
+import { useMemo } from 'react'
+import { useAuth } from '@/lib/auth'
+import { fetchTreatments, type TreatmentType } from '@/lib/db/treatments'
+
+// Query key factory for treatments
+export const treatmentKeys = {
+ all: ['infusions'] as const,
+ list: (uid: string) => [...treatmentKeys.all, uid] as const,
+}
+
+interface UseTreatmentsQueryOptions {
+ limit?: number
+ uid?: string
+ // Polling interval in ms (default: no polling)
+ refetchInterval?: number
+}
+
+interface TreatmentQueryResult {
+ data: TreatmentType[]
+ isLoading: boolean
+ isError: boolean
+ error: Error | null
+ isFetching: boolean
+ refetch: () => void
+}
+
+export function useTreatmentsQuery(
+ options: UseTreatmentsQueryOptions = {}
+): TreatmentQueryResult {
+ const { limit: maxItems, uid: overrideUid, refetchInterval } = options
+ const { user } = useAuth()
+ const userUid = overrideUid ?? user?.uid
+
+ const query = useQuery({
+ queryKey: treatmentKeys.list(userUid ?? ''),
+ queryFn: async () => {
+ if (!userUid) {
+ return []
+ }
+ return fetchTreatments(userUid)
+ },
+ enabled: !!userUid,
+ refetchInterval,
+ // Keep data fresh
+ staleTime: 10 * 1000, // 10 seconds
+ })
+
+ // Sort treatments by date (newest first) and apply limit
+ // Memoized to prevent creating new array references on every render
+ const sortedData = useMemo(() => {
+ if (!query.data) return []
+ return [...query.data].sort((a, b) =>
+ compareDesc(new Date(a.date), new Date(b.date))
+ )
+ }, [query.data])
+
+ const limitedData = useMemo(() => {
+ return maxItems ? sortedData.slice(0, maxItems) : sortedData
+ }, [sortedData, maxItems])
+
+ return {
+ data: limitedData,
+ isLoading: query.isLoading,
+ isError: query.isError,
+ error: query.error,
+ isFetching: query.isFetching,
+ refetch: query.refetch,
+ }
+}
+
+// Hook alias for backward compatibility
+export default useTreatmentsQuery
diff --git a/src/lib/hooks/useUserMutations.ts b/src/lib/hooks/useUserMutations.ts
new file mode 100644
index 0000000..0c4b599
--- /dev/null
+++ b/src/lib/hooks/useUserMutations.ts
@@ -0,0 +1,105 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query'
+import toast from 'react-hot-toast'
+import { createUser, updateUser } from '@/lib/db/users'
+import type { Person } from '@/lib/types/person'
+import type { UserType } from '@/lib/types/users'
+import { userKeys } from './useUserQuery'
+
+interface UseUserMutationsOptions {
+ onCreateSuccess?: () => void
+ onUpdateSuccess?: () => void
+ onError?: (error: Error) => void
+}
+
+export function useUserMutations(options: UseUserMutationsOptions = {}) {
+ const queryClient = useQueryClient()
+ const { onCreateSuccess, onUpdateSuccess, onError } = options
+
+ // Create user mutation
+ const createMutation = useMutation({
+ mutationFn: async ({
+ uid,
+ userData,
+ }: {
+ uid: string
+ userData: Partial
+ }) => {
+ await createUser(uid, userData)
+ return { uid, userData }
+ },
+ onError: (error) => {
+ console.error('Failed to create user:', error)
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: ({ uid }) => {
+ queryClient.invalidateQueries({ queryKey: userKeys.detail(uid) })
+ onCreateSuccess?.()
+ },
+ })
+
+ // Update user mutation with optimistic update
+ const updateMutation = useMutation({
+ mutationFn: async ({
+ uid,
+ userData,
+ }: {
+ uid: string
+ userData: Partial
+ }) => {
+ await updateUser(uid, userData)
+ return { uid, userData }
+ },
+ onMutate: async ({ uid, userData }) => {
+ await queryClient.cancelQueries({ queryKey: userKeys.detail(uid) })
+
+ const previousUser = queryClient.getQueryData(
+ userKeys.detail(uid)
+ )
+
+ // Optimistically update
+ if (previousUser) {
+ queryClient.setQueryData(userKeys.detail(uid), {
+ ...previousUser,
+ ...userData,
+ })
+ }
+
+ return { previousUser, uid }
+ },
+ onError: (error, _variables, context) => {
+ if (context?.previousUser !== undefined) {
+ queryClient.setQueryData(
+ userKeys.detail(context.uid),
+ context.previousUser
+ )
+ }
+ toast.error(
+ `Failed to update profile: ${error instanceof Error ? error.message : String(error)}`
+ )
+ onError?.(error instanceof Error ? error : new Error(String(error)))
+ },
+ onSuccess: () => {
+ toast.success('Profile updated!')
+ onUpdateSuccess?.()
+ },
+ onSettled: (_data, _error, variables) => {
+ queryClient.invalidateQueries({
+ queryKey: userKeys.detail(variables.uid),
+ })
+ },
+ })
+
+ return {
+ createUser: createMutation.mutate,
+ createUserAsync: createMutation.mutateAsync,
+ isCreating: createMutation.isPending,
+
+ updateUser: updateMutation.mutate,
+ updateUserAsync: updateMutation.mutateAsync,
+ isUpdating: updateMutation.isPending,
+
+ isPending: createMutation.isPending || updateMutation.isPending,
+ }
+}
+
+export default useUserMutations
diff --git a/src/lib/hooks/useUserQuery.ts b/src/lib/hooks/useUserQuery.ts
new file mode 100644
index 0000000..3dc3d54
--- /dev/null
+++ b/src/lib/hooks/useUserQuery.ts
@@ -0,0 +1,53 @@
+import { useQuery } from '@tanstack/react-query'
+import { fetchUserByUid } from '@/lib/db/users'
+import type { Person } from '@/lib/types/person'
+
+// Query key factory for users
+export const userKeys = {
+ all: ['users'] as const,
+ detail: (uid: string) => [...userKeys.all, uid] as const,
+}
+
+interface UseUserQueryOptions {
+ enabled?: boolean
+}
+
+interface UserQueryResult {
+ person: Person | null
+ isLoading: boolean
+ isError: boolean
+ error: Error | null
+ refetch: () => void
+}
+
+export function useUserQuery(
+ uid: string | string[] | undefined,
+ options: UseUserQueryOptions = {}
+): UserQueryResult {
+ // Normalize uid to string
+ const normalizedUid = Array.isArray(uid) ? uid[0] : uid
+ const { enabled = true } = options
+
+ const query = useQuery({
+ queryKey: userKeys.detail(normalizedUid ?? ''),
+ queryFn: async () => {
+ if (!normalizedUid) {
+ return null
+ }
+ return fetchUserByUid(normalizedUid)
+ },
+ enabled: enabled && !!normalizedUid,
+ staleTime: 30 * 1000, // 30 seconds
+ })
+
+ return {
+ person: query.data ?? null,
+ isLoading: query.isLoading,
+ isError: query.isError,
+ error: query.error,
+ refetch: query.refetch,
+ }
+}
+
+// Alias for backward compatibility with useDbUser
+export default useUserQuery
diff --git a/src/lib/providers/query-provider.tsx b/src/lib/providers/query-provider.tsx
new file mode 100644
index 0000000..95fc4f6
--- /dev/null
+++ b/src/lib/providers/query-provider.tsx
@@ -0,0 +1,59 @@
+'use client'
+
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
+import { type ReactNode, useState } from 'react'
+
+// Create a stable QueryClient configuration
+function makeQueryClient() {
+ return new QueryClient({
+ defaultOptions: {
+ queries: {
+ // Data is considered fresh for 30 seconds
+ staleTime: 30 * 1000,
+ // Cache data for 5 minutes
+ gcTime: 5 * 60 * 1000,
+ // Retry failed requests up to 2 times
+ retry: 2,
+ // Don't refetch on window focus by default (can enable per-query)
+ refetchOnWindowFocus: false,
+ // Refetch on reconnect
+ refetchOnReconnect: true,
+ },
+ mutations: {
+ // Retry failed mutations once
+ retry: 1,
+ },
+ },
+ })
+}
+
+// Singleton for browser, but create new for each SSR request
+let browserQueryClient: QueryClient | undefined
+
+function getQueryClient() {
+ if (typeof window === 'undefined') {
+ // Server: always make a new query client
+ return makeQueryClient()
+ }
+ // Browser: make a new query client if we don't already have one
+ if (!browserQueryClient) {
+ browserQueryClient = makeQueryClient()
+ }
+ return browserQueryClient
+}
+
+interface QueryProviderProps {
+ children: ReactNode
+}
+
+export function QueryProvider({ children }: QueryProviderProps) {
+ // Use useState to ensure the same client is used across re-renders
+ const [queryClient] = useState(() => getQueryClient())
+
+ return (
+ {children}
+ )
+}
+
+// Export the query client getter for use in mutations that need direct access
+export { getQueryClient }
diff --git a/src/lib/seed.ts b/src/lib/seed.ts
new file mode 100644
index 0000000..182225f
--- /dev/null
+++ b/src/lib/seed.ts
@@ -0,0 +1,216 @@
+// seed.ts
+// Script to populate Firebase DB with test user data for alertId 'mike29'
+// Run with: NEXT_PUBLIC_USE_EMULATORS=true npx tsx src/lib/seed.ts
+//
+// IMPORTANT: This script only works with Firebase emulators for safety.
+// It will refuse to run if emulators are not enabled.
+
+import {
+ type TreatmentType,
+ TreatmentTypeEnum,
+ type TreatmentTypeOptions,
+} from './db/treatments'
+import { adminFirestore } from './firebase-admin'
+import type { Person } from './types/person'
+import type { AttachedUserType } from './types/users'
+
+// Safety check: Only allow running with emulators
+function checkEmulatorMode() {
+ const useEmulators = process.env.NEXT_PUBLIC_USE_EMULATORS === 'true'
+ const firestoreEmulatorHost = process.env.FIRESTORE_EMULATOR_HOST
+
+ if (!useEmulators) {
+ console.error(
+ '❌ ERROR: This seed script can only run with Firebase emulators enabled.'
+ )
+ console.error('')
+ console.error('To run this script, set NEXT_PUBLIC_USE_EMULATORS=true:')
+ console.error(' NEXT_PUBLIC_USE_EMULATORS=true npx tsx src/lib/seed.ts')
+ console.error('')
+ console.error('Make sure Firebase emulators are running:')
+ console.error(' pnpm firebase:dev')
+ process.exit(1)
+ }
+
+ if (!firestoreEmulatorHost && !process.env.FIREBASE_AUTH_EMULATOR_HOST) {
+ // Set emulator hosts if not already set (for safety)
+ process.env.FIRESTORE_EMULATOR_HOST = 'localhost:8082'
+ process.env.FIREBASE_AUTH_EMULATOR_HOST = 'localhost:9099'
+ console.log('✓ Emulator hosts configured')
+ }
+
+ console.log('✓ Running in emulator mode (safe for local development)')
+ console.log('')
+}
+
+// Helper to filter undefined values from objects (Firestore doesn't accept undefined)
+function cleanUndefined(obj: T): Partial {
+ return Object.fromEntries(
+ Object.entries(obj).filter(([, v]) => v !== undefined)
+ ) as Partial
+}
+
+async function seedTreatments(
+ user: AttachedUserType,
+ medicationBrand: string,
+ count: number = 10
+): Promise {
+ const treatmentTypes: TreatmentTypeOptions[] = [
+ TreatmentTypeEnum.ANTIBODY,
+ TreatmentTypeEnum.PROPHY,
+ TreatmentTypeEnum.BLEED,
+ TreatmentTypeEnum.PREVENTATIVE,
+ ]
+
+ const sites = ['Left arm', 'Right arm', 'Left leg', 'Right leg', 'Stomach']
+ const causes = ['', 'Minor cut', 'Bruise', 'Joint pain', 'Preventive']
+
+ const now = new Date()
+ const treatments: TreatmentType[] = []
+
+ for (let i = 0; i < count; i++) {
+ // Spread treatments over the last 30 days
+ const daysAgo = Math.floor((i / count) * 30)
+ const treatmentDate = new Date(now)
+ treatmentDate.setDate(treatmentDate.getDate() - daysAgo)
+
+ const dateStr = treatmentDate.toISOString().slice(0, 10)
+ const createdAt = treatmentDate.toISOString()
+
+ const type =
+ treatmentTypes[Math.floor(Math.random() * treatmentTypes.length)]
+ const site = sites[Math.floor(Math.random() * sites.length)]
+ const cause = causes[Math.floor(Math.random() * causes.length)]
+
+ // Vary units between 2000-4000
+ const units = Math.floor(Math.random() * 2000) + 2000
+
+ const treatment: TreatmentType = {
+ deletedAt: null,
+ cause,
+ createdAt,
+ date: dateStr,
+ medication: {
+ brand: medicationBrand,
+ units,
+ lot: `LOT${Math.floor(Math.random() * 10000)}`,
+ },
+ sites: site,
+ type,
+ user,
+ }
+
+ treatments.push(treatment)
+ }
+
+ // Sort by date (oldest first) for more realistic ordering
+ treatments.sort((a, b) => a.date.localeCompare(b.date))
+
+ // Create treatments in Firestore
+ for (const treatment of treatments) {
+ const cleanData = cleanUndefined(treatment)
+ const docRef = await adminFirestore.collection('infusions').add(cleanData)
+ await docRef.set({ uid: docRef.id, ...cleanData }, { merge: true })
+ }
+
+ console.log(`✓ Created ${count} treatments for user ${user.name}`)
+}
+
+async function seedUser() {
+ const seedUserData = {
+ name: 'Seed User',
+ hemophiliaType: 'A',
+ severity: 'Moderate',
+ medication: 'Advate',
+ injectionFrequency: 'Every 3 days',
+ factor: 8,
+ }
+
+ // Seed user is separate from test sign-in user
+ // This user is for seeding data only, not for authentication
+ const alertId = 'mike29'
+ const seedEmail = `seed-${alertId}@hemolog.com`
+
+ try {
+ let userUid: string
+ let userDocData: Person
+
+ // Check if user document already exists by alertId
+ const existingUserQuery = await adminFirestore
+ .collection('users')
+ .where('alertId', '==', alertId)
+ .limit(1)
+ .get()
+
+ if (!existingUserQuery.empty) {
+ const existingDoc = existingUserQuery.docs[0]
+ userUid = existingDoc.id
+ userDocData = existingDoc.data() as Person
+ console.log(
+ `✓ Seed user with alertId '${alertId}' already exists with uid: ${userUid}`
+ )
+ console.log('Updating existing seed user document...')
+
+ // Ensure uid field matches document ID for consistency
+ const userData: Partial = {
+ alertId,
+ uid: userUid,
+ ...seedUserData,
+ }
+
+ const cleanData = cleanUndefined(userData)
+ await existingDoc.ref.update(cleanData)
+ // Update userDocData to reflect the updated data
+ userDocData = { ...userDocData, ...cleanData } as Person
+ console.log(`✓ Updated seed user document with alertId '${alertId}'`)
+ } else {
+ // Create new seed user document
+ // Use a consistent UID for the seed user (not tied to Firebase Auth)
+ userUid = `seed-uid-${alertId}`
+
+ const userData: Person = {
+ alertId,
+ uid: userUid,
+ ...seedUserData,
+ }
+
+ const cleanData = cleanUndefined(userData)
+ await adminFirestore.collection('users').doc(userUid).set(cleanData)
+ userDocData = userData
+ console.log(
+ `✓ Created seed user document with alertId '${alertId}' and uid '${userUid}'`
+ )
+ console.log('User data:', JSON.stringify(cleanData, null, 2))
+ }
+
+ // Create AttachedUserType for treatments
+ // Ensure uid matches what's stored in the Person document
+ const attachedUser: AttachedUserType = {
+ uid: userDocData.uid || userUid,
+ name: seedUserData.name,
+ email: seedEmail,
+ photoUrl: userDocData.photoUrl || '',
+ }
+
+ console.log(`Creating treatments with user.uid: ${attachedUser.uid}`)
+ console.log(`Person document uid: ${userDocData.uid}`)
+
+ // Create 10 treatments
+ await seedTreatments(attachedUser, seedUserData.medication, 10)
+ } catch (error) {
+ console.error('Error seeding user:', error)
+ process.exit(1)
+ }
+}
+
+// Run the seed function
+checkEmulatorMode()
+seedUser()
+ .then(() => {
+ console.log('Seed completed successfully')
+ process.exit(0)
+ })
+ .catch((error) => {
+ console.error('Seed failed:', error)
+ process.exit(1)
+ })
diff --git a/lib/types/person.ts b/src/lib/types/person.ts
similarity index 100%
rename from lib/types/person.ts
rename to src/lib/types/person.ts
diff --git a/lib/types/users.ts b/src/lib/types/users.ts
similarity index 72%
rename from lib/types/users.ts
rename to src/lib/types/users.ts
index b1cdabc..1dadacd 100644
--- a/lib/types/users.ts
+++ b/src/lib/types/users.ts
@@ -1,22 +1,21 @@
-export interface AttachedUserType {
+// Placeholder - need to restore from git
+export interface UserType {
+ uid: string
email: string
name: string
+ alertId?: string
+ isAdmin?: boolean
+ apiKey?: string
+ medication?: string
+ monoclonalAntibody?: string
photoUrl?: string
- uid: string
+ provider?: string
+ token?: string
}
-export interface UserType {
- alertId?: string
- displayName?: string
+export interface AttachedUserType {
email: string
- isAdmin?: boolean
name: string
- photoUrl?: string
- medication?: string
- monoclonalAntibody?: string
- injectionFrequency?: string
- provider: string
- token: string
+ photoUrl: string
uid: string
- apiKey?: string
}
diff --git a/src/scripts/switch-rules.sh b/src/scripts/switch-rules.sh
new file mode 100755
index 0000000..1b3639b
--- /dev/null
+++ b/src/scripts/switch-rules.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# Script to switch between development and production Firestore rules
+# Get the project root directory (two levels up from this script)
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
+
+if [ "$1" = "dev" ]; then
+ echo "Switching to development rules..."
+ cp "$PROJECT_ROOT/firebase/firestore.dev.rules" "$PROJECT_ROOT/firebase/firestore.rules"
+ echo "✅ Using development rules (allows all operations)"
+elif [ "$1" = "prod" ]; then
+ echo "Switching to production rules..."
+ cp "$PROJECT_ROOT/firebase/firestore.prod.rules" "$PROJECT_ROOT/firebase/firestore.rules"
+ echo "✅ Using production rules (requires authentication)"
+else
+ echo "Usage: $0 [dev|prod]"
+ echo " dev - Use development rules (allows all operations)"
+ echo " prod - Use production rules (requires authentication)"
+ exit 1
+fi
+
+echo "Restart your Firebase emulators for changes to take effect:"
+echo " pnpm run firebase"
+
diff --git a/tsconfig.json b/tsconfig.json
index afa7418..415aaec 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -6,7 +6,7 @@
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
- "jsx": "preserve",
+ "jsx": "react-jsx",
"lib": [
"dom",
"dom.iterable",
@@ -20,13 +20,25 @@
"skipLibCheck": true,
"strict": true,
"target": "es6",
- "incremental": true
+ "incremental": true,
+ "paths": {
+ "@/*": [
+ "./src/*"
+ ]
+ },
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ]
},
"include": [
"next-env.d.ts",
- "**/*.ts",
- "**/*.tsx",
- "next.config.js"
+ "src/**/*.ts",
+ "src/**/*.tsx",
+ "next.config.js",
+ ".next/types/**/*.ts",
+ ".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules",
diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo
deleted file mode 100644
index 01876d1..0000000
--- a/tsconfig.tsbuildinfo
+++ /dev/null
@@ -1 +0,0 @@
-{"fileNames":["./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/.pnpm/@types+react@17.0.89/node_modules/@types/react/global.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@types+prop-types@15.7.15/node_modules/@types/prop-types/index.d.ts","./node_modules/.pnpm/@types+scheduler@0.16.8/node_modules/@types/scheduler/tracing.d.ts","./node_modules/.pnpm/@types+react@17.0.89/node_modules/@types/react/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/amp.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/index.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/globals.typedarray.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/buffer.buffer.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/globals.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/events.d.ts","./node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","./node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/assert.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/assert/strict.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/async_hooks.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/buffer.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/child_process.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/cluster.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/console.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/constants.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/crypto.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/dgram.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/dns.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/dns/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/domain.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/events.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/fs.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/fs/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/http.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/http2.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/https.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/inspector.generated.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/module.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/net.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/os.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/path.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/perf_hooks.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/process.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/punycode.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/querystring.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/readline.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/readline/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/repl.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/sea.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream/consumers.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream/web.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/string_decoder.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/test.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/timers.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/timers/promises.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/tls.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/trace_events.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/tty.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/url.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/util.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/v8.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/vm.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/wasi.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/worker_threads.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/zlib.d.ts","./node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/get-page-files.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/config.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/config-shared.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/base-http/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/body-streams.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/request-meta.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/router.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/render-result.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/next-url.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/types.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/build/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/send-payload/revalidate-headers.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/send-payload/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/base-http/node.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/font-utils.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/load-components.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/render.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/base-server.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/next-server.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/next.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/types/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/html-context.d.ts","./node_modules/.pnpm/@next+env@12.3.7/node_modules/@next/env/types/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/with-router.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/router.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/route-loader.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/page-loader.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/pages/_app.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/app.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/runtime-config.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/config.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/pages/_document.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/document.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dynamic.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/pages/_error.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/error.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/shared/lib/head.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/head.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/image.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/image.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/link.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/link.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/router.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/client/script.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/script.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/server.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/types/global.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/index.d.ts","./node_modules/.pnpm/next@12.3.7_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/.pnpm/blob-util@2.0.2/node_modules/blob-util/dist/blob-util.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cy-blob-util.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/bluebird/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cy-bluebird.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cy-minimatch.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/chai/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cy-chai.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/common.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/array.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/collection.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/date.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/function.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/lang.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/math.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/number.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/object.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/seq.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/string.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/common/util.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/lodash/index.d.ts","./node_modules/.pnpm/@types+sinonjs__fake-timers@8.1.1/node_modules/@types/sinonjs__fake-timers/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/sinon/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/sinon-chai/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/mocha/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/jquery/JQueryStatic.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/jquery/JQuery.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/jquery/misc.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/jquery/legacy.d.ts","./node_modules/@types/sizzle/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/jquery/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/chai-jquery/index.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cypress-npm-api.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/net-stubbing.d.ts","./node_modules/.pnpm/eventemitter2@6.4.7/node_modules/eventemitter2/eventemitter2.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cypress-eventemitter.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cypress-type-helpers.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cypress.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cypress-global-vars.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/cypress-expect.d.ts","./node_modules/.pnpm/cypress@10.11.0/node_modules/cypress/types/index.d.ts","./node_modules/.pnpm/dotenv@17.2.3/node_modules/dotenv/lib/main.d.ts","./cypress.config.ts","./global.d.ts","./node_modules/.pnpm/isomorphic-unfetch@3.1.0_encoding@0.1.13/node_modules/isomorphic-unfetch/index.d.ts","./lib/fetcher.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/app/credential.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/app/core.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/app/lifecycle.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/app/credential-factory.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/utils/error.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/app/index.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/auth-context.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/metadata.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/constants.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/deadline.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/certificate-provider.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts","./node_modules/.pnpm/@js-sdsl+ordered-map@4.4.2/node_modules/@js-sdsl/ordered-map/dist/esm/index.d.ts","./node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/index.d.ts","./node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/ext/descriptor/index.d.ts","./node_modules/.pnpm/@grpc+proto-loader@0.8.0/node_modules/@grpc/proto-loader/build/src/util.d.ts","./node_modules/.pnpm/long@5.3.2/node_modules/long/umd/types.d.ts","./node_modules/.pnpm/long@5.3.2/node_modules/long/umd/index.d.ts","./node_modules/.pnpm/@grpc+proto-loader@0.8.0/node_modules/@grpc/proto-loader/build/src/index.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/channelz.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/channel.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/client.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/subchannel-call.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/transport.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/xds/data/orca/v3/OrcaLoadReport.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/v3/OrcaLoadReportRequest.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/v3/OpenRcaService.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/duration.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/service-config.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/picker.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/orca.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/server-interceptors.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/server.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/make-client.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/events.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/server-call.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/call-interface.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/call.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/admin.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/logging.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/filter.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/resolver.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/load-balancing-call.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/resolving-call.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/retrying-call.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/internal-channel.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/experimental.d.ts","./node_modules/.pnpm/@grpc+grpc-js@1.14.1/node_modules/@grpc/grpc-js/build/src/index.d.ts","./node_modules/.pnpm/@grpc+proto-loader@0.7.15/node_modules/@grpc/proto-loader/build/src/util.d.ts","./node_modules/.pnpm/@grpc+proto-loader@0.7.15/node_modules/@grpc/proto-loader/build/src/index.d.ts","./node_modules/.pnpm/gaxios@6.7.1_encoding@0.1.13/node_modules/gaxios/build/src/common.d.ts","./node_modules/.pnpm/gaxios@6.7.1_encoding@0.1.13/node_modules/gaxios/build/src/interceptor.d.ts","./node_modules/.pnpm/gaxios@6.7.1_encoding@0.1.13/node_modules/gaxios/build/src/gaxios.d.ts","./node_modules/.pnpm/gaxios@6.7.1_encoding@0.1.13/node_modules/gaxios/build/src/index.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/transporters.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/credentials.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/crypto/crypto.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/util.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/authclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/loginticket.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/oauth2client.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/envDetect.d.ts","./node_modules/.pnpm/gtoken@7.1.0_encoding@0.1.13/node_modules/gtoken/build/src/index.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/jwtclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/refreshclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/impersonated.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/awsclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/pluggable-auth-client.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/externalclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/externalAccountAuthorizedUserClient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/googleauth.d.ts","./node_modules/.pnpm/gcp-metadata@6.1.1_encoding@0.1.13/node_modules/gcp-metadata/build/src/gcp-residency.d.ts","./node_modules/.pnpm/gcp-metadata@6.1.1_encoding@0.1.13/node_modules/gcp-metadata/build/src/index.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/computeclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/iam.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/auth/passthrough.d.ts","./node_modules/.pnpm/google-auth-library@9.15.1_encoding@0.1.13/node_modules/google-auth-library/build/src/index.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/status.d.ts","./node_modules/.pnpm/proto3-json-serializer@2.0.2/node_modules/proto3-json-serializer/build/src/types.d.ts","./node_modules/.pnpm/proto3-json-serializer@2.0.2/node_modules/proto3-json-serializer/build/src/toproto3json.d.ts","./node_modules/.pnpm/proto3-json-serializer@2.0.2/node_modules/proto3-json-serializer/build/src/fromproto3json.d.ts","./node_modules/.pnpm/proto3-json-serializer@2.0.2/node_modules/proto3-json-serializer/build/src/index.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/googleError.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/call.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/streamingCalls/streaming.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/apiCaller.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/paginationCalls/pageDescriptor.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/streamingCalls/streamDescriptor.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/normalCalls/normalApiCaller.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/bundlingCalls/bundleApiCaller.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/bundlingCalls/bundleDescriptor.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/descriptor.d.ts","./node_modules/.pnpm/@types+long@4.0.2/node_modules/@types/long/index.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/protos/operations.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/clientInterface.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/routingHeader.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/protos/http.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/protos/iam_service.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/protos/locations.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/pathTemplate.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/iamService.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/locationService.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/util.d.ts","./node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/minimal.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/warnings.d.ts","./node_modules/.pnpm/event-target-shim@5.0.1/node_modules/event-target-shim/index.d.ts","./node_modules/.pnpm/abort-controller@3.0.0/node_modules/abort-controller/dist/abort-controller.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/streamArrayParser.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/fallbackServiceStub.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/fallback.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/operationsClient.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/longRunningCalls/longRunningApiCaller.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/longRunningCalls/longRunningDescriptor.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/longRunningCalls/longrunning.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/apitypes.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/bundlingCalls/task.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/bundlingCalls/bundleExecutor.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/gax.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/grpc.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/createApiCall.d.ts","./node_modules/.pnpm/google-gax@4.6.1_encoding@0.1.13/node_modules/google-gax/build/src/index.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/protos/firestore_v1beta1_proto_api.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/v1beta1/firestore_client.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/protos/firestore_v1_proto_api.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/v1/firestore_client.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/protos/firestore_admin_v1_proto_api.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/v1/firestore_admin_client.d.ts","./node_modules/.pnpm/@google-cloud+firestore@7.11.6_encoding@0.1.13/node_modules/@google-cloud/firestore/types/firestore.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/firestore/firestore-internal.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/firestore/index.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/token-verifier.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/auth-config.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/user-record.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/identifier.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/user-import-builder.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/action-code-settings-builder.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/base-auth.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/tenant.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/tenant-manager.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/project-config.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/project-config-manager.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/auth.d.ts","./node_modules/.pnpm/firebase-admin@12.7.0_encoding@0.1.13/node_modules/firebase-admin/lib/auth/index.d.ts","./lib/firebase-admin.ts","./node_modules/.pnpm/@firebase+component@0.7.0/node_modules/@firebase/component/dist/src/provider.d.ts","./node_modules/.pnpm/@firebase+component@0.7.0/node_modules/@firebase/component/dist/src/component_container.d.ts","./node_modules/.pnpm/@firebase+component@0.7.0/node_modules/@firebase/component/dist/src/types.d.ts","./node_modules/.pnpm/@firebase+component@0.7.0/node_modules/@firebase/component/dist/src/component.d.ts","./node_modules/.pnpm/@firebase+component@0.7.0/node_modules/@firebase/component/dist/index.d.ts","./node_modules/.pnpm/@firebase+util@1.13.0/node_modules/@firebase/util/dist/util-public.d.ts","./node_modules/.pnpm/@firebase+logger@0.5.0/node_modules/@firebase/logger/dist/src/logger.d.ts","./node_modules/.pnpm/@firebase+logger@0.5.0/node_modules/@firebase/logger/dist/index.d.ts","./node_modules/.pnpm/@firebase+app@0.14.6/node_modules/@firebase/app/dist/app-public.d.ts","./node_modules/.pnpm/firebase@12.7.0/node_modules/firebase/app/dist/app/index.d.ts","./node_modules/.pnpm/@firebase+firestore@4.9.3_@firebase+app@0.14.6/node_modules/@firebase/firestore/dist/index.d.ts","./node_modules/.pnpm/firebase@12.7.0/node_modules/firebase/firestore/dist/firestore/index.d.ts","./node_modules/.pnpm/@firebase+auth@1.12.0_@firebase+app@0.14.6/node_modules/@firebase/auth/dist/auth-public.d.ts","./node_modules/.pnpm/firebase@12.7.0/node_modules/firebase/auth/dist/auth/index.d.ts","./lib/firebase.ts","./node_modules/.pnpm/nanoid@3.3.11/node_modules/nanoid/async/index.d.ts","./node_modules/.pnpm/date-fns@2.30.0/node_modules/date-fns/typings.d.ts","./lib/types/users.ts","./lib/db/infusions.ts","./lib/helpers.ts","./lib/theme.ts","./lib/db/feedback.ts","./lib/admin-db/feedback.ts","./lib/admin-db/infusions.ts","./lib/admin-db/users.ts","./lib/db/users.ts","./lib/hooks/useFirestoreQuery.ts","./lib/types/person.ts","./lib/hooks/useDbUser.ts","./lib/hooks/useEmergencyUser.ts","./node_modules/.pnpm/@types+js-cookie@2.2.7/node_modules/@types/js-cookie/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-scaleable/scaleable-context.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-scaleable/with-scaleable.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-scaleable/utils.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-scaleable/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/auto-complete/auto-complete-item.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/utils/prop-types.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/auto-complete/auto-complete.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/auto-complete/auto-complete-searching.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/auto-complete/auto-complete-empty.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/auto-complete/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/avatar/avatar.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/avatar/avatar-group.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/avatar/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/badge/badge.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/badge/badge-anchor.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/badge/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/breadcrumbs/breadcrumbs.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/link/link.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/breadcrumbs/breadcrumbs-item.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/breadcrumbs/breadcrumbs-separator.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/breadcrumbs/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button/button.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button-dropdown/button-dropdown.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button-dropdown/button-dropdown-item.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button-dropdown/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button-group/button-group.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/button-group/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/capacity/capacity.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/capacity/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/card/card.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/card/card-footer.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/card/card-content.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/card/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/checkbox/checkbox.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/checkbox/checkbox-group.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/checkbox/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/code/code.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/code/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/collapse/collapse.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/collapse/collapse-group.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/collapse/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/description/description.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/description/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/display/display.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/display/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/divider/divider.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/divider/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/dot/dot.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/dot/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/drawer/helper.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/drawer/drawer.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/modal/modal-title.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/modal/modal-subtitle.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/modal/modal-content.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/modal/modal.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/modal/modal-action.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/modal/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/drawer/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/fieldset.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/fieldset-title.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/fieldset-subtitle.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/fieldset-footer.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/fieldset-group.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/fieldset-content.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/fieldset/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/themes/presets/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/geist-provider/geist-provider.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/geist-provider/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/grid/grid-types.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/grid/basic-item.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/grid/grid.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/grid/grid-container.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/grid/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/image/image.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/image/image-browser.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/image/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/input/input-props.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/input/input.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/textarea/textarea.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/textarea/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/input/password.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/input/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/keyboard/keyboard.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/keyboard/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/link/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/loading/loading.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/loading/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/note/note.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/note/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/page/page.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/page/page-header.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/page/page-content.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/page/page-footer.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/page/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/pagination/pagination.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/pagination/pagination-previous.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/pagination/pagination-next.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/pagination/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tooltip/tooltip.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/popover/popover.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/popover/popover-item.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/popover/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/progress/progress.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/progress/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/radio/radio.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/radio/radio-group.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/radio/radio-description.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/radio/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/rating/rating.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/rating/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/select/select.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/select/select-option.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/select/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/slider/slider.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/slider/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/snippet/snippet.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/snippet/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/spacer/spacer.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/spacer/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/spinner/spinner.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/spinner/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/table/table-types.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/table/table-column.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/table/table.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/table/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tabs/tabs.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tabs/tabs-item.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tabs/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tag/tag.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tag/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/text/text.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/text/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/utils/types.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/themes/themes.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/themes/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/toggle/toggle.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/toggle/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tooltip/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tree/tree.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tree/tree-file.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tree/tree-folder.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/tree/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-all-themes/all-themes-context.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-all-themes/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-toasts/use-toast.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-toasts/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/user/user.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/user/user-link.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/user/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-body-scroll/use-body-scroll.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-body-scroll/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-clipboard/use-clipboard.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-clipboard/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-media-query/use-media-query.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-media-query/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-keyboard/use-keyboard.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-keyboard/codes.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-keyboard/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-input/use-input.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-input/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-modal/use-modal.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-modal/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-tabs/use-tabs.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-tabs/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-click-away/use-click-away.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-click-away/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-current-state/use-current-state.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-current-state/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/css-baseline/css-baseline.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/css-baseline/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-theme/theme-context.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/use-theme/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/esm/index.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/sheet/types.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/sheet/Sheet.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/sheet/index.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/models/ComponentStyle.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/models/ThemeProvider.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/utils/createWarnTooManyClasses.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/utils/domElements.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/types.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/constructors/constructWithOptions.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/constructors/styled.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/constants.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/constructors/createGlobalStyle.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/constructors/css.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/models/Keyframes.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/constructors/keyframes.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/utils/hoist.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/hoc/withTheme.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/models/ServerStyleSheet.d.ts","./node_modules/.pnpm/@types+stylis@4.2.5/node_modules/@types/stylis/index.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/models/StyleSheetManager.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/utils/isStyledComponent.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/secretInternals.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/base.d.ts","./node_modules/.pnpm/styled-components@6.1.19_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/styled-components/dist/index.d.ts","./components/loadingScreen.tsx","./lib/auth.tsx","./lib/hooks/useInfusions.ts","./pages/api/alert-lightstrip.ts","./pages/api/delete-account.ts","./pages/api/feedback.ts","./pages/api/flip-lightstrip.ts","./pages/api/log-treatment.ts","./pages/api/recent-treatments.ts","./pages/api/treatments.ts","./node_modules/.pnpm/@types+react-vis@1.11.15/node_modules/@types/react-vis/index.d.ts","./components/chart.tsx","./components/descriptionCards.tsx","./node_modules/.pnpm/react-qr-code@2.0.18_react@17.0.2/node_modules/react-qr-code/types/index.d.ts","./components/emergencyCard.tsx","./node_modules/.pnpm/@geist-ui+react-icons@1.0.1_@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2__react@17.0.2/node_modules/@geist-ui/react-icons/chevronRight.d.ts","./node_modules/.pnpm/@geist-ui+react-icons@1.0.1_@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2__react@17.0.2/node_modules/@geist-ui/react-icons/chevronLeft.d.ts","./node_modules/.pnpm/@geist-ui+react-icons@1.0.1_@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2__react@17.0.2/node_modules/@geist-ui/react-icons/moreHorizontal.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/types.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/Field.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/Formik.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/Form.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/withFormik.d.ts","./node_modules/@types/hoist-non-react-statics/node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/scheduler/tracing.d.ts","./node_modules/@types/hoist-non-react-statics/node_modules/@types/react/index.d.ts","./node_modules/@types/hoist-non-react-statics/index.d.ts","./node_modules/.pnpm/@types+hoist-non-react-statics@3.3.7_@types+react@17.0.89/node_modules/@types/hoist-non-react-statics/index.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/FieldArray.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/utils.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/connect.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/ErrorMessage.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/FormikContext.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/FastField.d.ts","./node_modules/.pnpm/formik@2.4.9_@types+react@17.0.89_react@17.0.2/node_modules/formik/dist/index.d.ts","./components/infusionModal.tsx","./components/infusionTable.tsx","./components/emergencyInfo.tsx","./components/emergencySnippet.tsx","./components/feedbackFishFooter.tsx","./components/feedbackModal.tsx","./node_modules/.pnpm/swr@1.3.0_react@17.0.2/node_modules/swr/dist/constants/revalidate-events.d.ts","./node_modules/.pnpm/swr@1.3.0_react@17.0.2/node_modules/swr/dist/types.d.ts","./node_modules/.pnpm/swr@1.3.0_react@17.0.2/node_modules/swr/dist/utils/config.d.ts","./node_modules/.pnpm/swr@1.3.0_react@17.0.2/node_modules/swr/dist/use-swr.d.ts","./node_modules/.pnpm/swr@1.3.0_react@17.0.2/node_modules/swr/dist/utils/use-swr-config.d.ts","./node_modules/.pnpm/swr@1.3.0_react@17.0.2/node_modules/swr/dist/index.d.ts","./components/feedbackPage.tsx","./components/footer.tsx","./components/logo.tsx","./components/header.tsx","./node_modules/.pnpm/@geist-ui+react-icons@1.0.1_@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2__react@17.0.2/node_modules/@geist-ui/react-icons/filter.d.ts","./node_modules/.pnpm/@types+underscore@1.13.0/node_modules/@types/underscore/index.d.ts","./node_modules/.pnpm/@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/@geist-ui/react/dist/utils/prop-types.d.ts","./components/statCard.tsx","./components/stats.tsx","./components/homePage.tsx","./components/identity.tsx","./components/settingsForm.tsx","./components/profilePage.tsx","./components/staticHeader.tsx","./components/withAuth.tsx","./components/blog/blogFooter.tsx","./node_modules/.pnpm/@geist-ui+react-icons@1.0.1_@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2__react@17.0.2/node_modules/@geist-ui/react-icons/index.d.ts","./components/blog/postFooter.tsx","./lib/auth-provider-wrapper.tsx","./pages/404.tsx","./pages/_app.tsx","./pages/_document.tsx","./pages/about.tsx","./pages/home.tsx","./pages/index.tsx","./pages/signin.tsx","./pages/changelog/hello-world-again.tsx","./pages/changelog/index.tsx","./node_modules/.pnpm/@geist-ui+react-icons@1.0.1_@geist-ui+react@2.2.5_react-dom@17.0.2_react@17.0.2__react@17.0.2__react@17.0.2/node_modules/@geist-ui/react-icons/share.d.ts","./pages/changelog/mobile-enhancements.tsx","./pages/changelog/monoclonal-antibodies.tsx","./pages/changelog/raycast-extension.tsx","./pages/emergency/[alertId].tsx","./pages/emergency/print.tsx","./node_modules/@types/readdir-glob/index.d.ts","./node_modules/@types/archiver/index.d.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/caseless/index.d.ts","./node_modules/@types/duplexify/index.d.ts","./node_modules/@types/mime/index.d.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/express/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/@types/jsonwebtoken/index.d.ts","./node_modules/@types/long/index.d.ts","./node_modules/@types/ms/index.d.ts","./node_modules/@types/request/node_modules/form-data/index.d.ts","./node_modules/@types/tough-cookie/index.d.ts","./node_modules/@types/request/index.d.ts","./node_modules/@types/scheduler/index.d.ts","./node_modules/@types/semver/classes/semver.d.ts","./node_modules/@types/semver/functions/parse.d.ts","./node_modules/@types/semver/functions/valid.d.ts","./node_modules/@types/semver/functions/clean.d.ts","./node_modules/@types/semver/functions/inc.d.ts","./node_modules/@types/semver/functions/diff.d.ts","./node_modules/@types/semver/functions/major.d.ts","./node_modules/@types/semver/functions/minor.d.ts","./node_modules/@types/semver/functions/patch.d.ts","./node_modules/@types/semver/functions/prerelease.d.ts","./node_modules/@types/semver/functions/compare.d.ts","./node_modules/@types/semver/functions/rcompare.d.ts","./node_modules/@types/semver/functions/compare-loose.d.ts","./node_modules/@types/semver/functions/compare-build.d.ts","./node_modules/@types/semver/functions/sort.d.ts","./node_modules/@types/semver/functions/rsort.d.ts","./node_modules/@types/semver/functions/gt.d.ts","./node_modules/@types/semver/functions/lt.d.ts","./node_modules/@types/semver/functions/eq.d.ts","./node_modules/@types/semver/functions/neq.d.ts","./node_modules/@types/semver/functions/gte.d.ts","./node_modules/@types/semver/functions/lte.d.ts","./node_modules/@types/semver/functions/cmp.d.ts","./node_modules/@types/semver/functions/coerce.d.ts","./node_modules/@types/semver/classes/comparator.d.ts","./node_modules/@types/semver/classes/range.d.ts","./node_modules/@types/semver/functions/satisfies.d.ts","./node_modules/@types/semver/ranges/max-satisfying.d.ts","./node_modules/@types/semver/ranges/min-satisfying.d.ts","./node_modules/@types/semver/ranges/to-comparators.d.ts","./node_modules/@types/semver/ranges/min-version.d.ts","./node_modules/@types/semver/ranges/valid.d.ts","./node_modules/@types/semver/ranges/outside.d.ts","./node_modules/@types/semver/ranges/gtr.d.ts","./node_modules/@types/semver/ranges/ltr.d.ts","./node_modules/@types/semver/ranges/intersects.d.ts","./node_modules/@types/semver/ranges/simplify.d.ts","./node_modules/@types/semver/ranges/subset.d.ts","./node_modules/@types/semver/internals/identifiers.d.ts","./node_modules/@types/semver/index.d.ts","./node_modules/@types/sinonjs__fake-timers/index.d.ts","./node_modules/.pnpm/@types+styled-components@5.1.35/node_modules/@types/styled-components/index.d.ts","./node_modules/@types/stylis/index.d.ts","./node_modules/@types/triple-beam/index.d.ts","./node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[100,147,265,540,728,754],[100,147,540,728,818],[100,147,540,542,543,755,763],[100,147,262,540,728],[88,100,147,264,540,552,728,752,754,766],[100,147,540,551,728,752,754,791],[100,147,540,728],[100,147,540,541,545,728,754,789],[100,147,319,540,545,728,752,753,754,801],[100,147,540,728,752,754,793],[100,147,540,728,754,790,804],[88,100,147,256,540,728,755,764,791,806,810],[100,147,540,728,752,754],[100,147,540,541,542,543,728,754,755,789],[88,100,147,540,542,543,550,728,752,754,755,768,769,770,790],[100,147,540,728,752],[100,147,262,264,540,728],[88,100,147,265,540,543,549,552,728,754,767,793,813],[88,100,147,540,543,549,552,728,754,789],[100,147,540,728,808],[100,147,265,540,728,752,754,804],[100,147,540,542,543,550,728,752,755,795,807,809],[88,100,147,256,540,753,754],[100,147,306,315,540],[100,147,540],[100,147,523,540,545],[100,147,523,540,541,542],[100,147,523,540],[100,147,540,754],[88,100,147,265,537,538,540,541,543,549,554,753],[100,147,538,540,541],[100,147,318,540],[100,147,325,509,522,540],[100,147,533,535,537,540],[100,147,539,540,542],[88,100,147,538,540,550,551],[88,100,147,535,540],[88,100,147,538,540,542,550,754],[100,147,272,273,540],[100,147,528,529,531,540],[100,147,529,532,540],[100,147,524,525,526,527,540],[100,147,526,540],[100,147,524,526,527,540],[100,147,525,526,527,540],[100,147,525,540],[100,147,529,531,532,540],[100,147,530,540],[88,100,147,540],[88,100,147,540,558],[88,100,147,540,558,559,560],[100,147,540,559,561,562,563],[100,147,540,565,566],[88,100,147,540,558,560],[100,147,540,568,569],[88,100,147,540,572],[100,147,540,571,573,574],[88,100,147,540,560],[100,147,540,578,579],[100,147,540,560,581],[100,147,540,560,576],[100,147,540,583],[100,147,540,560,585,586,587],[100,147,540,589,590],[100,147,540,592],[100,147,540,594,595],[100,147,540,724],[100,147,540,597],[100,147,540,599],[100,147,540,560,601],[100,147,540,603],[88,100,147,540,558,605],[100,147,540,606,607,608,609,612],[100,147,540,614,615,616,617,618,619],[88,100,147,540,621],[100,147,540,622],[88,100,147,540,624],[88,100,147,540,558,624,625],[88,100,147,540,558,625],[100,147,540,624,625,626,627],[88,100,147,540,558,572],[100,147,540,629,630],[100,147,540,564,567,570,575,577,580,582,584,588,591,593,596,598,600,602,604,612,613,620,623,628,631,635,637,639,640,642,644,649,653,657,659,663,665,668,670,672,674,676,680,683,685,687,690,692,693,697,699,701,704,706,708,710,713,715,717,719,721,723,725,727],[100,147,540,632,633,634,635,636],[88,100,147,540,558,632],[88,100,147,540,632],[100,147,540,638],[100,147,540,572],[100,147,540,641],[100,147,540,607,608,609,610,611],[88,100,147,540,558,576],[100,147,540,643],[100,147,540,645,646,647,648],[100,147,540,650,651,652],[100,147,540,655,656],[88,100,147,540,558,560,654],[100,147,540,658],[100,147,540,660,661,662],[100,147,540,664],[100,147,540,666,667],[100,147,540,669],[100,147,540,560,671],[100,147,540,673],[100,147,540,675],[100,147,540,677,678,679],[88,100,147,540,677],[88,100,147,540,558,677,678],[100,147,540,681,682],[100,147,540,684],[100,147,540,686],[100,147,540,634],[100,147,540,621,689],[100,147,540,621,688],[100,147,540,691],[100,147,540,654],[100,147,540,694,695,696],[100,147,540,698],[100,147,540,705],[100,147,540,720],[100,147,540,707],[100,147,540,722],[100,147,540,714],[100,147,540,711,712],[100,147,540,709],[100,147,540,716],[88,100,147,540,612],[100,147,540,555,556,557],[100,147,540,555],[88,100,147,540,555],[100,147,540,718],[100,147,540,726],[100,147,540,700],[100,147,540,702,703],[100,147,502,504,506,540],[100,147,338,343,423,540],[100,147,177,500,505,540],[100,147,177,500,503,540],[100,147,177,500,501,540],[100,147,399,400,540],[100,147,185,540],[100,147,327,540],[100,147,326,327,328,329,330,403,540],[100,147,158,177,326,327,382,401,402,404,540],[100,147,166,185,328,331,333,334,540],[100,147,332,540],[100,147,330,333,335,336,380,403,404,540],[100,147,336,337,348,349,379,540],[100,147,326,327,329,381,383,400,404,540],[100,147,327,328,330,333,335,381,382,400,403,405,540],[100,147,331,334,335,349,384,392,393,395,396,404,407,408,409,410,411,412,413,414,415,419,540],[100,147,327,404,409,540],[100,147,327,404,540],[100,147,343,540],[100,147,367,540],[100,147,345,346,352,353,540],[100,147,343,344,348,351,540],[100,147,343,344,347,540],[100,147,344,345,346,540],[100,147,343,350,355,356,360,361,362,363,364,365,373,374,376,377,378,421,540],[100,147,354,540],[100,147,359,540],[100,147,353,540],[100,147,372,540],[100,147,375,540],[100,147,353,357,358,540],[100,147,343,344,348,540],[100,147,353,369,370,371,540],[100,147,343,344,366,368,540],[100,147,343,387,389,421,540],[100,147,388,540],[100,147,327,328,329,330,332,333,335,336,380,381,382,383,384,394,397,398,399,400,403,404,405,406,407,420,540],[100,147,327,328,330,333,335,336,380,392,396,403,404,410,416,417,418,540],[100,147,333,349,395,404,540],[100,147,333,349,393,394,395,404,420,540],[100,147,333,336,349,395,396,404,540],[100,147,333,336,349,380,392,394,396,404,540],[100,147,326,327,328,329,330,404,410,419,540],[100,147,329,540],[100,147,333,335,383,399,540],[100,147,162,540],[100,147,177,401,540],[100,147,381,387,390,392,396,399,540],[100,147,327,329,392,395,404,540],[100,147,327,329,333,334,349,394,404,409,540],[100,147,326,327,328,329,404,414,419,540],[100,147,158,177,326,327,330,397,398,400,402,404,540],[100,147,162,185,331,421,540],[100,147,162,326,327,330,333,386,397,400,403,404,540],[100,147,177,333,349,380,384,398,400,403,540],[100,147,329,393,540],[100,147,327,329,404,540],[100,147,162,326,329,386,404,540],[100,147,328,336,380,381,391,540],[100,147,327,328,333,334,335,336,349,380,381,385,386,392,540],[100,147,162,326,327,333,334,335,349,380,385,404,540],[100,147,195,338,339,342,343,422,423,540],[100,147,195,338,339,340,342,343,423,540],[100,144,147,540],[100,146,147,540],[147,540],[100,147,152,180,540],[100,147,148,153,158,166,177,188,540],[100,147,148,149,158,166,540],[95,96,97,100,147,540],[100,147,150,189,540],[100,147,151,152,159,167,540],[100,147,152,177,185,540],[100,147,153,155,158,166,540],[100,146,147,154,540],[100,147,155,156,540],[100,147,157,158,540],[100,146,147,158,540],[100,147,158,159,160,177,188,540],[100,147,158,159,160,173,177,180,540],[100,147,155,158,161,166,177,188,540],[100,147,158,159,161,162,166,177,185,188,540],[100,147,161,163,177,185,188,540],[98,99,100,101,102,103,104,143,144,145,146,147,148,149,150,151,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,540],[100,147,158,164,540],[100,147,165,188,193,540],[100,147,155,158,166,177,540],[100,147,167,540],[100,147,168,540],[100,146,147,169,540],[100,144,145,146,147,148,149,150,151,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,540],[100,147,171,540],[100,147,172,540],[100,147,158,173,174,540],[100,147,173,175,189,191,540],[100,147,158,177,178,180,540],[100,147,179,180,540],[100,147,177,178,540],[100,147,180,540],[100,147,181,540],[100,144,147,177,182,540],[100,147,158,183,184,540],[100,147,183,184,540],[100,147,152,166,177,185,540],[100,147,186,540],[100,147,166,187,540],[100,147,161,172,188,540],[100,147,152,189,540],[100,147,177,190,540],[100,147,165,191,540],[100,147,192,540],[100,142,147,540],[100,142,147,158,160,169,177,180,188,191,193,540],[100,147,177,194,540],[84,85,86,87,100,147,540],[85,88,100,147,540,782],[100,147,485,540],[100,147,280,304,540],[100,147,275,540],[100,147,277,540],[100,147,280,540],[100,105,147,308,540],[100,147,306,309,310,540],[100,147,276,278,279,281,294,296,297,298,304,305,306,307,310,311,312,313,540],[100,147,299,300,301,302,303,540],[100,147,282,284,285,286,287,288,289,290,291,292,293,294,540],[100,147,282,283,285,286,287,288,289,290,291,292,293,294,540],[100,147,283,284,285,286,287,288,289,290,291,292,293,294,540],[100,147,282,283,284,286,287,288,289,290,291,292,293,294,540],[100,147,282,283,284,285,287,288,289,290,291,292,293,294,540],[100,147,282,283,284,285,286,288,289,290,291,292,293,294,540],[100,147,282,283,284,285,286,287,289,290,291,292,293,294,540],[100,147,282,283,284,285,286,287,288,290,291,292,293,294,540],[100,147,282,283,284,285,286,287,288,289,291,292,293,294,540],[100,147,282,283,284,285,286,287,288,289,290,292,293,294,540],[100,147,282,283,284,285,286,287,288,289,290,291,293,294,540],[100,147,282,283,284,285,286,287,288,289,290,291,292,294,540],[100,147,282,283,284,285,286,287,288,289,290,291,292,293,540],[100,147,280,296,540],[100,147,295,540],[100,147,188,195,540],[100,147,161,195,320,540],[100,147,320,321,322,323,324,540],[100,147,321,540],[100,147,325,516,518,520,540],[100,147,325,510,511,512,513,514,515,540],[100,147,324,325,510,511,512,513,514,515,516,517,518,519,520,521,540],[100,147,519,540],[100,147,511,540],[100,147,510,516,517,540],[100,147,195,325,511,540],[100,147,325,507,540],[100,147,324,325,507,508,540],[100,147,325,540],[100,147,532,540],[100,147,536,540],[100,147,534,540],[88,100,147,540,771,781,782],[88,100,147,540,771,772,781,782],[88,100,147,540,771],[88,100,147,540,771,772],[88,100,147,540,771,782],[100,147,540,771,772,773,774,775,783,784,785,786,787,788],[88,100,147,540,772],[100,147,161,177,188,540],[100,147,161,188,424,425,540],[100,147,424,425,426,540],[100,147,424,540],[100,147,161,449,540],[100,147,158,427,428,429,431,434,540],[100,147,431,432,441,443,540],[100,147,427,540],[100,147,427,428,429,431,432,434,540],[100,147,427,434,540],[100,147,427,428,429,432,434,540],[100,147,427,428,429,432,434,441,540],[100,147,432,441,442,444,445,540],[100,147,177,427,428,429,432,434,435,436,438,439,440,441,446,447,456,540],[100,147,431,432,441,540],[100,147,434,540],[100,147,432,434,435,448,540],[100,147,177,429,434,540],[100,147,177,429,434,435,437,540],[100,147,172,427,428,429,430,432,433,540],[100,147,427,432,434,540],[100,147,432,441,540],[100,147,427,428,429,432,433,434,435,436,438,439,440,441,442,443,444,445,446,448,450,451,452,453,454,455,456,540],[100,147,338,343,423,472,540],[100,147,462,463,464,471,494,497,540],[100,147,177,462,463,493,497,540],[100,147,462,463,465,494,496,497,540],[100,147,468,469,471,497,540],[100,147,470,494,495,540],[100,147,494,540],[100,147,456,471,473,493,497,498,540],[100,147,471,494,497,540],[100,147,465,466,467,470,492,497,540],[100,147,161,338,343,423,456,462,464,471,473,475,476,477,478,479,480,481,482,483,484,488,490,493,494,497,498,540],[100,147,487,489,540],[100,147,338,343,423,462,494,496,540],[100,147,338,343,423,457,461,498,540],[100,147,161,338,343,383,421,423,456,476,497,540],[100,147,448,456,474,477,489,497,498,540],[100,147,338,343,421,423,456,457,461,462,463,464,471,473,474,475,477,478,479,480,481,482,483,484,489,490,493,494,497,498,499,540],[100,147,456,474,478,489,497,498,540],[100,147,462,463,465,492,494,497,540],[100,147,338,343,423,471,490,491,540],[100,147,158,462,463,473,492,494,497,498,540],[100,147,462,463,465,494,540],[100,147,177,448,456,463,471,473,474,489,494,497,498,540],[100,147,177,465,471,494,497,540],[100,147,177,486,540],[100,147,464,465,471,540],[100,147,177,462,494,497,540],[100,147,341,540],[93,100,147,540],[100,147,249,540],[100,147,251,540],[100,147,199,202,238,540],[100,147,204,540],[100,147,197,210,540],[100,147,197,210,211,540],[100,147,197,540],[88,100,147,188,195,540],[88,100,147,210,244,540],[88,100,147,210,540],[100,147,242,246,540],[88,100,147,243,248,540],[100,147,198,540],[88,100,147,239,248,540],[88,100,147,248,540],[100,147,161,195,203,248,540],[100,147,161,195,202,204,540],[100,147,161,177,195,203,204,208,540],[100,147,161,172,188,195,198,199,200,202,203,204,206,208,209,210,213,220,221,223,225,226,227,229,231,238,540],[100,147,161,177,195,540],[100,147,197,199,200,201,238,540],[100,147,202,540],[100,147,172,188,195,199,202,203,204,206,209,219,224,226,228,232,234,235,540],[100,147,161,188,195,202,208,231,540],[100,147,196,238,248,540],[100,147,161,172,188,195,199,202,203,206,208,209,212,213,219,220,221,223,224,225,227,228,231,232,233,248,540],[100,147,161,195,208,234,236,540],[100,147,161,195,540],[88,100,147,161,172,195,198,200,204,208,213,225,226,238,540],[100,147,161,172,188,195,203,207,540],[100,147,230,540],[100,147,195,213,540],[100,147,172,195,198,199,203,206,208,540],[100,147,161,195,213,222,540],[100,147,161,195,203,223,540],[100,147,219,540],[100,147,216,540],[100,147,202,214,215,219,540],[100,147,202,214,215,540],[100,147,202,207,216,217,218,540],[88,100,147,196,225,238,248,540],[88,100,147,172,188,195,198,241,243,245,248,540],[100,147,203,206,210,540],[100,147,172,195,540],[100,147,205,540],[88,100,147,161,172,195,198,238,239,240,246,247,540],[83,88,89,90,91,100,147,238,540],[100,147,253,540],[100,147,255,540],[100,147,257,540],[100,147,259,540],[100,147,261,540],[92,94,100,147,238,250,252,254,256,258,260,262,264,265,267,270,271,540],[100,147,263,540],[100,147,243,540],[100,147,266,540],[100,147,216,217,218,219,268,269,540],[100,147,195,540],[88,92,100,147,161,172,195,198,204,237,248,540],[100,147,338,343,423,458,540],[100,147,458,459,460,540],[100,147,540,733,736,739,740,741,743,745,746,748,749,750],[88,100,147,540,736],[100,147,540,736],[100,147,540,736,742],[88,100,147,540,736,737],[88,100,147,540,736,744],[100,147,540,736,738,751],[100,147,540,731,736],[88,100,147,177,195,540,731],[88,100,147,540,731,736,747],[100,147,540,731],[100,147,540,729,736],[100,147,540,730],[85,88,100,147,540,732,733,734,735],[100,147,540,797,798,799,800],[100,147,540,796],[88,100,147,540,797,798],[100,147,540,797],[100,114,118,147,188,540],[100,114,147,177,188,540],[100,109,147,540],[100,111,114,147,185,188,540],[100,147,166,185,540],[100,109,147,195,540],[100,111,114,147,166,188,540],[100,106,107,110,113,147,158,177,188,540],[100,114,121,147,540],[100,106,112,147,540],[100,114,135,136,147,540],[100,110,114,147,180,188,195,540],[100,135,147,195,540],[100,108,109,147,195,540],[100,114,147,540],[100,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,147,540],[100,114,129,147,540],[100,114,121,122,147,540],[100,112,114,122,123,147,540],[100,113,147,540],[100,106,109,114,147,540],[100,114,118,122,123,147,540],[100,118,147,540],[100,112,114,117,147,188,540],[100,106,111,114,121,147,540],[100,147,177,540],[100,109,114,135,147,193,195,540],[100,147,159,177,194,540,836],[100,147,161,195,540,839],[100,147,177,195,540],[100,147,158,161,195,540,844,845,846],[100,147,540,840,845,847,849],[100,147,540,780],[85,87,100,147,540,776,778],[100,147,158,159,195,540],[100,147,159,161,163,166,177,188,195,540,841,856,857],[100,147,540,860,899],[100,147,540,860,884,899],[100,147,540,899],[100,147,540,860],[100,147,540,860,885,899],[100,147,540,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898],[100,147,540,885,899],[100,147,159,177,195,540,843],[100,147,161,195,540,844,848],[100,147,158,177,195,540],[88,100,147,265,540,753,754,816],[88,100,147,250,260,540,544,728,752],[100,147,254,540,728,752],[100,147,260,264,540,728,752,803,815],[100,147,272,540],[100,147,272,523,540,548],[100,147,272,523,540,546],[100,147,272,540,547],[100,147,260,540,728,752,803,815,817,819],[100,147,260,540,728,752,769,803,815,817,819,830],[100,147,260,540,728,752,769,803,815,817,819],[100,147,260,264,265,540,550,553,728,752,792,803],[100,147,260,540,728,752,767,804],[88,100,147,260,265,540,543,728,752,754,802,803,805,811,814,816],[100,147,260,262,264,540,728,752,765,803,815],[100,147,260,540,728,752,754,803,804,816]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"2d100d34b597b4ca8f3cdaac049dd8607ca3b5622e5b89ce2e088357eaea6dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"b1bf87add0ccfb88472cd4c6013853d823a7efb791c10bb7a11679526be91eda","impliedFormat":1},{"version":"803586c75b107c30eb4e0f48796ab4fd825e49ff8947a885fc05b63de01d9e31","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"54bd71c625e111b058159fc737c8f9a7170acfdb63cdb9a178558fb70e9fa9e9","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1dc4bc37e2476766f29718f5006981009e2c7470ddd538d87be731b8bb24280","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"f9ab232778f2842ffd6955f88b1049982fa2ecb764d129ee4893cbc290f41977","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"30a1b56068b3820c91a055425a6af2294f8ef2bb10a59dcda413f6437093620d","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"54be1e9fa1341e79190896d0b79279b681714d79126b7e012777e328385cacb6","impliedFormat":1},{"version":"625e5d5e9e25017d53e65c62ff944d812d48ec1bbaaf7395c8f8cdf6c9218061","impliedFormat":1},{"version":"d9eb71e7c70837921557ecc76865043734dac2cd1bf1d3a7b24879de47befc89","impliedFormat":1},{"version":"39a3fc61a65aee8c90cd81bb2c9b508be6c5cc745cd40eaed95954a07c11bb82","impliedFormat":1},{"version":"254a9b57801e4f45ef7576236e5984e4abd95a03ea06b2018801ae3200e1617e","impliedFormat":1},{"version":"3150ee51540bdf0d4e0ccb05de6f905962dc3505bd28b7385c6924f7d9eeba11","impliedFormat":1},{"version":"2302818e3723d16f85c3d75de67247a1bacc23f5399b8235fde025737a6cc5b8","impliedFormat":1},{"version":"a13e414841a16a10e8637397f2551c52e1025278f4d8d2397824546dc272441b","impliedFormat":1},{"version":"98e00fba67d4b527de2929778f96c7f9453fbbb8c50968ff096dddd29057450b","impliedFormat":1},{"version":"b8d57d43415dc08b757f7bdfa382b596bf3627565dcb11bc325956f351abc813","impliedFormat":1},{"version":"481317b3d14426c2145b2a9a368f27278b20a76115bcc58ac5eb8649791e66b0","impliedFormat":1},{"version":"e5fe42c833993ca99b2e7628fd90bc3c0d30c9447a925d332ab90a53dff5743a","impliedFormat":1},{"version":"e264129e63c4e4c13586d8e166ee80c90a7da663b3d3e2a40f0fcaf89e267685","impliedFormat":1},{"version":"22082ac39501b626f8b4322d6bd6fb0424de438777b141f663286cf8bd048398","impliedFormat":1},{"version":"7efab7f15be1969d9e92bab327ec311d0bf7fc972f793cc8ca25ee95d7b720ad","impliedFormat":1},{"version":"bd53743631e1afc700defefceea03658ce7fa4a5a0a42622daed233b8c8d8473","impliedFormat":1},{"version":"16a510a8408f5a845b3e5dbe17a731b9e6dfdcd416410c36f8afcd8cf60c57a4","impliedFormat":1},{"version":"85cc7ba47f064d73b53d98e5384dad6e88809b8c0ecbf155846203d8736e99bb","impliedFormat":1},{"version":"be5dfb4c5c1bdfb0d853370c0de9a995cb39eef0f277d645a7f43caaea423d18","impliedFormat":1},{"version":"58902668adae2e5eb67efbccb4048afa02308fa684f1a4e4c7d47668ecf58c1b","impliedFormat":1},{"version":"2e14bcdfb0fd8cf0f6397a641018bb3d1409870af299707126302bd264cb3d42","impliedFormat":1},{"version":"11206290b4d52fa4a2ce697aef740ebb4514c58ac73a7c792e5b241b24d03c1b","impliedFormat":1},{"version":"837acd3f64bcd556da76827c292e82ad812170d880a490a7deb3f2de0ffa7c9a","impliedFormat":1},{"version":"2e94503b5076c161c7aac50b99bc5244ffc4cc3c4b699d079ce24b86208ebd18","impliedFormat":1},{"version":"17937316a2f7f362dd6375251a9ce9e4960cfdc0aa7ba6cbd00656f7ab92334b","impliedFormat":1},{"version":"2a878850cefd50fcb86b1164005cc48294edf62fc3bb100301378a448e3d2112","impliedFormat":1},{"version":"4e0528cf15ca199d8b363895c38e4f7b45ccd79d34f84861e8800cbd41eb2d37","impliedFormat":1},{"version":"8e64a4268cab5c9790d4895275ffbe654d75b877601ecb0ffadb66f95132b3bd","impliedFormat":1},{"version":"eaf9ff519bd303bff935b04d60d1269708fd2b5ce41b3d1d8ced373e2c02b76d","impliedFormat":1},{"version":"71cad090e94ca13ef78b9f4275159a76fb950ad33b47ea24f4874d1df5ad3dfa","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"37ac25883371c238e6c4575498d3517a25433382ed77f5181af60f9fa06eb2c4","impliedFormat":1},{"version":"1d5b8dfb36cd7234b297aeb66435f37ddb7579b1ef5e94a13e195d51b09c92cd","impliedFormat":1},{"version":"7a18dff83add08d87a614e3c28b07e919def3d72928dc846d557be176fc9e3a5","impliedFormat":1},{"version":"ecdfa1a2faf120fe24d456616945fee5c950b55ca60e3936592524b737a0623a","impliedFormat":1},{"version":"90e20fced750a875bb86a6b781a43593647f11bbb979511a4d7051d2d21f90db","impliedFormat":1},{"version":"7d03f9b34192444d1ae3d2dce4f88a126e51fb8e0cb0ce5a92019ff6212dc1ca","impliedFormat":1},{"version":"45f80f549a22887e9f85ad3c6a24a382d1e825c8e7fa72a2d1e7c53e0c4e623f","impliedFormat":1},{"version":"5cab8fa167ee711e4dfcd22ed632c60be36bd49dc6eea8cfdd3613c59d00c43d","impliedFormat":1},{"version":"a5b7d9811cb310f8abaebedbd80023cea0c9b4011984ca0c58a52f25fee67495","affectsGlobalScope":true,"impliedFormat":1},{"version":"22671c0bd8afbe9238285b94a9f6bf447838f290ff054850145989d347099192","impliedFormat":1},{"version":"00357bb70a10782936bbfdf7c87ad632e5c2694b6714224ea0995299db1885ed","impliedFormat":1},{"version":"2766dee26ea113e9b491b7842cb44df57c4d79b17057b42607e09fc174bd411d","impliedFormat":1},{"version":"cb4047ce260c2f4585b2d592d04a1d9a9c2a1ba32679a688523ec314a977989a","impliedFormat":1},{"version":"0511c61c22d677da1b6bab4d3844aead1d7e27028d2f0ed1ed315e0860ed5357","impliedFormat":1},{"version":"b4610d904ab939109aa8bcee6f795de8da780b6b4a4d8ff2ff9d2e3b699f55b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b20e6ed022d1615533cacba5ff84521a86e86e98ef79318415235d64858a0e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"37b859e0b3e9c67252710e6135a3e80daa5ccc5d9eaadd7728ede7ccde2d1263","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7f9c8b05e3a56b80f6a8362b3f084ea887d3f857bc885a5f1dbc03150b981dd","impliedFormat":1},{"version":"1329c41c13694c2d89f4576fc3d0f04e07f311a682bf958bde5b79e6c76c0137","impliedFormat":1},{"version":"f77d46ee52fbe94069be9a6b7d7345144d9b64fceb68c4fd27578ba333b66b6a","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"8303df69e9d100e3df8f2d67ec77348cb6494dc406356fdd9b56e61aa7c3c758","impliedFormat":1},{"version":"8de50542d92f9ac659c30ead0a97e9c107dd3404a3b4fd4bf3504589a026221a","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"7e3327a4bd457a8949d15cc317b76fc394732519b09facac6836a726b58f277e","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"c3a905a7fa93ca648349e934fb19356cf7b40e48d65658de3e0c77d67696fd40","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"c2489c80994d62e5b51370a6f02f537db4c37af5f914fcb5b2755b81f1906cae","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"38f19e920e7f0babb44119ed394e1916a16cf04b17b6724e07e1497cd5ea1445","impliedFormat":1},{"version":"42c686ce08bf5576ed178f4a6a62d1b580d941334fb53bdff7054e0980f2dc75","impliedFormat":1},{"version":"f5daecf7f124d12e92b3f640dabe6fe5f0444bb4d471fc2ee1811a5d8ba17981","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"26a451bf3a5f87ebaaa7694c5b664c3d9cec296f3fa8b797b872aee0f302b3a0","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"195aae3bcd7fa56c83e3242a6b613be4e70bbebbeebcf366140200750a7bd05e","impliedFormat":1},{"version":"5b5399e88bf15a6fbf4ac3660ae8c3df467932531f6940a914987faad103072e","impliedFormat":1},{"version":"7a87441a419deeff2165cf497fed7c3600c886cd41e92bce644320b9a01f5c5c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9c00f78ac4e60d1c34d0fb415df6b2fea5f6eea200076dff4d782256a4c2802d","impliedFormat":1},{"version":"79d056984a8964d3917c7587067447d7565d9da696fcf6ecaa5e8437a214f04e","impliedFormat":1},"9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf",{"version":"bc90fb5b7ac9532ac8bbe8181112e58b9df8daa3b85a44c5122323ee4ecbc2bd","impliedFormat":1},{"version":"9261ae542670cb581169afafa421aeeaf0f6ccd6c8f2d97b8a97ee4be9986c3e","impliedFormat":1},{"version":"6247a016129906c76ba4012d2d77773c919ea33a96830b0a8d522a9790fc7efe","impliedFormat":1},{"version":"01e24df7c7f6c1dabd80333bdd4e61f996b70edec78cc8c372cc1de13d67cfa5","impliedFormat":1},{"version":"f4742762590497b770af445215e3a7cf1965664b39257dba4ce2a4317fc949d8","impliedFormat":1},{"version":"ceeda631f23bd41ca5326b665a2f078199e5e190ab29a9a139e10c9564773042","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b43d676651f4548af6a6ebd0e0d4a9d7583a3d478770ef5207a2931988fe4e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc","impliedFormat":1},{"version":"438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2","impliedFormat":1},{"version":"0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe","impliedFormat":1},{"version":"509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32","impliedFormat":1},{"version":"9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793","impliedFormat":1},{"version":"3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","impliedFormat":1},{"version":"4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a","impliedFormat":1},{"version":"2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5","impliedFormat":1},{"version":"0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8","affectsGlobalScope":true,"impliedFormat":1},{"version":"550650516d34048712520ffb1fce4a02f2d837761ee45c7d9868a7a35e7b0343","impliedFormat":1},{"version":"c5e4864ae47a0aec24cdaef2e1b2fa34098f99c66d2adf07f96bcb3599414a3d","impliedFormat":1},{"version":"a1b3f2d5c8492001bef40ffd691ab195562e9e8b886cf9c4ed1246774d674dec","affectsGlobalScope":true,"impliedFormat":1},{"version":"060f0636cb83057f9a758cafc817b7be1e8612c4387dfe3fbadda865958cf8c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"84c8e0dfd0d885abd37c1d213ef0b949dd8ef795291e7e7b1baadbbe4bc0f8a9","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d21da8939908dafa89d693c3e22aabeef28c075b68bb863257e631deef520f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"5261e21f183c6c1c3b65784cdab8c2a912b6f4cd5f8044a1421466a8c894f832","affectsGlobalScope":true,"impliedFormat":1},{"version":"8c4a3355af2c490a8af67c4ec304e970424a15ef648a3c3fbb3ee6634461e2cc","affectsGlobalScope":true,"impliedFormat":1},{"version":"06c5dad693aebbff00bd89fccb92bce6c132a6aa6033bb805560fa101e4fe77b","impliedFormat":1},{"version":"6739393f79c9a48ec82c6faa0d6b25d556daf3b6871fc4e5131f5445a13e7d15","impliedFormat":1},{"version":"66a11cff774f91be73e9c9890fe16bcc4bce171d5d7bd47b19a0d3e396c5f4ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba7eb9ae7b89904a2638acdab3661cde5ddbfdbb995024686a9424c7163c3a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"793adb3237a0672f4c166a8e7b92901322cd7a64c60e35bb62a462a1542ac881","affectsGlobalScope":true,"impliedFormat":1},{"version":"452234c0b8169349b658a4b5e2b271608879b3914fcc325735ed21b9cb88d58d","impliedFormat":1},{"version":"48e97ffc64175d0ab89b5936cd4603cbfab871fc5cc9ea5c4b163be77633bc0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"326d76935bfa6ffe5b62a6807a59c123629032bd15a806e15103fd255ea0922b","affectsGlobalScope":true,"impliedFormat":1},{"version":"50210163584e7511b110fcc4f1f1befbfac31ad3907ca03200c81421000dfd94","affectsGlobalScope":true,"impliedFormat":1},{"version":"f87409d8f4452ba84cf6c1d395735d5c2c2a5c6aff3aca270bedd0b59558abc7","affectsGlobalScope":true,"impliedFormat":1},{"version":"f612acaec65ab596424c13455d3227184c078f7b07988706aee6b95876b7b830","affectsGlobalScope":true,"impliedFormat":1},{"version":"b64d019a041fecb45196c9f1af80af16c60adaa23efb3cef12e3b765b45d4412","impliedFormat":1},{"version":"674c7eb70201c86688bd9c90664b1147ea6218720b32d7a6c904745af0b27090","impliedFormat":1},"565b30e91b39c0558deea578c3b1d8d3ff05d05f989773680a0b3af1af629369",{"version":"c1e3e8739966af28e3928cd1be38090435458d2337a43f4da908c18fc6725e25","affectsGlobalScope":true},{"version":"e75aea34fc8ed19027ad9e082ebe562594a21d14d520289adc416f846a606ca6","impliedFormat":1},"3108b7aa80bb6966f3a75622373658ae6b2703561359679b414a254f469a5807",{"version":"b0046decbfa95be671046e9ff7d2d0b20f8fd2bccca37adfee0b708d0f43998d","impliedFormat":1},{"version":"c0b267335305e392d3f4129b68616baf48b3161696faa96e186b26d2f6a619d4","impliedFormat":1},{"version":"736ceb42da6acc5ecab4a189df3e8a32af2411acb29836b41127716893b7fc98","impliedFormat":1},{"version":"cd5b42538ceb9d69eaac2a46a79c2e053eacc289f22f2578c0986c3bc90a87f8","impliedFormat":1},{"version":"71d3b44df5c300d7944573523afda6e94d872613f4fe19e0ccc8c6f9ba0bbcf7","impliedFormat":1},{"version":"044a855baf9fac854bfd87ec98dee05c70037ccffe174ae452dc8afca3d6bc30","impliedFormat":1},{"version":"ddc11f385daa285bb0038898cef607ec492c7072e92df84d52df9d05a7092458","impliedFormat":1},{"version":"a22806a27f1b4c5d5616a87a62a3d89ad5b296fac68ae0a897429eb212ea3136","impliedFormat":1},{"version":"7c2c53a02a478ca87cab2342d35702e201775143cebee8b368372a181209decd","impliedFormat":1},{"version":"181694d1f7a579e57c55efb1418904efc513ebce0b08601e94f288674104359e","impliedFormat":1},{"version":"7e9b2581de465503aad53611709c61a3becd372b86c43bf9863f5715a1616fd5","impliedFormat":1},{"version":"d415bfa0853e03226a2342ab7ee3ef0d085e6d94e7dde869fe745ab11a8b3cc6","impliedFormat":1},{"version":"eed0cfbd238f0f9def37d26d793393c8cfb59afe28ecd1a4639a58905abdadf1","impliedFormat":1},{"version":"014705d98454b8d9f5bbf5c7dffa2079d151866d6e12d552e5faa2df8ee2fd5b","impliedFormat":1},{"version":"ab1296040de80ee4c7cfa5c52ff8f3b34a3f19a80ba4c9d3902ee9f98d34b6b5","impliedFormat":1},{"version":"952dc396aaf92bf4061cefdeb1a8619e52a44d7c3c0cc3bad1a1ddc6c2b417e4","impliedFormat":1},{"version":"416eec23b202526964d0f5ebf0ca9e0d8c08e4260bc0946143b66f1a1e17b787","impliedFormat":1},{"version":"bcb14be213a11d4ae3a33bd4af11d57b50a0897c0f7df0fa98cd8ee80a1b4a20","impliedFormat":1},{"version":"116b961153d86b304e788884c4a05630fe98423bcfc14c7a7ea8d542092aac10","impliedFormat":1},{"version":"f17c007d95f666ecf664ff13ca8efc196980597c4ca152a0baaa82b2525e2328","impliedFormat":1},{"version":"02ff761f690163463a4e7594d666e4c73995c4f72746a5967b3477d9ecf62c4e","impliedFormat":1},{"version":"84206a85be8e7e8f9307c1d5c087aedb4d389e05b755234aa8f37cc22f717aaf","impliedFormat":1},{"version":"45b1df23c0a6e5b45cb8fc998bd90fa9a6a79f2931f6bb1bd15cf8f7efd886d0","impliedFormat":1},{"version":"5f318c52eac7a06cd901b55e8e930d2c3dd51b7dbdca01b130e61c3e9b8b4f0a","impliedFormat":1},{"version":"f5b284ceadf71472a8fbf555dbd91079cce0ce7ba54f65dd63d18deec84cd11d","impliedFormat":1},{"version":"11f848107bc2f7535adccd37b55f018a0f18abbf5a1cd276f5776779618c37ed","impliedFormat":1},{"version":"8f47ed340254a8ccdf37035d9cba70f53a4d899804da840b47f4c3b07a7b2063","impliedFormat":1},{"version":"e79e9c45db9751fa7819ee7ba2eadbe8bface0b0f5d4a93c75f65bbb92e2f5c5","impliedFormat":1},{"version":"50b54f6dac82c34e8c12b35eac220ccc178f51e84813179826da0e3e96283af9","impliedFormat":1},{"version":"8acbcc0484e6495472d86da47abe9765541a2ecbaf88f4fecdab40670aeed333","impliedFormat":1},{"version":"6fd6fcadeab3b973ea52c2dbfcc960f23e086ea3bc07aaa0e1c6d0d690f8e776","impliedFormat":1},{"version":"7eed214004cc8d86022792c07075758fe61847c70c6c360235f3960492fd6155","impliedFormat":1},{"version":"a59fdd5525468b9afe1fef2238f5b990c640723bd430c589b4c963d576209be8","impliedFormat":1},{"version":"23c0f554c1fab508370678aca41cf9b1d6a6a00069e499d803d43387067fea9d","impliedFormat":1},{"version":"016f140691ab5fea3357a89c6a254ff8ada91173d22d36921bb8295fe5d828ab","impliedFormat":1},{"version":"ee219b4332439451cbf9ee34584e8a7e67be35d8ed3d1b292769a09483a102ce","impliedFormat":1},{"version":"305c2373ff739ceca5780a204766c76617e74b551f6fc646a358b5f687a77333","impliedFormat":1},{"version":"61c5821b70e113b15f24593e7061e6302635448ae700d813f06560ca5f140727","impliedFormat":1},{"version":"1e127052ae269b7f278b828978b962eb93bbc6134c0bda8b03e3f39df5c3865d","impliedFormat":1},{"version":"716cb84b8b410c52de9e7b310b2125cbc390a7c59e929a5c0a29514345b9ba9f","impliedFormat":1},{"version":"edabf50cfd2310b9af7214ecb821e0af6c43f66d8b5fb297d532f27bba242088","impliedFormat":1},{"version":"1687d528ca6c51a635f9a4022973f472221700464be83810788238a595cb588c","impliedFormat":1},{"version":"32162214c3f25748f784283a3f6059ad3d09d845faccc52b5c2cf521eace6bd6","impliedFormat":1},{"version":"4a13f78f265e7deb260bd0cc9063b9927a39f99f7cc8bb62b0310aa3a1df3efd","impliedFormat":1},{"version":"c04c509a58cc86b654326592aca64d7ceab81a208735c391dd171ca438114ea9","impliedFormat":1},{"version":"74c6a2352b00e41d352cc23e98e8d6313d5631738a5ea734f1c7bff0192b0f47","impliedFormat":1},{"version":"fc94bcfb823846ba8b4c1727520a3d509c9f517d4e803dfb45e6a71b41000eb8","impliedFormat":1},{"version":"0f6f23cdfb415a7c1c1d825a29d7750a4d65908e519ceff44feca8eb7f9a8ca4","impliedFormat":1},{"version":"e4c09f8a818679f80931fae1d0ca3dec192708c510c9f33fe56d71abe8337c59","impliedFormat":1},{"version":"b1cc0dfdc0455283ccf003185dbbc51e2c15299aff343413310eaf45c4572323","impliedFormat":1},{"version":"6efbec437d1022c2fd82055687710f25019fe703528a7033a3fc6fbfc08b1361","impliedFormat":1},{"version":"2a343c23d4be0af3d5b136ad2009a40d6704c901b6b385cc4df355cf6c0acfaa","impliedFormat":1},{"version":"af4beeac0e879b673f8b874e5fe013bdebfb17f0213142e5037ac90aea86d636","impliedFormat":1},{"version":"c620ccd98c18e71d7e39a79bea47b4f4724c3a1f30f78d2cdd03cf707ae64e4d","impliedFormat":1},{"version":"150f375c7f5c01a15d531c961468f1a04a1c21dc4e4a372ca4661700d66cc9c2","impliedFormat":1},{"version":"8aabc7d8676ba6098fc30c95eca03a331df41ac4c08213207a9329998f32d1b0","impliedFormat":1},{"version":"9d8464e1c6b7f30c4121d28b11c112da81c496c65e65948fbc7d5b5f23b50cdc","impliedFormat":1},{"version":"6b88a632af960a4140730527eb670c3d3e6eae0da573f0df2849909d9bb3e5f3","impliedFormat":1},{"version":"ab2f4f2d874d18918f0abb55e5a89a36ab875e01e3e9efa6e19efbd65295800b","impliedFormat":1},{"version":"2212906ab48ae8891080a68a19ba3ab53a4927d360feb34120051aff4ae980ae","impliedFormat":1},{"version":"309ea20e86462f6f0a60ea7b1a35e70443054cd3e067a3b1a7ec9e357b12c4b4","impliedFormat":1},{"version":"61be4fb5600f49c7f2f5ade98f4d348d72493702dd6ba030275c23b970af3290","impliedFormat":1},{"version":"7461653b170e68cbe4be7bffaf2614ec832f31c99e2e49e4001f02c608ea59cb","impliedFormat":1},{"version":"bfb3200df4675c3b0c4a9346c42df10bd0cc28191e5c4bab51cc3b720b7a9e33","impliedFormat":1},{"version":"415d86471331c03ea56dd1f1bc3316090eef24a1b65a129a14579a97dff19539","impliedFormat":1},{"version":"743f84b507c5f9277e37f5e99b4587f03b9ef871625f7b1c10713ddc57733fca","impliedFormat":1},{"version":"75b894c18d2ee4c8b61e1c7dcfd475e51422ff0b8ce166874e7ab3447092ed25","impliedFormat":1},{"version":"22a1be63fb29b28628376bf90a0cb1706a9e10eda46cacfddbf544913c5d0b4d","impliedFormat":1},{"version":"8223f879f70edb086a7f0ef541eb87fa987c006b28f51aaa4a12b51bb82229f9","impliedFormat":1},{"version":"01ef7c7fc81a6064f52f4830b7c29ca0fcc00b1024dd5d12abc01d93e4266914","impliedFormat":1},{"version":"57610357bc1c035d31aac6cceb4d52655b4326c138a7bcf34d2aa71b33ed6157","impliedFormat":1},{"version":"122c203d7674cd08bf6962dafd4286b3319d8267cf6f513d3b42758f20056fa8","impliedFormat":1},{"version":"da242ab9bfe5833acf730ade2f6966aa207ef4d372de8bc6498b723fef422846","impliedFormat":1},{"version":"ac737900a71c3e090585b62b58864a490066dd4d5b3920fea19aeb5895df0407","impliedFormat":1},{"version":"7a888b10a2b8b0f2980f4c8d6f95d8a3dab3cf936b0bbfaf90b8950c619f0152","impliedFormat":1},{"version":"6fd8108448d9a07abbc520d1041e4ef6e696aa8ba00743267bcad319f0502fc6","impliedFormat":1},{"version":"f6bfdca1b0aee97e70167a35b3aba08cac13280ce8d61d5fd629bce8f44261b0","impliedFormat":1},{"version":"a039d5d54c4d608941aaab6a5d8a24786f03ebe1f810feb6026e184f35b41cf8","impliedFormat":1},{"version":"01ea567dd2334d0707a4cebaa7b1dd035473cfe87c77b0e10aed7e35692d51b2","impliedFormat":1},{"version":"5ea29d748e694add73212d6076aac98b15b87fd2fe413df3bf64c93e065b1524","impliedFormat":1},{"version":"94db805ae4e2a5f805e09458ba2c89c572056f920116ee65beba8c15090b8193","impliedFormat":1},{"version":"df4b5e6fe2a91140a1ed2f8f94e01d4c836a069cee23a2d0a83a00cf649f8505","impliedFormat":1},{"version":"5acef0f6a0afa32b582a7ad0a13688466bece4544ef3c8506131bd7342f528fe","impliedFormat":1},{"version":"4dc9b86feaac2ee1eafa02bd550f5851de7ac604fbf661278b14e40443d9d0e4","impliedFormat":1},{"version":"43879c8f3e8a599baeb696ec2319cafb6458ce1b0045cb2d98699f38ccdaa630","impliedFormat":1},{"version":"d85dda762b52fd95ac7456ab33be540ef9e24339370ab3981b8a4c68232259b4","impliedFormat":1},{"version":"fb0d83c2e2dc390a2a0f5c55834a301fe1cbc1021062d75a27059893f307bcc5","impliedFormat":1},{"version":"17aadaec93ee74b8c244050bd3a8c671c2968307fbef3f375483a185a2462681","impliedFormat":1},{"version":"401fa7edce893a618c09a1bbf3828e688057e4e46ffe020113ce9552cb6bc2d0","impliedFormat":1},{"version":"2e2cf6354f64725b2826804843bdffa041ca7600fef3d29b06b9fa04b96bf99f","impliedFormat":1},{"version":"9aedd5430b48e1ef15ca37a53699394be1aedfb75916eaa7d26f78ab8ef2dbed","impliedFormat":1},{"version":"482603b60ae36425005dda60408d32b75c49ef4b2dd037f64c9ccad0ee320a9d","impliedFormat":1},{"version":"d72f9fcc99d533dcc39bbf01d48f11eb58f5356ff20734c55fe7ae2db0d71720","impliedFormat":1},{"version":"c18304517d056cdf57c142f6bd662ff92672e641693b3cf89208a89ebf7a0141","impliedFormat":1},{"version":"37cb02c345b5315b2e47f41cb6c5946b2a4dbcb033cde3988b793730e343925f","impliedFormat":1},{"version":"950472b97087047840647e295474f799c98a3ac092977e01e7c5f669b88a88d5","impliedFormat":1},{"version":"5defecd97ccc564057ed56028d4ff752ce20fe2c55d89a21331e92494d807f04","impliedFormat":1},{"version":"3f61c190904ca6eae98904614cff4a77a7581bffde53b06846018b0377afbfa8","impliedFormat":1},{"version":"b6ce1e776bff7d6914ba88fc0c079d041cd7a011c8f72e7a53e6aa89c6fb88bc","impliedFormat":1},{"version":"37f5e7d5ba458ea6343ce2884b1278ec5a23c972f021db17c5f47d91b26a1f7a","impliedFormat":1},{"version":"f427ac544498d9c749073ed6bdd314cbbd87240ca9e739db1c7fa2cc1f639ea5","impliedFormat":1},{"version":"487b5195e791eaae94ab27b6a591e114f8b6067450b8a1493373290430a30018","impliedFormat":1},{"version":"02ff761f690163463a4e7594d666e4c73995c4f72746a5967b3477d9ecf62c4e","impliedFormat":1},{"version":"84dc97f65f9455619d0721a7e8c9bcafe25d25e4e40d175c09b4a5fa6b012c11","impliedFormat":1},{"version":"005f10cafe0939ae8d6a98e19c4ddf8b59faf3f9ae38dfa5907b82b9a6cb4de9","impliedFormat":1},{"version":"089c056ad8ecb34ee72cb831491ab72c214d8fb7ecf94b96a1b4736ab54397a1","impliedFormat":1},{"version":"e643ef3093cba63af26396ae8dc58dc542c241027749dcdf715f3d3209f79a03","impliedFormat":1},{"version":"f40e6338b8137033a5b4efbe01de45a4399f2c304648eace01d852cd05eb861e","impliedFormat":1},{"version":"89d879fae02696e226dbcb7444d6153158fa264bb646071988f19a2e422b314f","impliedFormat":1},{"version":"57de3f0b1730cf8439c8aa4686f78f38b170a9b55e7a8393ae6f8a524bb3ba5a","impliedFormat":1},{"version":"e933bd300ea4f6c724d222bf2d93a0ae2b1e748baa1db09cb71d67d563794b2d","impliedFormat":1},{"version":"c43d0df83d8bb68ab9e2795cf1ec896ff1b5fab2023c977f3777819bc6b5c880","impliedFormat":1},{"version":"bf810d50332562d1b223a7ce607e5f8dc42714d8a3fa7bf39afe33830e107bf7","impliedFormat":1},{"version":"f025aff69699033567ebb4925578dedb18f63b4aa185f85005451cfd5fc53343","impliedFormat":1},{"version":"3d36c36df6ce6c4c3651a5f804ab07fe1c9bb8ce7d40ef4134038c364b429cb3","impliedFormat":1},{"version":"e9243dd3c92d2c56a2edf96cbce8faf357caf9397b95acaa65e960ad36cb7235","impliedFormat":1},{"version":"a24a9c59b7baecbb85c0ace2c07c9c5b7c2330bb5a2ae5d766f6bbf68f75e727","impliedFormat":1},{"version":"3c264d6a0f6be4f8684cb9e025f32c9b131cca7199c658eea28f0dae1f439124","impliedFormat":1},{"version":"d3cd789b0eebd5cebde1404383fd32c610bec782c74a415aa05ab3593abc35c8","impliedFormat":1},{"version":"8c1babb42f52952a6593b678f4cfb4afea5dc91e5cfaf3ca922cdd2d23b1277a","impliedFormat":1},{"version":"04ebb965333800caba800cabd1e18b02e0e69ab6a6f8948f2d53211df00a193c","impliedFormat":1},{"version":"f8e2be107b3e756e0a1c4f5e195e69dce69d38d0ff5c0b0509933e970c6d915b","impliedFormat":1},{"version":"309e580094520f9675a85c406ab5d1de4735f74a38f36690d569dbc5341f36a8","impliedFormat":1},{"version":"c2fa79fd37e4b0e4040de9d8db1b79accb1f8f63b3458cd0e5dac9d4f9e6f3f1","impliedFormat":1},{"version":"4f0d1a7e2a5a8b85d69f60a7be2a6223827f5fec473ba2142279841a54e8a845","impliedFormat":1},{"version":"ae2fb62b3647083fe8299e95dbfab2063c8301e9a626f42be0f360a57e434797","impliedFormat":1},{"version":"f53d803d9c9c8acdbb82ef5c6b8f224d42be50e9ab8bc09c8a9a942717214f9a","impliedFormat":1},{"version":"d2d70166533a2233aa35977eecea4b08c2f0f2e6e7b56c12a1c613c5ebf2c384","impliedFormat":1},{"version":"1097820fae2d12eb60006de0b5d057105e60d165cf8a6e6125f9876e6335cde7","impliedFormat":1},{"version":"8f62905f50830a638fd1a5ff68d9c8f2c1347ff046908eeb9119d257e8e8ae4a","impliedFormat":1},{"version":"8b4d34279952175f972f1aa62e136248311889148eb40a3e4782b244cece09f3","impliedFormat":1},{"version":"d3c3cc0840704fe524dbe8a812290bfd303e43d3bd43dcaac83ee682d2e15be0","impliedFormat":1},{"version":"71725ba9235f9d2aa02839162b1df2df59fd9dd91c110a54ea02112243d7a4d9","impliedFormat":1},{"version":"80af0c272dcb64518f7768428cdf91d21966a7f24ed0dfc69fad964d4c2ed8c1","impliedFormat":1},{"version":"1dc9702aa16e3ada78c84aa96868a7e5502001c402918b6d85ed25acbe80fd51","impliedFormat":1},{"version":"35f891c1bc36c97469df06316c65a718956515c8b3bdbeb146b468c02493ef13","impliedFormat":1},{"version":"2e9b05d7db853315f44d824e13840e6fdf17d615d13170b5f5cf830442018dcd","impliedFormat":1},{"version":"75efaf7dee18ee6d8f78255e370175a788984656170872fd7c6dfba9ed78e456","impliedFormat":1},{"version":"45801e746ccc061d516dd9b3ada8577176382cbf1fa010921211a697cc362355","impliedFormat":1},{"version":"529f07b003aa6d6916e84a5c503c6dc244280bed1d0e528d49c34fe54960c8dc","impliedFormat":1},{"version":"a4d6781f2d709fe9f1378181deb3f457036c7ebc7968a233f7bc16f343b98ced","impliedFormat":1},{"version":"94d6b9e12ee034b99c3bfff70b5f92df1fbcb1d8ebcb46fd940047fe1bd68db9","impliedFormat":1},{"version":"d0d843664c2251b877ab4d7e67fea4054bad5a33b1f8cce634f0acb4397e4ddb","impliedFormat":1},{"version":"6ae375916cb1ab039b0d8191a1b2a4c5ee7d54ca55523edf9c648751d9bf4f3f","impliedFormat":1},{"version":"cfa00459332e385bd6d999dc1d87adeec5ed7d383bde9f7ebf61159d370e5938","impliedFormat":1},{"version":"5b016a20523753fb55e44223ad7e4f2728a3d6b83771e8f2b52a3212d612f494","impliedFormat":1},{"version":"996e31673fe2d4cbd4708d14dc547f79b694e40d58622c982eb26e15eabd78eb","impliedFormat":1},{"version":"27f91d5df194be07adba9331db4861ebce0250d2401c56d4a56979fa2d8d9685","impliedFormat":1},{"version":"f9a8a74a3277dba5994b7830faa0a72ccbbdde4edc546579ea5f3bfdd833f1c3","impliedFormat":1},{"version":"6396e07ac9d5653e2ea225c491e7d5b548165eddb49e4293dcad42445fdd2b5b","impliedFormat":1},{"version":"4356f53b3bcd48f4253465746ccdb0baa38c6bf929712349bffea5426e59c2f4","impliedFormat":1},{"version":"c07dcc52ff4bf2fe6b9027067089b2696ea8debfab01c5a89567b57c85a8143a","impliedFormat":1},{"version":"0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","impliedFormat":1},{"version":"01c7b17b4106823329939ac4971770aa720b35749401312a9c6610ba61a689f3","impliedFormat":1},{"version":"53902be908625a56e222e1e005948b242822863c62bbd8fcd1ea047da47ac29e","impliedFormat":1},{"version":"6ff08a01c33e70289d44268bb3954c9f3c71162085b829dc323279fbf3a70b2a","impliedFormat":1},{"version":"35a7696566e4ceabf7bb6e9edf0256c8e8411783565c26511033e2edda9e3911","impliedFormat":1},{"version":"88ab5c0465b89250245fb97b17192adbd7d3ee26b26e29f948a410c4dc554663","impliedFormat":1},{"version":"2368808dcbd42d82a70cccb12a06d6e20022f65e1feaf0251789ee24a85e0e67","impliedFormat":1},{"version":"25f989f57da0150fc531eb60696097517c300e41c48f9a35cf8c39a2884e9e9e","impliedFormat":1},{"version":"801ffcacdae7f0a2486c3ca2cf59022b289519e660a4001acc81cde94080c262","impliedFormat":1},{"version":"eec90c87a90d6f26e36ba3d1048957132682558ef88d0128241b83cee373ede9","impliedFormat":1},{"version":"706623c288a5e8a35eab6317786cc2b8e0e1753f5c3f0d57fe494c1ae269e8a3","impliedFormat":1},{"version":"932cade1c5802123b5831f332ad8a6297f0f7d14d0ee04f5a774408f393e2200","impliedFormat":1},{"version":"95874c2af12afd52e7042a326aef0303f3a6f66733c7f18a88a9c6f3fa78d2ee","impliedFormat":1},{"version":"2859adaa4f2db3d4f0fc37ad86f056045341496b58fba0dbc16a222f9d5d55b1","impliedFormat":1},{"version":"655ed305e8f4cb95d3f578040301a4e4d6ace112b1bd8824cd32bda66c3677d1","impliedFormat":1},{"version":"8511f1d1ea7b35c09639f540810b9e8f29d3c23edbf0c6f2a3f24df9911339a0","impliedFormat":1},{"version":"2ce02eb3ddb9b248ff59ca08c88e0add1942d32d10e38354600d4d3d0e3823f5","impliedFormat":1},{"version":"a8db2bf4766dc9ca09b626483c0c78b8f082f9e664b1aed5775277ca91966a32","impliedFormat":1},{"version":"21489ccc5387a3b7ec72288f35825eef99d1550cb5cf4448655f60788c2dd2bf","impliedFormat":1},{"version":"b97c43cc5c758375c762546242bd2e5dfecea495d11e7ab8670cdf7800a78a55","impliedFormat":1},{"version":"76e8204d6c3f2411c8b0f3e0db34e190880acbc525be4facf882abac3c6e9868","impliedFormat":1},{"version":"ae11c2830121324c7f7b3c2c72f6c96eaeee9bd36217893531f965be93940b01","impliedFormat":1},{"version":"3a8d1eb7be079997217f3343f26d11af23d1e330ae8edaa15d0ee6b3663405bd","impliedFormat":1},{"version":"75191cd4f498eecaa71d357b68f198aabff6e9aeb094783bc2e88224f2440e91","impliedFormat":1},{"version":"68ab7ba45dd13e321f9b4ffa2cc9092c66c8a32eac53f8268ef992c9d83bddae","impliedFormat":1},{"version":"df2f57459fcc94dcfbc999311ce1927d35accdbee5bc79751467f16121ee99b7","impliedFormat":1},{"version":"a0c1105a4dd57d412dceaa7cc2211e9ee7a9102849d69ea6610e690eba6eb24c","impliedFormat":1},{"version":"069953e197846ae2c271627a01f114623b58eac2fd40bc0b49058c7a2cb79d22","impliedFormat":1},{"version":"506b6ed00eaf46798979021e707f4e0a9b5efa39600a0d6fa8d4ba7a96d3331a","impliedFormat":1},{"version":"48d5a3642727e962342b760621baa9b30c05b0c1a327ad1832a53b2f580c62c9","impliedFormat":1},{"version":"655a1702bca6a1c60b932118cf142bcf3d4f246628cbb8a7a1160205f45016e7","impliedFormat":1},{"version":"6dcf9ebaf569318a67670d24958ac49fbb820114ec939c6a019405dd61468f33","impliedFormat":1},{"version":"cec2aaab4a551be0935d6166cb7f098ccfe2172c10e611c9321b3b676a53c496","impliedFormat":1},{"version":"3f08c2595b48fa8b71831fdff3af41bfce96eb48cec81ea6d2d9d9d957cd97fe","impliedFormat":1},{"version":"61dcb5357451ea04ddd06391bbc87ecd9f6b8397d2a386ea40df3b6806141c99","impliedFormat":1},{"version":"f17f889f40110c2dd21e7b8a067af42432a1c34fb16a9e0c8b2c4a3a735a54ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ed7dd53cda73f4ab5f4659981d82e87e63ec4323817e83daf1f263e567a2122","impliedFormat":1},{"version":"eb192dc8f995753b598084dc6393b4b92c9bc625315292a77e988fa92775ac29","impliedFormat":1},{"version":"bfbf4ee614fba4f9d38bf7a7d03a2557a887830787670cebaebfcb656351af18","impliedFormat":1},{"version":"29a8ec1444766f4308d761b988af77a4213af4ad2b5feb80660a8e399b1f34d4","impliedFormat":1},{"version":"8708b827d3d701cdba0df0aff33d386427c8fc2bcb424592ca888eb97593dd59","impliedFormat":1},{"version":"f498700176137091d70ad301386949fb2a45ab279ddadf1550827cc3e0beb647","impliedFormat":1},{"version":"865fe4d7e5122f98cda832d3c307b25b6d892d4114b6d46935b6d8f4093d1a87","impliedFormat":1},{"version":"de81dbb78eb923238b447c33fad012b547939cb1061926aa6ce4b65f785b0f82","impliedFormat":1},{"version":"b6eee8f3f0a26e048701c23986ba2eac78957360fe13141a95c2cf1e8ac05aa8","impliedFormat":1},{"version":"0e22f537eccb5a914ea1bcfd7d66c204b9d1cb1db6d2ac2ef98f29a1c0368cf4","impliedFormat":1},{"version":"bd4d567df759a36b6108b8b9c6e8d60bff197fadf8bb3d0010c6c912b2068f26","impliedFormat":1},{"version":"64d5382d6c93fefe02a62fc5c41f4fbda8097f06b7cada8373cfdfba13d860ed","impliedFormat":1},{"version":"4626aa1293c7335ad2f395bd8958fb356d7d84c5cce4a6ddf9440654560d362d","impliedFormat":1},{"version":"1aa76f0ccc9d4d62a3fee0d0d3e4ff18db7624134a12d769323cef99f85c6c03","impliedFormat":1},{"version":"a313542e702cf47b993d9f12890f934003b10027f4f2d0b42393aa8710db11bc","impliedFormat":1},{"version":"acbf84a03c65aed0493acf7f432b269edc6a8c30ec1c7d538430dba1e7c76d7c","signature":"922cae1cf82bab1e4edcd921027b120f5dd43e33fc696bb2208a07c028ae4099"},{"version":"cdbd35458f506b843f280d695d192968af4b0f27db3d5c0707934d97e96dd88d","impliedFormat":1},{"version":"0d86e751cdf42541f9b0dc579f1fad78ba02c9b57104723187d942c53bd63092","impliedFormat":1},{"version":"dae32a2a0cc5be690082fc59bd4b16ab58fc400d8802dc3073657ff4e825c48a","impliedFormat":1},{"version":"654bbcc8726e2a7a684460eda9c7d25847716587b04a72e0b88e75d828aa3db1","impliedFormat":1},{"version":"5c252941b1299551ad4f3f44ef995ee7a79585aebe2c5318271297496f2611c6","impliedFormat":1},{"version":"ca862092adc2e7df5d8244e202db4a5479bee59299ed6620773040d5e843e780","impliedFormat":1},{"version":"84ab1b8202996d370d7580cd15c85fe5981c9fd8ce4e20019de7203c8e9b594e","impliedFormat":1},{"version":"b7b58b11be801068222c596659957f4defdeec281974feb02a28d9c9ea38cd51","impliedFormat":1},{"version":"27a8d35a2910e71c796d71fb6d570a36dfcaef8cc69bd02e0b14fd143b908e04","impliedFormat":1},{"version":"d488bd13a9d714f30014a5f8a8df1be6b11ae3411efa63ba6643af44749bc153","impliedFormat":1},{"version":"973d9c7b2064204601c4361d2ea007cfd7e0f767cb7138979f79a38cf4125964","impliedFormat":1},{"version":"7656a4096d1d60bdd81b8b1909afdf0aedb36a1d97b05edf71887d023dd59ea9","impliedFormat":1},{"version":"197dd169eff598c8888dd37a3f5c3e45c1759251085119b166c1b37b50ee43b1","impliedFormat":1},{"version":"898f97b7fab287b8dd26c0f8d91fafe17bec2578645a9741ce8242f3c70ae517","impliedFormat":1},{"version":"015ec12a5a1699c7466521ec59f4edb10853579c8aeaf6755e7aae442ed7cf10","signature":"4802d956f33520228bb89c3ad5780a4952555437eb696301b8124c8d45e36bea"},{"version":"6eed88ce45c41746dee34d61027633a63a9ead098bf4fe8005667e1cf655cb02","impliedFormat":99},{"version":"d204bd5d20ca52a553f7ba993dc2a422e9d1fce0b8178ce2bfe55fbd027c11ae","affectsGlobalScope":true,"impliedFormat":1},"d75e2ae4872ca4c960704b14600ba1891c89436119250c5b5273c31bb59d5e24",{"version":"5166d8ba3d2ca6609b3a59130e455a8028626429517b75bf6a1de3ff686eb38e","signature":"bbda3962d4ccb6266d126e3635dc69c7d56325eab4d1f328ec93d50559b1d6c7"},"cba95bccfa8d9f9447a86db966bde6f3acdc92687ef4128f81ddeb2ee73a6ce0","230d68fbb4036fe6da1aa15c82b22dd18fc0c3b04d6bf5fccff4a27b6e68bd2c",{"version":"5f949ab72b423fb15fa2ae232b37abcc357040efc2014da123502e36daac233c","signature":"63ed84124a5befbce76cfe337b44c2be8c00c58ede9ef14e9cc36a196da400fd"},"01cc2b4370f4497af1d3fc6b2f9c1435abdd4229af948fd68a66ad71894e0fb4","245754bfdd40b1be0444b15a2f3a7ff1a24250b71c9bd39e42634f1eb106ee84","27a4191f15cdad54f2ba2f34a67f396e9a911134d9d28e0a5c563fa658ae1355",{"version":"e49373431e662a1f0257ba960855a3ff05c022c2ff629716a6e141be7f508ab1","signature":"edca273b1ed146477b29a8e8db11cb80493f45c055aa2525e7fc4b73c43ac0a1"},{"version":"952ba4bb39dc0a5cb06ccb78f215ae1fdc7e0d45607fd058c0ca6e52764ddae2","signature":"b4b4fe7a49751956909d4a07394acbdc3ee7151d2e27d1435d61a56fa3e24367"},"3ec7c16ed732757d7156c47472d358e9d1136c0960522cac38be5d50db25650d","d3130c12467c4cb62a9d65087c6c99f841376bc7d84496595a4de2d715f2406f","71d1f6a578cd81c3e6d3ee59fc533f2b3d8de437c7e4ef5503b9d9c971fa4b3f",{"version":"b3338366fe1f2c5f978e2ec200f57d35c5bd2c4c90c2191f1e638cfa5621c1f6","impliedFormat":1},{"version":"54a0b73e6c275d847434735b8687241ba422e4b57c8652cd80d6e400b62201bc","impliedFormat":1},{"version":"5aea6989a6113dcf21b03d07887a48903817af92e17eaa64ef0d6d6a91676a50","impliedFormat":1},{"version":"68569e76ed68e0c23b0762d0b1ce53a6330c6dd8e38b77d147c792190bc2479b","impliedFormat":1},{"version":"6251ca7971e0b8280a12b5c2e00a656e95aaf7b9aaa57e7ba1979efd112f53be","impliedFormat":1},{"version":"e78ac008dd7a0374e82de042dce6cc2ff7733db8655c9fc5a8287514fc04878c","impliedFormat":1},{"version":"bcbe023fd45923eea2e81e32e43a1367eb0a79c2bb7497448492c6cba928a29f","impliedFormat":1},{"version":"7cc37e93e9ce58794514df94460dfc275fa591faeb4571583ae0acd601bd8463","impliedFormat":1},{"version":"ea0d9ee322ca943f74e8c886ab58d14159352c9330cf7ef5a147094a5836d20c","impliedFormat":1},{"version":"8910493b6c5078c62b361eec2e8c983e1ccceaff933a28d8b28fdbef436d97a9","impliedFormat":1},{"version":"b6d5179e325048773b85d96d927b6321e90b987cff398315466d07860c50cbd3","impliedFormat":1},{"version":"c707d93ed78a6a1694468e818d344abb434c691cb18b9d76fc2f2750dd15b923","impliedFormat":1},{"version":"353a8744414a4dcfdfdb0b1f512c3cc06790d0ac3125852877743b1724d11606","impliedFormat":1},{"version":"31802c2eb97326822af25e4c430071b6435f2a002e0cfe88ae2820ef5a847bbe","impliedFormat":1},{"version":"d11936bad7d71629c37f8c575c7af2248fa8a39ca9b949d2e28775db008a758e","impliedFormat":1},{"version":"6ab42ecfc62e09057dc3ff1d994181c9907225ed62aae29717bb38ff67d16d26","impliedFormat":1},{"version":"8680ac3e6be5612959708240da98b1bf4d3231c6a0da637c1565d573f506a4e1","impliedFormat":1},{"version":"4703a1d254578b195504d60eabb890c65d453b4dbeb6416cbdf348566be8726a","impliedFormat":1},{"version":"e9a1a210e312f46ad1e949e78241e53c3fd0b4ea4918b2a083020b182fa839a2","impliedFormat":1},{"version":"6ff87b21780aa23a33ec1bcbd6cf21d0a0d5b7b0aa0711eab004cc6eed586f0e","impliedFormat":1},{"version":"3490521fd5ff45bcec0397302571f45526601add74c760d434455e8eb9e279fa","impliedFormat":1},{"version":"102a932b504edb89da93dcc517187676c430c5d8781ac8c881cee62de929bfd8","impliedFormat":1},{"version":"b04f151ad5cd2f5b1124e297b87d1c7251dcb54c266ac8ee7a340ae0676e8418","impliedFormat":1},{"version":"322747a537c20892f21406e6220423dbe9dbf8e6f5fbef1df8423f15cdd8a826","impliedFormat":1},{"version":"7549778745425e964089e66e3fb4ac65a26a68c6e0138b43fc1e07267431b950","impliedFormat":1},{"version":"c2a4e0dc003e5bd572e3d60e681aa5455d44359af42007f9e8926d2da44cf7fe","impliedFormat":1},{"version":"daa57fe9ec8cb23b4f1698f9fb56dfb7816cf076fb0249fd8d07eaff3703b9c5","impliedFormat":1},{"version":"7bd99b34bd52fe235e284bdb40c853f758292f5d3a5b4c134d79c725f64675b9","impliedFormat":1},{"version":"2df0115b6d0319a9e0bda292e2b85bb675c8ddeed261b389ee35421ff91096aa","impliedFormat":1},{"version":"e097e01cbdb08d4acc69798235dc84c7769a32de69c09e59eec21f66be5f9e26","impliedFormat":1},{"version":"0756fae9df961bfe5870f5d04237e27d435c19fcf88ad2fbad5f0338d1613e6a","impliedFormat":1},{"version":"336104ddcf2cad01762cbfb8e4de53f120e86d028e15b56cc93f0645832f5206","impliedFormat":1},{"version":"894b5615c6d9e132d566da4a0a415a75a03084b1e444dce57247e3b14c994ccd","impliedFormat":1},{"version":"fcc6b0b6d33f1b9bdb20eb8538192401b9a34d2e55caf2b1a8d2997ce72caa91","impliedFormat":1},{"version":"edcfa9db110686e3e9f415411711fd8ed5676743ba5fb94f2bae7239ede0694f","impliedFormat":1},{"version":"c7b77287a6adc2b4c12d53e0c1a4f73702a67b44c283668879038fc986058b1f","impliedFormat":1},{"version":"4dcd36a7642675eea43951eb9291198cc363c9bf6e42175bb89686a2638ebd49","impliedFormat":1},{"version":"3a66705652602eef0b11c0f3aef6fbe002f645d2c726f951096a34ba80478456","impliedFormat":1},{"version":"17a2c710e588e7bbcdae1449a6c832acc352ed820c414df36984e6cbf9eb1cbc","impliedFormat":1},{"version":"6e397a5904fb2981bd0a370e0c1fed5b2475818f7abee6d4434104d22a578cb2","impliedFormat":1},{"version":"f7d6480c35f9560bee629cf2eaead55b5d6a98a056e3bc23a0e1791fbff42f40","impliedFormat":1},{"version":"95b07975798242f689dc613e6cf21b8b4ce6486c535b261c327d4815507c0474","impliedFormat":1},{"version":"99b70684074369ac188fc5a73e4ae4af9c42ba88eaf728ae9f665004633a0798","impliedFormat":1},{"version":"ec909740306c82db9420eb6abbd77a43d67f1db0c8e91b0d5dbeb9c5878580eb","impliedFormat":1},{"version":"f0a1f563852fd9513c303a47629ee2e1b3e9c4f6c9a939fea46713943ee9f7b9","impliedFormat":1},{"version":"1c04325db3586bd3c2905aacce3745eec7f8275ea86afa7c3c8a03dcd433e08a","impliedFormat":1},{"version":"bb3645cae5ca08211875d19554e295622c13d66e4669826d9459e7850ac315db","impliedFormat":1},{"version":"888b155cdee3f1ba181985686ab6cedf27422496c7b564a5a8f09ca65a71a3c3","impliedFormat":1},{"version":"fe5ce905378e200cdf1a6c691ac7b836045ed83cd45ec044e161972502ab957a","impliedFormat":1},{"version":"86d78e603812b7334a3c386642703d6eb99cb2aa94977d30d21e65b0cb12a31f","impliedFormat":1},{"version":"09cceef2964fcb0fef501da50b9e13624afe20ecace3fe33421d3235fb6f5597","impliedFormat":1},{"version":"fb89e43879bc2d06d0682a18317f813a501a61b729287a80a616443ae3b39781","impliedFormat":1},{"version":"14fc2d16e4493add082ded98f446fa1628b0f5ae96f8b420f5b1aa10716480d2","impliedFormat":1},{"version":"06fc966f66b957cade31fca0eb1d4f0601f0320eecd12f2536c6f107c5a50b19","impliedFormat":1},{"version":"7ffc147b09d18e329732b04770fb3804d9da67bdc230e6405eff77d6be3d187a","impliedFormat":1},{"version":"0a06936bedcb98e955f6e8c87ce803f2d1c02c96d396df0471e89424617edf83","impliedFormat":1},{"version":"7aadb2b3b024ddbab70899a0833518732d2c43498beb05d2c9ce53eb824bbd1f","impliedFormat":1},{"version":"4d5ce3ffa0c8d79063566a4415174ec1e30f3d7427b410c72b331b342ccbc6d8","impliedFormat":1},{"version":"6290956b1b32ae3d6a568aa7fc21e05c0055d87862232b36c8150d35d009b26a","impliedFormat":1},{"version":"c87afbb9d272be56f9d80ab0b9538ffda377b15aa4092379af5f560f9b812659","impliedFormat":1},{"version":"05dfabee63531105720801494ce71c7b59122c75b32f2709b5a88c9309e7f800","impliedFormat":1},{"version":"daf1c4382f51e469762e014a772df4033c0ece9e660b609501b68d5415bf4e5b","impliedFormat":1},{"version":"045f688162db1778fdf4442bd3e289cb622df6d2a1c6ff57bd6b5f3eed77c5f9","impliedFormat":1},{"version":"1f87d3045dae16ec144c85436d727d4cbfbe98abd919bd2c0714e309e66842b0","impliedFormat":1},{"version":"66bfdf3466c979dab119a632b555d08ab02aa5f468305fe130d13ae87c95c6dc","impliedFormat":1},{"version":"0dcdb02a9e3178009c05cc33d2f4247040b03d8cb7651229882d118047616b79","impliedFormat":1},{"version":"c1723c24943e284216241176fd65c33b58746c02f179cb4459473846d2632045","impliedFormat":1},{"version":"22346b862249f9c5e9156fc1916ce2822fcf7f0c0b1d27103f8a5ab086942135","impliedFormat":1},{"version":"4bc742a196b72744df59680041a0a062ccdcf633c7d75476ab862766a2f9ed1f","impliedFormat":1},{"version":"84ed7d44c2cc7331c7c7cbfac28f0fa521cc473f41d5e1df288731d221a2aa80","impliedFormat":1},{"version":"ef75753f9b0ba1749592d351f1851c71a44309d5284ca2b76d6af6bae1cd7902","impliedFormat":1},{"version":"7d1085cef64fbc00ae1d198afd6bcb0118137a8012881511a468f3c2a5c12997","impliedFormat":1},{"version":"41265c56d31f19b4541f0d8c2c257e2679257c3f2fc72fc2f23435a39118521f","impliedFormat":1},{"version":"d617354a8ad8d3faff75b7c6ef3fb6d3724b34ef5e987e8dc576a411eb3f18bd","impliedFormat":1},{"version":"0538c8885947f8b8ee923a576bd5cecdd80d40c5d589234402457ecdf6241806","impliedFormat":1},{"version":"9541c9157e4803332334baa9748dcb6a2576a0e3a3c6f289c8e84a6a9598da8b","impliedFormat":1},{"version":"77beedbd6281266902c7a1bc97528bcbe8c05dc61c4a3f13fbd3877d5557746e","impliedFormat":1},{"version":"fe01a39ee6ea56bbc9b4fa3f70360941e90523cd40261c21542e413fdcb1df5c","impliedFormat":1},{"version":"252525f6fd0ae3d9a37a53b74c49ce7ba0e38883bd7bb4d47206fa8ca3a7f4db","impliedFormat":1},{"version":"80b3587073b9cd897c7bd41c08495bad69b4e1ad994a3ee714c2ae669ed7a915","impliedFormat":1},{"version":"21e1140b1176e983bd0e5ded7b1acac2949821accdeb6a8ac52806487619d596","impliedFormat":1},{"version":"2ac84a5ad9fc73db73f0ee3e8b3f9b6b5173e73e8af60602d18d2453a43ccfb8","impliedFormat":1},{"version":"242e1da97a1d8c089521517914d17c4eb6f11592a94b1166192655fdaa4c1fa8","impliedFormat":1},{"version":"2b4ea9561c54331a8e32e05a16cd64c22bcc6236dfd02f78d5bbfdff37cb4850","impliedFormat":1},{"version":"1215f121a82ca762ef0a774009b83e164cf592ba6996113c3d7ac76adf678f22","impliedFormat":1},{"version":"b1826275632a55d5798c30996d90a563865868fa4aa43f3dd1e6922e968a78df","impliedFormat":1},{"version":"7d7a773491d977285dd1612ba882bd2d08d138a372c839cbbc7593892887acd6","impliedFormat":1},{"version":"4ea7b44397103a8c96fb72040b9a88c4dea420e45d636ee04c965138090ff6b5","impliedFormat":1},{"version":"c71af1965468a4c84f0bf53744d77b23c2ffe703611f35f49b6be3371f88de38","impliedFormat":1},{"version":"eed3a7536e4e20e922b3087baece6f185bf65a2e8a36d9b00528287825fc3086","impliedFormat":1},{"version":"fc5966e74a0e57325992b42ec50164597525c48264ec9d271add049ebc59ee8c","impliedFormat":1},{"version":"a0dd3d6a432817622b5e66bba93f7deb45724dde8f641475570ef8f6a978c1df","impliedFormat":1},{"version":"c1759dffdd4761c462735716ef92b1c2cf22ab66c33abb79841bb56858bc78a3","impliedFormat":1},{"version":"374a73ef5c9739d309a619eaa3b8b96e476911b0baadf9ccd47713baf8edb03d","impliedFormat":1},{"version":"09fab0aec84bc39e29c9207466f6e84d28823a3e19c89fea010d99a0be54f39b","impliedFormat":1},{"version":"0021d073030e131bfdfec1291a19a7aa099f83c4ffc2e82514346c12338d9a69","impliedFormat":1},{"version":"70b37c50ed945d0096d19cae852be07058d25075be5316c32900a883a84ff574","impliedFormat":1},{"version":"582a10aaa3f6cdfbbbcd71053ae32e0d6047867038c55f8083a5e0a2bf03eb16","impliedFormat":1},{"version":"14319bb3e71325abf50f0cc8e9a8768727f962d3cad2711e90a9b45de80cd9b0","impliedFormat":1},{"version":"370c054cff5fef614b15aa2b31b844ad6ce84e945ffe0505c31f1fd6cfc5d875","impliedFormat":1},{"version":"0a56c48474cac164fce5036d53a74e58bbc3d1ed2e2044c3536ff6494d85d281","impliedFormat":1},{"version":"6637d940fdeeeacdcffb9fc89940fee083514060b24bb4f0b53174695bc3c4c7","impliedFormat":1},{"version":"79fb9d9f0e93cae2b196ce802437dd4626f0f43a829b59077523633257625d06","impliedFormat":1},{"version":"e516b83b36ba93dd223847f75ecab1501d4dcb79903ec151f3b0e2bd85ff1709","impliedFormat":1},{"version":"b9561d9f2a9ef796740347697568feb9934e990ea0f204ca4799097499085224","impliedFormat":1},{"version":"17e7a71d478d73f28f3d42f6a987a6a75d7d66f11414b315f86afe90269084ee","impliedFormat":1},{"version":"b0b5a80e6dd8318194e380632e7fdd375f31c415553096184144193ff49d9deb","impliedFormat":1},{"version":"bd72fab446ef9dbd4f67f431dbcfac008f737dcc9feb26f5028cef30ea07d7b3","impliedFormat":1},{"version":"b84c3d723b2f53131f5f29392e6f682950a5b6067d2eeafe509c3bc4d535491d","impliedFormat":1},{"version":"bb8800e3bd24b17b922f94afc0a0d53b86ffd3807071858cecc67d2ec218e730","impliedFormat":1},{"version":"c424633696169cc0f598bbd0f3efaba39279da0d5bca4077f3d2d06dc7b6d2c6","impliedFormat":1},{"version":"11438e4c05bbb61a67c5a6d3172561e73f3617775073ef166191d42e7d6cc29f","impliedFormat":1},{"version":"17cd1abd445f2c5a5d9af59edc2b32acff37fc2dbd073bf6be6c87b372878b10","impliedFormat":1},{"version":"6cc49e6397f744360e56a4eb80e29278db7fa407af70ce38b14d1b881de11084","impliedFormat":1},{"version":"31d31e7ff583830b48bdd4c5b831c527648b0c4e11d0dff958244726a6ba8d1d","impliedFormat":1},{"version":"bf23d3737619cc93d02d3f2573836e241f144c2deab6555100d51d07065bfea8","impliedFormat":1},{"version":"645ba914df5f7cf4dfe7224fe6fd9e3b03f1a56a4d0892609647b27a4b5c9b2f","impliedFormat":1},{"version":"ad4dac3f8f80776c77dcad99d916fcb6d97f7d5c8b5464d57c5b8fc2838c65aa","impliedFormat":1},{"version":"3be59119328e530eb1cce237f11f894d18df32c56b4acb4da99179e2e9d716da","impliedFormat":1},{"version":"ce25efda83800584fb88f6912e34bc6f19b1b1d5617c8f4d833525cca66e1b7d","impliedFormat":1},{"version":"7a871d46fb9f8e048843805af8641b3e690e3d082d2610458bc5b7f9d05a939e","impliedFormat":1},{"version":"58123d640dfb256a923f9608f9feb812fb15f07e97fa48cbff32db7a3dbb4dcd","impliedFormat":1},{"version":"d0f819702f253906cfabc70537458a0fbc7fcd19d00df1e65f489fb6255b921a","impliedFormat":1},{"version":"154880bf83ae0e6804e8a03fcfb90d43318f136c90489f5cc91ceda18a826c55","impliedFormat":1},{"version":"3afd5d12997658b4fe25eea8a156f28365815cec969f843ac959baeb9e32546b","impliedFormat":1},{"version":"189d978e3bbba92cd41aca6dd5da431f96abba3a661345bb3d0373aa95154f10","impliedFormat":1},{"version":"86c941e36edbbf7f6e9627f204e0243feca7c685b5e87128f51922a18b796b58","impliedFormat":1},{"version":"913afe932d38a7e2739cb82e86ee5fc962c26cbb5d0b12204edcaaa7977f67c7","impliedFormat":1},{"version":"6b6d39ff8b55001b579319af1ab88f7d4b8b7306c1a029730b080dba0f52c91a","impliedFormat":1},{"version":"3df44916781e1265a2f989ce1d27796a8de5502e8b88d974a0486ecdd18f1d52","impliedFormat":1},{"version":"0768c1dc93630ba95a46a13ee8794b3236a73ea4be0f686021ceff54d4169beb","impliedFormat":1},{"version":"f1360f6fc6ab02fa9bdbc8d291b81734114c4124b70e59c2049f1f751023854a","impliedFormat":1},{"version":"772491929987e2f534681895858585e875db3be1c4f478433e6041e7f4256ef8","impliedFormat":1},{"version":"54df5622611f4ef71e4a268878d93d91a2ee6715f6cb0831aafe33e215252765","impliedFormat":1},{"version":"eaa3881551f850db68d9641f16d3adc0643ce64692c0aa5eaefd24c6cf4ef975","impliedFormat":1},{"version":"9e92decaf25e66a93dcd079fde4469f494efb0319e7abef3876d0fb5de324027","impliedFormat":1},{"version":"ae61b732544436a400d158bd484fa37f3c22ca853b75c7609bc38898d8546325","impliedFormat":1},{"version":"94f5d81ed31e208d78efcb962f458a8d78be3a060c3ab8ff00d8dbb376d0e5e6","impliedFormat":1},{"version":"7774693385774989733dc820690a09c5caac6eb567e86e7e27919a28495d869e","impliedFormat":1},{"version":"cb3229ec76c1d5c8a74cf84e77fe11409e9a28299acd92e17868488f80780798","impliedFormat":1},{"version":"195102ba30ea3647c375a33a2a14d94f1d712ab497a8a069ce5a1013b62f200b","impliedFormat":1},{"version":"4af32d5f5cbc92a0f396f02772627a6f55ba3471799dbc90c581ffd618f065a6","impliedFormat":1},{"version":"960e4ea621ddc9838693f659f8780f006b68a7f894f1c07a24b1187b402ded53","impliedFormat":1},{"version":"fcc4f09ce7a1ae59033f74df30c704562437e7dcf85e28added2c1ace6a5d6c0","impliedFormat":1},{"version":"c12e018a40ccdf84e8134f8dfed61e8ab9e1864b7656f7f26b815c8697f3e6ca","impliedFormat":1},{"version":"9d24be7fcf6039c87e2164de44e205c4f2fed3fe157a337a953bd9458dea5881","impliedFormat":1},{"version":"53f32d9db8a969863d390d1b361751daf6b66eae0cce0e22957e04f976399c00","impliedFormat":1},{"version":"bf3b50982b7d09789434eea82dc30972ca5f4f19c37a6d137fc2fa01d686170f","impliedFormat":1},{"version":"1215f3fb5f57314fb864c2e07870d7ac8244dd7ca269914e8c787b873ea467bd","impliedFormat":1},{"version":"fd3f1520d017c5c06096dd6aad1adfeb99d5ff9f35d05b08bfe22f9970e1bb46","impliedFormat":1},{"version":"bcff0dab260bf1d9119f4c0d4c20e84870f3bd922ea11b792f85e4d6f94e9ec4","impliedFormat":1},{"version":"dc00d795a95db780373af8ddc6601948951bac54e46a10e61cea0baadea2c976","impliedFormat":1},{"version":"394cd595b5e8ebb3934d3ce19cac913631a719f9b42d10f7b38bb29e83f627c4","impliedFormat":1},{"version":"6fbe02cdec68b0edd788e57a0297e824d1fc56d55af89083e509df0fcfde10ef","impliedFormat":1},{"version":"cdfaabcc2f9489767a9f575129efd68e0c85e5ca7b6769ba2bfd81dcfbad151e","impliedFormat":1},{"version":"00eee3ed881b83a8c1ae7b4fcb624a74dd71de9f494758a1c957037b07eaced6","impliedFormat":1},{"version":"c7270a2952a8313a31adfcdec3c980d53ee1c59340166894de6dde8275464dc3","impliedFormat":1},{"version":"61208ef33c5096ce07588636d7568705b0778676433ea361d1ff01bfdc0afec4","impliedFormat":1},{"version":"fda8137f3225f7fa12d27b764016824ab093cdac5e37959238bcfc59ba33f46a","impliedFormat":1},{"version":"1b07d8954c7e48f9b238b47470b4f0943913d79a2667d5d72c8e2a9f5bc3f329","impliedFormat":1},{"version":"4e9ae7c50fb44846c6161f2a77a90a447cebddcd634b541a602cfd34eaa30aed","impliedFormat":1},{"version":"68ea5da50372e0311228fab6731c054093088692a11151c7e85d17dd23f1ffc9","impliedFormat":1},{"version":"1b96a676e58c88860b7f8302f2932271a201e067cdae989d0219407e8886dec5","impliedFormat":1},{"version":"cd321ac7b3a76e8c514bce40ad492ca6a3b9a2f94723d79d044de8186724c2d8","impliedFormat":1},{"version":"47d3b1138d1b6dfe1dff8b6c30a12055ef5680a3d2a520cb451c15995096938f","impliedFormat":1},{"version":"17afa353b70a9db8b8f14b0272bc1cafaa2263bdfcdf0ce42894637b7f4d90de","impliedFormat":1},{"version":"0172ed6cc48e81fb983991d504daa70a2909195fde89a79bf1ae036a6c6034dd","impliedFormat":1},{"version":"b7acae0de44722d03c82269a1fe5f76ab4d37bcd3110169d91d3fe4dfcf87fad","impliedFormat":1},{"version":"ce118560164aa66b6832fb55262cafdb4ff2508044fc6419660a21f7fa167653","impliedFormat":1},{"version":"3035baeab756a33c8d99983bc29a75366323fff75d5fb953666a8922698fce34","impliedFormat":1},{"version":"fd5a8a811b714a8bd161b5c5ea99cfec53d6d28581d4b4958f59739b0402e988","impliedFormat":1},{"version":"69a09da369c4fb8903957eb41690c6fabf47893386c86d1c709a98792f04fd10","impliedFormat":1},{"version":"564a1270d27cd8ec33a68c4df7eb9f510f415da6f9c96db95478aa68b8041b10","impliedFormat":1},{"version":"fa3c526d7b5177ec8f63b299a7024c829fa356dad4d10edfa5be9a0c82c43697","impliedFormat":1},{"version":"1beb6509e599a9f3bd93cabe9125fc664553d71fa8002fe183f38cda62a84526","impliedFormat":1},{"version":"796d35ad18e3f2467aaf54b9b3fd6a94c77f8f9df1b41aaefe1c3dab8ce97438","impliedFormat":1},{"version":"40191405914c9e13ed32ed31eca4a74ef06be535b44594eb76b9ba04680d5031","impliedFormat":1},{"version":"e27bbd0b7b7e54b3703765eebb805658672c52752342d8dfaa56820c88fc8333","impliedFormat":1},{"version":"da2472f38d0822ed781c936487b660252404b621b37dd5da33759f13ba86c54e","impliedFormat":1},{"version":"3a02910d744549b39a5d3f47ae69f3d34678496d36e07bd3bf27ee3c8736241c","impliedFormat":1},{"version":"e4e0883cbb3029c517406d2956c0745e44403afd820e89a473485129ad66359b","impliedFormat":1},{"version":"5f4138fcf24316124b815f3ab41a903ef327104836cdcb21dc91f0ca4fe28eb4","impliedFormat":1},{"version":"4fd59922851bbd5b81a3a00d60538d7d6eebf8cb3484ab126c02fd80baf30df3","impliedFormat":1},{"version":"76e70ccd3b742aa3c1ef281b537203232c5b4f920c4dcb06417c8e165f7ea028","impliedFormat":1},{"version":"f53e235ded29e288104880b8efa5a7f57c93ca95dc2315abfbd97e0b96763af7","impliedFormat":1},{"version":"b0e1cfe960f00ad8bdab0c509cf212795f747b17b96b35494760e8d1fae2e885","impliedFormat":1},{"version":"a6c5c2ac61526348cfe38229080a552b7016d614df208b7c3ad2bbd8219c4a95","impliedFormat":1},{"version":"9971dead65b4e7c286ed2ca96d76e47681700005a8485e3b0c72b41f03c7c4b0","impliedFormat":1},{"version":"d870bf94d9274815d95f0d5658825747d3afc24bd010e607392b3f034e695199","impliedFormat":1},{"version":"bbdac91149ba4f40bf869adc0e15fa41815ef212b452948fc8e773ff6ee38808","impliedFormat":1},{"version":"0c2f32cb837a6de3b2bec65646a2e04f0a56cd408749cbddc016ddba732ef1a0","impliedFormat":1},{"version":"ef86116cceeaf8833204f4c55e309c385622614bb052cb1534b2c26e38d466c7","impliedFormat":1},{"version":"16a684817cfa7433281c6cd908240b60c4b8fe95ca108079e2052bafbd86dca9","impliedFormat":1},{"version":"480ffa66827143d60025514f0d979f7bc790024821e5ecc12967ce13a7e3e08a","impliedFormat":1},{"version":"303f2d7549e1ae66106064405824e6ae141e9ff2c05ead507afff445610dbf76","impliedFormat":1},{"version":"1a18fcd7ea90842d336fb814801c837368c8ad16807f167b875b89267f1c2530","impliedFormat":1},{"version":"ed0c5e5f3b30334bbd99a73ee4faa47a799b4e5928114131f7b2d123f3d22ca0","impliedFormat":1},{"version":"6c2ad16b31ef481da774dd641a36f124dbcedeb3653891b9869639fa6f2f4a30","impliedFormat":1},{"version":"ee5e067150f421651188289a1e84f9bdf513da63cc82e8d6998b3d41a3cc39bf","impliedFormat":1},"81c57a91c365ea6eda285a8b5c841a9db5136c90cb37e9d25fb6db0a5dc2eb5d",{"version":"4399dbd9b477010c3ab11f056865f63570f96bf3d4f056ec21d9aa67929dc28c","signature":"2c5055279898f6f41cc6c3795420b0ad2d9b4841597035aefe2d1b37e7b5cf48"},"c9388ade69fd04650f6f713b3a0e5e3b3ed01759b438c5d5bc3f969f81027b99","bb79a6c606d89e4d3d6ec7851c6cbca338b3ebe0eb57d020c8d3849edf686a0d","dd1cc53ea6a4cd70532c5793c76a8752336ddda0b2f234f2c7e0fd0fcaf8a664","c909798590ce83a937c136bf6972c48e5287d1db2a999dfb0cb081690183911d","f9c6fa17b166a6c680f522177efdfc9e96c2c6e000f4b89fec0224371838951d","79b43c54b8963ca15ddfa4695d58f4b1b3611aeccdf064a04689417c16c2e065","0c7936524bb81239ded3e12cd49ef7b11a4c3cebf57ea90b4822662cccc7b02c","4a94e3c06012588b13126a537edd7b6b72f55282ef74fa4aa12f83d04358c9d5",{"version":"a7df4ded26a081de4180a368910c3ee3cc5c0ad293126e22bbdc957023de5b80","impliedFormat":1},"54d7010edc9f3675097b8af8bcbb193df8247c6f519efefdd79a76ca6f385254","986a9d0da4930b05f56b241d9a18372ae7bea245f90aa1419ff0d3ff439b0275",{"version":"744fe9bd85cb1c9333ad3252ca2e5563061b3976cc3b1642e55aee948feef694","impliedFormat":1},"4c8116ff57bcdb01bdc0b919d93c77135268e7868603ca408b03c69a3b957d42",{"version":"1d8b86df6acd2a2992af4f5c46ace22956d5c8d2b9eac1edd6077fce04928807","impliedFormat":1},{"version":"3f857fd6b6155ca34aac011c2e20e275ac6b48d515acb7c99b793a9fe49b675d","impliedFormat":1},{"version":"ff18b21996ec139cef029ef46f166c7bd75db6ca21a2532be5e98060fd196df0","impliedFormat":1},{"version":"0eb4ad89a29d3dd237d5c3314693690555e912f427b724f6422673fe1094ed20","impliedFormat":1},{"version":"7a431818a42aea1edc1b17fb256774c0b8df23f45dcf9d6eb47134297d508d17","impliedFormat":1},{"version":"e0a1c9bb1cb804c38e85d4b9614b9d36cf165b5511a7fc2f50782217fb8937db","impliedFormat":1},{"version":"7cf8571660d7cbe6488592e0140889c1dbb99f3661f88d272d5e3ab4328d4516","impliedFormat":1},{"version":"dba882a3e3f61b7bee346670bb62138f188907b4239d0fb1229ff539d3df22a6","impliedFormat":1},{"version":"3b75495c77f85fef76a898491b2eff2e4eb80a37d798a8ad8b39a578c2303859","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"247a952efd811d780e5630f8cfd76f495196f5fa74f6f0fee39ac8ba4a3c9800","impliedFormat":1},{"version":"b1bf87add0ccfb88472cd4c6013853d823a7efb791c10bb7a11679526be91eda","impliedFormat":1},{"version":"176b33f5803f105346d32b420818b117ca432d477a825ce74a56536f20033010","affectsGlobalScope":true,"impliedFormat":1},{"version":"a7ca2a9e61286d74bc37fe64e5dcd7da04607f7f5432f7c651b47b573fc76cef","impliedFormat":1},{"version":"b2d0630483bf337ef9dac326c3334a245aa4946e9f60f12baf7da5be44beafbb","impliedFormat":1},{"version":"09fef63ed6e70e8bbbaf4d161d3cc69acba6c54e65cfa6fbace87be308b47492","impliedFormat":1},{"version":"b803e9235eeb9a25ff002cf0d5054d6753fae8604f192e91c67e2ae5ccf687b0","impliedFormat":1},{"version":"4023023cf3352b9547d108d334d293dae5c721ad2a994d47f2c8da58c048d18a","impliedFormat":1},{"version":"e9513fc98980f4a18287dcb5cd7baebacdf3165e7110ef6472f6c42f05c22a00","impliedFormat":1},{"version":"c53024fb4333f518e8273211f6bde7a7886f76679a3209bfbb74c655c5b5ebb2","impliedFormat":1},{"version":"9c6586c7de027299b0d6ce80f33f2879d3c104052be1ea83a176a1fd7a07aee0","impliedFormat":1},{"version":"7e72c7e8c38f4b575f0590e515397ae3307f7a30b6e5e71f4ed6d06318ea95fd","impliedFormat":1},"9726b4e87a167e6adb06da0d834bb7f493a3249aa01217e2ab729aaad1f997f9","c1e82131b7b5290e7800a5178471cf1c285a0e434d6bc7af028cf7d34434f457","65c6c3fea4e50c2ea46aef042094101635e9b0f99fb7d3082b267c3648e70775","19b6e3e4925131cef8cd864d64c260e96f199872202e141f38e5da88c1069ba6","23c102e08f0520fbd55bb0065522cbfbec43ab12d1d86937aee35b99f3b89ffd","4fe0f05c01a1b9c5a9036f3432c61ed82d97314d7041ba14e771b5027d685382",{"version":"417e6f7a6942cbe58f1fbe2698a6536eb3e494432aa7b79fb9ccb38910531769","impliedFormat":1},{"version":"cfc3b16b6232d95a45c7b2653bac2226af88aaa6ca61a2dfb74e9e849b8b4913","impliedFormat":1},{"version":"b31535ced1ad5abee25063448352c2fd7cdfb48dce94746553cc6321f2e824a5","impliedFormat":1},{"version":"c38c06a8d911667a20170e548c1b7eeea9f51d71222b6dbc3cabb41156731f63","impliedFormat":1},{"version":"fdd339734a8fecc64523859f7b343d9aa112b9dd95912c96c84cee760b82fcbd","impliedFormat":1},{"version":"4e39971f83a72cf1fb8047e1c23f4a26200a347a76f84b316edf2fd618e1fcac","impliedFormat":1},"9b8c531c7fa310d8f27a770ab0486f18499cd8ee1f9a667974b6e75011d66478","8216c9b6e8a495b01666f926ba565bb1cca939f6f99456da2cb9fc417bb16c06","0dab1b33cfecc3014d09664dcd6dfb84a61032bf9f87353425fb73f7afff3074","b99472d8109d929d3c2ca58ea66aae9675461cbc81234c4512caed1bda07c065",{"version":"1249d6151db4cbc74d692d7492c34be51af25f26b0fc7d2cdb959aa0e3a66a77","impliedFormat":1},{"version":"c8eae51f3b442bf9a80050e423cfafee463e20df9f130e8caac4c605d2e0c9bf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bcbe023fd45923eea2e81e32e43a1367eb0a79c2bb7497448492c6cba928a29f","impliedFormat":1},"b8fec977b354d455c6a0897f6d6750a762443d45310f992c4ee0bb424be69768",{"version":"09ffb977270a6158ba8f7bea05871aa573db916d4216796a843b695b197d7647","signature":"cd48a4cd9d86d447ec760a56ae58b39e7ba66dfc9b6e0db59f05cbe60267d5b6"},"058f264c96519babf573c1b282d3d6450be75f5b79222f323f3b7e95535780c9","cd5a2a0084aebe7c3fbb9ef2f3843dd23098d3ad4dadb8bf39aa160a441a69f6","ad68eb4dc2a163dc9af2f4282d605fa29ef361f80972e807e217529e1a86601e","b90b11f658980e7c2addc814b31fd000b844147a93386123558aade53e26da4e","3eb61abf6e01e764b6513916e4430479990e1212dce348bd2d1020d0ca75973d","063594a8e7db4a00a3473ddd45205481ce52c0fb0c86c9f9c87ea484d41e83a1","8f6f9c02e4e68f40f1c2f01b210a37534e1dbe853bd6a87e75dc3a82ac0ad070",{"version":"5c37feacad2a4ce3c622f3d48a9762a352fc14a68d9226b06badc9dc4ad3e861","impliedFormat":1},"f75398031a3687300c0d40ee19d2994de47b6c5d081f6d4da08d5d6c6c2c53cb","b633ac5c264504a8640a5598b9e9c33f1ef10d3b30d6b9792b1ffab1b1804c9a","777a5f7e86e5a2148882fab94ac6d0346e1694f00471e131dd49a545f07e7afa",{"version":"14643cf9aa18c794771207c07866879c872d09c0b8e8aeab4431c1db67d66e71","signature":"d82cc6867af5f5bef20813577ec35ca384cac63121fddc5461a1da7b5520ad6a"},"a6addf023945f32113cebd4836b57fa4f37a11e3b034c4c8704b1aab79612454","aa37eded99dca654eb1d138de1caf58f839bf19686ec48c7696b5b02d839aa84","ead50991d8ed6c436795fcc160ce4ae096b68a9ca7ca828d1009ab03dafd41d9","49ca7b67f135f1f005726f4db58127e0ebe277afc08e2471c46ac36d660e2cde","d3d3f3e7da2e1504b245029a520c157f620a291cff2d8386f9e792cc9b16f79a","0df5e5da6952b7ad3f90a8ea074713c77aeb0f48c5eaf6aabc8283de9b12237f","23f4b8bc5e3fde63bd6084041eeef5095bd232546b923bf5129e2b4d96932e17",{"version":"2700b9c09679600b11a2193ee6e20256dfb1af1ecac3a0d8abd15f21b0b76e89","impliedFormat":1},"534707b5f5ad4cbc9e1cdd2ce0f1dacf8bb2b6ed9497a84e77c353b9b18f0f4e","c429aaacffa3292e5cc5927d94a92e3a1cd3836c4f441056b37b2c137520309f","0d9bb02af4ff677baddd1106dd59b4d09e58cf6b9e076867ab3ff8e74016ad5e","5d47b7f32d45350f4198b04e9f078e524d85ca3b005dd9b59c3611e4bc0f2c0e","005afc6ae9ede6bfe4f97380aebd2bfee4abbbca9841e695f0613e1e0017ad44",{"version":"7bc71d52df9d8e5cc55218d347a91b1758b38341f9cbbac0b80057aa9d93daa6","impliedFormat":1},{"version":"a30ac45f076f441cfd2b8551a54bbcd0d050fc970b8dad15b7d5608da7f804b5","impliedFormat":1},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"2174e20517788d2a1379fc0aaacd87899a70f9e0197b4295edabfe75c4db03d8","impliedFormat":1},{"version":"f6e4d465828539e051c5c1a40ee835fd954ce5cfc45de8e31ac1561bad5d947b","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"17f0ae35f62a9586cade6c10e5a0d61362257b8e03e661c49ca417e4f3da857d","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"bb4ed283cfb3db7ec1d4bb79c37f5e96d39b340f1f4de995c4b0b836c8d5fa05","impliedFormat":1},{"version":"0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"e91ad231af87f864b3f07cd0e39b1cf6c133988156f087c1c3ccb0a5491c9115","impliedFormat":1},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"319c37263037e8d9481a3dc7eadf6afa6a5f5c002189ebe28776ac1a62a38e15","impliedFormat":1},{"version":"4ef960df4f672e93b479f88211ed8b5cfa8a598b97aafa3396cacdc3341e3504","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"550650516d34048712520ffb1fce4a02f2d837761ee45c7d9868a7a35e7b0343","impliedFormat":1},{"version":"0b0d8e14e22ceaffdd4454c4fe9edc744166060c187c0e55d43cf1a8f7c23215","affectsGlobalScope":true,"impliedFormat":1},{"version":"480ffa66827143d60025514f0d979f7bc790024821e5ecc12967ce13a7e3e08a","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[274,316,317,319,523,538,[541,553],[753,762],764,765,767,[790,795],[802,805],[809,817],[819,829],[831,835]],"options":{"allowJs":false,"allowSyntheticDefaultImports":true,"esModuleInterop":true,"jsx":1,"module":99,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":2},"referencedMap":[[817,1],[819,2],[764,3],[765,4],[767,5],[792,6],[793,7],[794,7],[795,8],[802,9],[803,10],[805,11],[811,12],[812,13],[790,14],[791,15],[753,16],[804,17],[814,18],[813,19],[809,20],[815,21],[810,22],[816,23],[316,24],[317,25],[546,26],[547,27],[548,28],[820,29],[754,30],[545,31],[542,31],[549,31],[319,32],[523,33],[538,34],[543,35],[552,36],[553,36],[550,37],[755,38],[544,25],[551,25],[541,25],[274,39],[532,40],[536,41],[528,42],[527,43],[525,44],[524,45],[526,46],[534,47],[531,48],[530,25],[529,25],[769,49],[768,49],[806,49],[818,49],[770,49],[830,49],[808,25],[563,49],[559,50],[562,50],[561,51],[564,52],[566,50],[565,50],[567,53],[569,49],[568,54],[570,55],[573,56],[574,50],[571,50],[575,57],[579,58],[578,54],[580,59],[581,54],[582,60],[576,54],[577,61],[583,50],[584,62],[587,50],[586,50],[585,54],[588,63],[590,50],[589,54],[591,64],[592,50],[593,65],[595,50],[594,50],[596,66],[724,49],[725,67],[597,50],[598,68],[599,50],[600,69],[601,54],[602,70],[603,54],[604,71],[606,72],[605,25],[613,73],[619,50],[617,50],[618,50],[616,49],[615,49],[614,50],[620,74],[622,75],[623,76],[625,77],[627,78],[624,25],[626,79],[628,80],[630,81],[629,50],[631,82],[728,83],[637,84],[632,58],[633,85],[636,86],[639,87],[638,50],[640,88],[572,50],[642,89],[641,54],[612,90],[611,91],[609,50],[608,50],[607,50],[610,50],[644,92],[643,54],[649,93],[647,50],[648,50],[646,50],[645,50],[653,94],[652,49],[651,49],[650,50],[657,95],[656,50],[655,96],[659,97],[658,54],[663,98],[662,50],[661,50],[660,54],[665,99],[664,54],[668,100],[667,50],[666,54],[670,101],[669,54],[672,102],[671,54],[674,103],[673,50],[676,104],[675,50],[680,105],[678,106],[677,49],[679,107],[683,108],[682,50],[681,50],[685,109],[684,54],[687,110],[686,54],[635,111],[634,54],[690,112],[621,25],[689,113],[692,114],[691,54],[693,115],[654,54],[697,116],[695,49],[696,49],[694,49],[698,75],[699,117],[706,118],[705,49],[721,119],[720,49],[708,120],[707,25],[723,121],[722,49],[715,122],[714,49],[712,25],[713,123],[711,49],[710,124],[709,25],[717,125],[716,126],[558,127],[555,49],[557,128],[556,129],[719,130],[718,49],[727,131],[726,75],[701,132],[700,58],[704,133],[703,49],[702,50],[560,25],[688,25],[507,134],[505,135],[503,135],[501,135],[506,136],[504,137],[502,138],[407,139],[326,140],[411,25],[328,141],[404,142],[405,143],[331,25],[335,144],[333,145],[381,146],[380,147],[382,148],[383,149],[332,25],[336,25],[329,25],[330,25],[393,25],[401,25],[420,150],[414,151],[409,152],[367,153],[388,153],[366,153],[344,153],[370,154],[354,155],[351,25],[352,156],[345,153],[348,157],[347,158],[379,159],[350,153],[355,160],[356,153],[360,161],[361,153],[362,162],[363,153],[364,161],[365,153],[373,163],[374,153],[376,164],[377,153],[378,160],[371,154],[359,165],[358,166],[357,153],[372,167],[369,168],[368,154],[353,153],[375,155],[346,153],[387,153],[390,169],[389,170],[421,171],[419,172],[413,173],[415,174],[412,175],[395,176],[416,177],[408,178],[400,179],[327,180],[402,181],[397,182],[396,183],[410,184],[417,185],[418,177],[403,186],[384,187],[398,188],[399,189],[394,190],[406,191],[349,25],[385,192],[392,193],[391,194],[386,195],[334,25],[423,196],[422,135],[343,197],[340,135],[337,25],[240,25],[782,49],[554,25],[472,25],[144,198],[145,198],[146,199],[100,200],[147,201],[148,202],[149,203],[95,25],[98,204],[96,25],[97,25],[150,205],[151,206],[152,207],[153,208],[154,209],[155,210],[156,210],[157,211],[158,212],[159,213],[160,214],[101,25],[99,25],[161,215],[162,216],[163,217],[195,218],[164,219],[165,220],[166,221],[167,222],[168,223],[169,224],[170,225],[171,226],[172,227],[173,228],[174,228],[175,229],[176,25],[177,230],[179,231],[178,232],[180,233],[181,234],[182,235],[183,236],[184,237],[185,238],[186,239],[187,240],[188,241],[189,242],[190,243],[191,244],[192,245],[102,25],[103,25],[104,25],[143,246],[193,247],[194,248],[86,25],[763,49],[84,25],[88,249],[87,25],[295,25],[901,250],[747,25],[807,25],[486,251],[275,25],[105,25],[85,25],[277,25],[305,252],[280,25],[276,253],[278,254],[281,255],[279,25],[309,256],[313,25],[312,25],[306,25],[310,25],[311,257],[314,258],[300,25],[299,25],[304,259],[302,25],[301,25],[283,260],[284,261],[282,262],[285,263],[286,264],[287,265],[288,266],[289,267],[290,268],[291,269],[292,270],[293,271],[294,272],[298,25],[307,25],[297,273],[296,274],[540,25],[315,275],[485,25],[308,25],[321,276],[323,276],[320,25],[325,277],[322,278],[515,25],[511,25],[521,279],[516,280],[513,25],[522,281],[520,282],[519,283],[518,284],[517,283],[510,25],[514,285],[512,25],[508,286],[509,287],[324,288],[533,289],[537,290],[535,291],[786,292],[788,293],[772,294],[783,292],[774,49],[773,295],[787,294],[785,296],[789,297],[771,298],[784,49],[775,294],[424,299],[426,300],[427,301],[425,302],[449,25],[450,303],[432,304],[444,305],[443,306],[441,307],[451,308],[429,25],[454,309],[436,25],[447,310],[446,311],[448,312],[452,25],[442,313],[435,314],[440,315],[453,316],[438,317],[433,25],[434,318],[455,319],[445,320],[439,316],[430,25],[456,321],[428,306],[431,25],[476,135],[477,322],[478,322],[473,322],[465,323],[494,324],[469,325],[470,326],[496,327],[495,328],[463,328],[474,329],[499,330],[471,331],[489,332],[488,333],[497,334],[462,335],[498,336],[480,337],[500,338],[481,339],[491,340],[492,341],[493,342],[468,343],[490,344],[466,345],[479,25],[475,25],[457,25],[487,346],[467,347],[464,348],[482,25],[484,25],[437,306],[318,25],[342,349],[341,25],[539,25],[94,350],[250,351],[252,352],[210,353],[220,354],[211,355],[212,356],[221,357],[201,357],[261,49],[263,358],[245,359],[244,360],[243,361],[266,49],[242,362],[269,25],[197,25],[199,363],[249,362],[253,364],[257,365],[204,366],[203,367],[224,368],[232,369],[207,370],[202,371],[198,372],[236,373],[235,372],[225,25],[196,25],[233,374],[226,375],[234,376],[237,377],[213,378],[227,379],[208,380],[231,381],[230,382],[209,383],[223,384],[222,385],[214,372],[215,386],[217,387],[216,388],[218,389],[268,25],[219,390],[93,25],[247,25],[255,49],[259,49],[239,391],[200,25],[241,25],[246,392],[229,393],[228,394],[206,395],[205,25],[251,25],[248,396],[83,25],[92,397],[89,49],[90,25],[91,25],[254,398],[256,399],[258,400],[260,401],[273,402],[262,402],[272,403],[264,404],[265,405],[267,406],[270,407],[271,408],[238,409],[460,410],[461,411],[459,410],[458,408],[339,135],[338,25],[483,135],[766,49],[751,412],[739,25],[737,413],[740,413],[741,414],[743,415],[738,416],[745,417],[752,418],[732,419],[742,419],[746,420],[748,421],[733,49],[750,422],[730,423],[731,424],[729,414],[736,425],[734,25],[735,25],[744,413],[749,414],[796,25],[801,426],[797,427],[799,428],[798,429],[800,429],[81,25],[82,25],[13,25],[14,25],[16,25],[15,25],[2,25],[17,25],[18,25],[19,25],[20,25],[21,25],[22,25],[23,25],[24,25],[3,25],[25,25],[26,25],[4,25],[27,25],[31,25],[28,25],[29,25],[30,25],[32,25],[33,25],[34,25],[5,25],[35,25],[36,25],[37,25],[38,25],[6,25],[42,25],[39,25],[40,25],[41,25],[43,25],[7,25],[44,25],[49,25],[50,25],[45,25],[46,25],[47,25],[48,25],[8,25],[54,25],[51,25],[52,25],[53,25],[55,25],[9,25],[56,25],[57,25],[58,25],[60,25],[59,25],[61,25],[62,25],[10,25],[63,25],[64,25],[65,25],[11,25],[66,25],[67,25],[68,25],[69,25],[70,25],[1,25],[71,25],[72,25],[12,25],[76,25],[74,25],[79,25],[78,25],[73,25],[77,25],[75,25],[80,25],[121,430],[131,431],[120,430],[141,432],[112,433],[111,434],[140,408],[134,435],[139,436],[114,437],[128,438],[113,439],[137,440],[109,441],[108,408],[138,442],[110,443],[115,444],[116,25],[119,444],[106,25],[142,445],[132,446],[123,447],[124,448],[126,449],[122,450],[125,451],[135,408],[117,452],[118,453],[127,454],[107,455],[130,446],[129,444],[133,25],[136,456],[837,457],[838,25],[840,458],[841,25],[839,378],[842,459],[847,460],[850,461],[781,462],[776,25],[780,463],[848,25],[851,25],[852,25],[853,408],[854,25],[843,25],[855,25],[778,25],[845,25],[846,25],[836,464],[858,465],[856,370],[859,25],[779,25],[884,466],[885,467],[860,468],[863,468],[882,466],[883,466],[873,466],[872,469],[870,466],[865,466],[878,466],[876,466],[880,466],[864,466],[877,466],[881,466],[866,466],[867,466],[879,466],[861,466],[868,466],[869,466],[871,466],[875,466],[886,470],[874,466],[862,466],[899,471],[898,25],[893,470],[895,472],[894,470],[887,470],[888,470],[890,470],[892,470],[896,472],[897,472],[889,472],[891,472],[844,473],[849,474],[900,25],[303,25],[902,25],[857,25],[903,25],[904,475],[777,25],[821,476],[822,477],[823,478],[824,479],[756,480],[757,481],[758,482],[759,480],[760,483],[761,483],[762,483],[828,484],[829,484],[831,485],[832,486],[833,486],[834,487],[835,488],[825,489],[826,490],[827,491]],"affectedFilesPendingEmit":[817,819,764,765,767,792,793,794,795,802,803,805,811,812,790,791,753,804,814,813,809,815,810,816,316,546,547,548,820,754,545,542,549,319,523,538,543,552,553,550,755,544,551,541,821,822,823,824,756,757,758,759,760,761,762,828,829,831,832,833,834,835,825,826,827],"version":"5.9.3"}
\ No newline at end of file