From 8e1df9281350bbf3a276878de16af5f4cbb849af Mon Sep 17 00:00:00 2001 From: Nikola Petrov Date: Tue, 17 Mar 2026 13:41:37 +0100 Subject: [PATCH] Init Copy project from personal website --- .gitignore | 3 + backend/app.ts | 29 ++ backend/controllers/mediaController.ts | 246 ++++++++++++++ backend/controllers/userController.ts | 50 +++ backend/miscellaneous/checkAuthenticated.ts | 15 + backend/miscellaneous/db.ts | 68 ++++ backend/models/mediaModel.ts | 84 +++++ backend/models/userModel.ts | 56 ++++ backend/routes/api/apiRouter.ts | 12 + backend/routes/api/mediaRouter.ts | 13 + backend/routes/main.ts | 10 + backend/routes/user.ts | 14 + backend/views/user.hbs | 69 ++++ build.sh | 6 + bun.lock | 209 ++++++++++++ frontend/elementcreate.tsx | 71 ++++ frontend/list/elements.tsx | 35 ++ frontend/list/functions.tsx | 25 ++ frontend/list/list.tsx | 287 ++++++++++++++++ frontend/list/types.d.ts | 7 + frontend/utils/attr.d.ts | 1 + frontend/utils/element-types.d.ts | 341 ++++++++++++++++++++ frontend/utils/events.d.ts | 98 ++++++ frontend/utils/intrinsic-elements.d.ts | 118 +++++++ package.json | 14 + public/index.html | 74 +++++ public/logo.ico | Bin 0 -> 72350 bytes public/no_poster.jpg | Bin 0 -> 54048 bytes tsconfig.json | 34 ++ 29 files changed, 1989 insertions(+) create mode 100644 .gitignore create mode 100644 backend/app.ts create mode 100644 backend/controllers/mediaController.ts create mode 100644 backend/controllers/userController.ts create mode 100644 backend/miscellaneous/checkAuthenticated.ts create mode 100644 backend/miscellaneous/db.ts create mode 100644 backend/models/mediaModel.ts create mode 100644 backend/models/userModel.ts create mode 100644 backend/routes/api/apiRouter.ts create mode 100644 backend/routes/api/mediaRouter.ts create mode 100644 backend/routes/main.ts create mode 100644 backend/routes/user.ts create mode 100644 backend/views/user.hbs create mode 100755 build.sh create mode 100644 bun.lock create mode 100644 frontend/elementcreate.tsx create mode 100644 frontend/list/elements.tsx create mode 100644 frontend/list/functions.tsx create mode 100644 frontend/list/list.tsx create mode 100644 frontend/list/types.d.ts create mode 100644 frontend/utils/attr.d.ts create mode 100644 frontend/utils/element-types.d.ts create mode 100644 frontend/utils/events.d.ts create mode 100644 frontend/utils/intrinsic-elements.d.ts create mode 100644 package.json create mode 100644 public/index.html create mode 100644 public/logo.ico create mode 100644 public/no_poster.jpg create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ec9818 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +output/ +*.sqlite \ No newline at end of file diff --git a/backend/app.ts b/backend/app.ts new file mode 100644 index 0000000..cb50581 --- /dev/null +++ b/backend/app.ts @@ -0,0 +1,29 @@ +import express from "express"; + +const hostname = '127.0.0.1'; +const httpPort = 4080; + +const app = express(); + +// app.set('views', 'views'); +// app.set('view engine', 'hbs'); + +// import morgan from 'morgan' +// app.use(morgan('dev')); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(express.static('public')); + +import mainRouter from './routes/main'; +import apiRouter from './routes/api/apiRouter'; + +app.use('/', mainRouter); +app.use('/api', apiRouter); + +app.listen(httpPort, () => { + console.log(`Server running at http://${hostname}:${httpPort}/`); +}); + +import mediaController from "./controllers/mediaController"; + +await mediaController.checkImages(); \ No newline at end of file diff --git a/backend/controllers/mediaController.ts b/backend/controllers/mediaController.ts new file mode 100644 index 0000000..ce1ef18 --- /dev/null +++ b/backend/controllers/mediaController.ts @@ -0,0 +1,246 @@ +import { type Request, type Response } from "express"; +import UserModel, { values } from '../models/userModel'; +import MediaModel, { Table, Media } from '../models/mediaModel'; +import mediaModel from "../models/mediaModel"; + +interface omdbRes { + Title: string, + Released: string, + Response: string, + Poster: string, + Type: string, + imdbID: string, + Year: string, +} + +function fromStringToTable(value: string): (Table | undefined) { + if (value.localeCompare("games") == 0) return Table.games; + if (value.localeCompare("movies") == 0) return Table.movies; + if (value.localeCompare("series") == 0) return Table.series; + return; +} + +async function downloadImage(mData: Media, type: Table) { + // Specify the path where you want to save the image + const outputPath = '/poster/' + type + '/' + mData.code + '.jpg'; + + // Use Bun's built-in fetch to download the image + const response = await fetch(mData.poster); + + // Check if the request was successful + if (!response.ok) { + console.log("fetch image error"); + console.log(mData.title); + return; + } + + // Convert the response to a blob + const imageBlob = await response.blob(); + // Use Bun's write to save the image to a file + await Bun.write('./public/' + outputPath, await imageBlob.arrayBuffer()); + MediaModel.updateWebImg(type, mData.code, outputPath); + +} + +async function createMed(req: Request, res: Response) { + const mediaCode: string = req.body.code; + + const omdb_key = UserModel.getValue(values.omdb_key); + + if (!omdb_key) { + return res.status(500).json({ message: 'Error when creating media' }); + } + + try { + + const uri = `http://www.omdbapi.com/?i=${mediaCode}&apikey=${omdb_key}`; + const mJson = await fetch(uri); + const mData: omdbRes = await mJson.json(); + + if (mData.Response == 'False') { + return res.status(404).json({ message: 'wrong code' }); + } + + const media: Media = { + id: 0, + code: mData.imdbID, + title: mData.Title, + released: mData.Released, + webImg: "", + poster: mData.Poster, + year: mData.Year + }; + + var tableType = Table.series; + + if (mData.Type.localeCompare("movie") == 0) { + tableType = Table.movies; + } + + const found = MediaModel.findOne(tableType, mediaCode); + if (found.length != 0) { + res.status(409).json({ message: 'Media already exists' }); + await downloadImage(media, tableType); + return; + } + + + const savedMedia = MediaModel.save(tableType, mData.imdbID, mData.Title, mData.Released, "", mData.Poster, mData.Year); + await downloadImage(media, tableType); + + res.status(201).json(media); + } catch (err) { + return res.status(500).json({ message: 'Error when creating media' }); + } +} + +async function createGame(req: Request, res: Response) { + var gameCode = req.body.code; + + const twitch_client_id = UserModel.getValue(values.twitch_client_id); + const twitch_client_secret = UserModel.getValue(values.twitch_client_secret); + + if (!twitch_client_id || !twitch_client_secret) { + return res.status(500).json({ message: 'Error when creating game' }); + } + + try { + const gameFound = MediaModel.findOne(Table.games, gameCode); + if (gameFound) { + return res.status(409).json({ message: 'Game already exists' }); + } + + const uri = "https://id.twitch.tv/oauth2/token?client_id=" + twitch_client_id + "&client_secret=" + twitch_client_secret + "&grant_type=client_credentials"; + var response = await fetch(uri, { method: 'POST' }); + const mData = await response.json(); + + const mheaders: HeadersInit = { + 'Accept': 'application/json', + 'Client-ID': twitch_client_id, + 'Authorization': 'Bearer ' + mData.access_token + } + + gameCode = parseInt(gameCode) + + response = await fetch( + "https://api.igdb.com/v4/games", + { + method: 'POST', + headers: mheaders, + body: `fields name, first_release_date; where id = ${gameCode};` + } + ) + const gameData = await response.json() + if (gameData.length == 0) { + return res.status(404).json({ message: 'wrong code' }); + } + + const date = new Date(gameData[0].first_release_date * 1000); + const options: Intl.DateTimeFormatOptions = { day: 'numeric', month: 'short', year: 'numeric' } + const dateStr = date.toLocaleDateString(undefined, options); + + + response = await fetch( + "https://api.igdb.com/v4/covers", + { + method: 'POST', + headers: mheaders, + body: `fields image_id; where game = ${gameCode};` + } + ) + const coverData = await response.json() + const game: Media = { + id: 0, + code: gameCode, + title: gameData[0].name, + released: dateStr, + webImg: "", + poster: `https://images.igdb.com/igdb/image/upload/t_cover_big/${coverData[0].image_id}.jpg`, + year: date.getFullYear().toString(), + }; + + const savedGame = MediaModel.save(Table.games, game.code, game.title, game.released, game.webImg, game.poster, game.year); + await downloadImage(game, Table.games); + return res.status(201).json(game); + + } catch (error) { + + return res.status(500).json({ message: 'Error when creating game', error: error }); + } +} + +function list(req: Request, res: Response) { + const mediaTable = fromStringToTable(req.params.mediaType); + if (!mediaTable) { + return res.status(500).json({ + message: 'Error when getting media.' + }); + } + + const media = MediaModel.find(mediaTable); + return res.json(media); +} + +async function create(req: Request, res: Response) { + const mediaCode: string = req.body.code; + if (mediaCode.startsWith("t")) { + return await createMed(req, res); + } else { + return await createGame(req, res); + } +} +function remove(req: Request, res: Response) { + const mediaTable = fromStringToTable(req.params.mediaType); + if (!mediaTable) { + return res.status(500).json({ + message: 'Error when deleting the media.' + }); + } + + const code = req.body.code; + + try { + const mediaTable = req.baseUrl.includes('movies') ? Table.movies : Table.series; + const media = MediaModel.findOneAndDelete(mediaTable, code); + if (!media) { + return res.status(404).json({ message: 'No such media' }); + } + + return res.status(204).json(); + } + catch (err) { + return res.status(500).json({ message: 'Error when deleting the media.' }); + } +} + +async function checkImages() { + await checkTableImages(Table.games); + await checkTableImages(Table.movies); + await checkTableImages(Table.series); +} +function delay(time:number) { + return new Promise(resolve => setTimeout(resolve, time)); +} + +async function checkTableImages(table: Table) { + const list = mediaModel.find(table); + + for (const element of list) { + + const path = "./public/" + element.webImg; + const f = Bun.file(path); + const exists = await f.exists(); + if (!exists){ + console.log(element.title); + await downloadImage(element, table); + await delay(1000); + } + } +} + +export default { + list, + create, + remove, + checkImages +}; diff --git a/backend/controllers/userController.ts b/backend/controllers/userController.ts new file mode 100644 index 0000000..f8893f3 --- /dev/null +++ b/backend/controllers/userController.ts @@ -0,0 +1,50 @@ +import { type Request, type Response } from "express"; +import UserModel, { values } from '../models/userModel'; + +export default { + + render: function (req: Request, res: Response) { + res.render('user', { keys: UserModel.namesOfValues }); + }, + + create: function (req: Request, res: Response) { + + const reqPassword: string = req.body.reqPassword; + if (!reqPassword) return res.render('user', { keys: UserModel.namesOfValues }); + + const password = UserModel.getValue(values.pass); + + // if no password in db save reqPassword + if (!password) { + const affectedRows = UserModel.updateValue("pass", reqPassword); + if (affectedRows > 0) { + return res.redirect('/list'); + } + return res.render('user', { keys: UserModel.namesOfValues }); + } + // check if passwords equal + if (password != reqPassword) { + return res.render('user', { keys: UserModel.namesOfValues }); + } + + // update + const name: string = req.body.name; + const value: string = req.body.value; + + if (!name || !value) { + return res.render('user', { keys: UserModel.namesOfValues }); + } + + const affectedRows = UserModel.updateValue(name, value); + if (affectedRows == 0) { + return res.render('user', { keys: UserModel.namesOfValues }); + } + + return res.redirect('/list'); + }, + + get: function (req: Request, res: Response) { + const usersFound = UserModel.getAll(); + return res.status(200).json(usersFound); + }, +}; \ No newline at end of file diff --git a/backend/miscellaneous/checkAuthenticated.ts b/backend/miscellaneous/checkAuthenticated.ts new file mode 100644 index 0000000..016a62f --- /dev/null +++ b/backend/miscellaneous/checkAuthenticated.ts @@ -0,0 +1,15 @@ +import { type NextFunction, type Request, type Response } from "express"; +import userModel, { values } from 'backend/models/userModel'; + +function checkAuthenticated(req: Request, res: Response, next: NextFunction) { + const pass = req.body.pass; + const password = userModel.getValue(values.pass); + if (pass && password) { + if (pass == password) { + return next(); + } + } + return res.status(500).json({ message: 'Error when getting transactions.' }); +} + +export default checkAuthenticated; \ No newline at end of file diff --git a/backend/miscellaneous/db.ts b/backend/miscellaneous/db.ts new file mode 100644 index 0000000..e72afa0 --- /dev/null +++ b/backend/miscellaneous/db.ts @@ -0,0 +1,68 @@ +import { Database } from "bun:sqlite"; + +const pool = new Database("mydb.sqlite", { strict: true }); + +pool.run(` +CREATE TABLE IF NOT EXISTS series ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + code TEXT NOT NULL, + title TEXT NOT NULL, + released TEXT NOT NULL, + webImg TEXT NOT NULL, + poster TEXT NOT NULL, + year TEXT NOT NULL +); +`); + +pool.run(` +CREATE TABLE IF NOT EXISTS movies ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + code TEXT NOT NULL, + title TEXT NOT NULL, + released TEXT NOT NULL, + webImg TEXT NOT NULL, + poster TEXT NOT NULL, + year TEXT NOT NULL +); +`); + +pool.run(` +CREATE TABLE IF NOT EXISTS games ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + code TEXT NOT NULL, + title TEXT NOT NULL, + released TEXT NOT NULL, + webImg TEXT NOT NULL, + poster TEXT NOT NULL, + year TEXT NOT NULL +); +`); + +pool.run(` +CREATE TABLE IF NOT EXISTS userData ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + value TEXT NOT NULL +); +`); + +function inset_keys() { + class co { + count!: number; + } + const result = pool.query("SELECT count(*) as count FROM userData;").as(co).get(); + if(result && result.count >= 4){ + return; + } + + pool.run(` + INSERT INTO userData (name, value) VALUES ("pass", ""); + INSERT INTO userData (name, value) VALUES ("omdb_key", ""); + INSERT INTO userData (name, value) VALUES ("twitch_client_id", ""); + INSERT INTO userData (name, value) VALUES ("twitch_client_secret", ""); + `); +} + +inset_keys(); + +export default pool; \ No newline at end of file diff --git a/backend/models/mediaModel.ts b/backend/models/mediaModel.ts new file mode 100644 index 0000000..ddf1f63 --- /dev/null +++ b/backend/models/mediaModel.ts @@ -0,0 +1,84 @@ +import pool from 'backend/miscellaneous/db' + + +export class Media { + id!: number; + code!: string + title!: string; + released!: string; + webImg!: string; + poster!: string; + year!: string; +} + +export enum Table { + movies = "movies", + series = "series", + games = "games", +} + +function save(table: Table, code: string, title: string, released:string, webImg:string, poster: string, year: string): number { + try { + const sql = "INSERT INTO " + table + " (code, title, released, webImg, poster, year) VALUES (?,?,?,?,?,?)"; + + const result = pool.query(sql).run(code, title, released, webImg, poster, year); + return result.changes; + } + catch (err) { + console.log(err); + } + return 0; +} + +function updateWebImg(table: Table, code: string, webImg: string): number { + try { + const sql = "UPDATE " + table + " SET webImg = ? WHERE code = ?;"; + const result = pool.query(sql).run(webImg, code); + return result.changes; + } + catch (err) { + console.log(err); + } + return 0; +} + +function findOneAndDelete(table: Table, code: string): number { + try { + const result = pool.query("DELETE FROM " + table + " WHERE code = ?;").run(code); + return result.changes; + } + catch (err) { + console.log(err); + } + return 0; +} + +function findOne(table: Table, code: string): Media[] { + try { + const rows = pool.query("SELECT * FROM " + table + " WHERE code = ?;").as(Media).all(code); + return rows; + } + catch (err) { + console.log(err); + } + return []; +} + +function find(table: Table): Media[] { + try { + const rows = pool.query("SELECT * FROM " + table + ";").as(Media).all(); + return rows; + } + catch (err) { + console.log(err); + } + return []; +} + +export default { + save, + updateWebImg, + findOneAndDelete, + findOne, + find +}; \ No newline at end of file diff --git a/backend/models/userModel.ts b/backend/models/userModel.ts new file mode 100644 index 0000000..9433af3 --- /dev/null +++ b/backend/models/userModel.ts @@ -0,0 +1,56 @@ +import pool from 'backend/miscellaneous/db' + +class UserD { + name?: string; + value?: string; +} + +export enum values { + pass = 1, + omdb_key, + twitch_client_id, + twitch_client_secret, +} + +const namesOfValues: string[] = ["", "pass", "omdb_key", "twitch_client_id", "twitch_client_secret"]; + +function getValue(name: values): string | undefined { + try { + const rows = pool.query("SELECT name, value FROM userData where id = ?;").as(UserD).all(name); + if (rows.length > 0) + return rows[0].value; + } + catch (err) { + console.log(err); + } + return; +} + +function updateValue(name: string, value: string): number { + try { + const result = pool.query("UPDATE userData SET value = ? WHERE name = ?").run(value, name); + return result.changes; + } + catch (err) { + console.log(err); + } + return 0; +} + +function getAll(): UserD[] { + try { + const rows = pool.query("SELECT name, value FROM userData;").as(UserD).all(); + return rows; + } + catch (err) { + console.log(err); + } + return []; +} + +export default { + getValue, + updateValue, + getAll, + namesOfValues +}; diff --git a/backend/routes/api/apiRouter.ts b/backend/routes/api/apiRouter.ts new file mode 100644 index 0000000..b9144a9 --- /dev/null +++ b/backend/routes/api/apiRouter.ts @@ -0,0 +1,12 @@ +import express, { type Request, type Response } from "express"; +import mediaRouter from './mediaRouter'; + +const router = express.Router(); + +router.use('/media', mediaRouter); + +router.get('/', function (req: Request, res: Response) { + res.status(200).json({ message: 'API is working' }); +}); + +export default router; \ No newline at end of file diff --git a/backend/routes/api/mediaRouter.ts b/backend/routes/api/mediaRouter.ts new file mode 100644 index 0000000..a69bc68 --- /dev/null +++ b/backend/routes/api/mediaRouter.ts @@ -0,0 +1,13 @@ +import express from "express"; +import mediaController from '../../controllers/mediaController.js'; +import checkAuthenticated from '../../miscellaneous/checkAuthenticated.js'; + +const router = express.Router(); + +router.get('/:mediaType', mediaController.list); + +router.post('/:mediaType', checkAuthenticated, mediaController.create); + +router.delete('/:mediaType', checkAuthenticated, mediaController.remove); + +export default router; \ No newline at end of file diff --git a/backend/routes/main.ts b/backend/routes/main.ts new file mode 100644 index 0000000..7d6604d --- /dev/null +++ b/backend/routes/main.ts @@ -0,0 +1,10 @@ +import express, { type Request, type Response } from "express"; + +const router = express.Router(); + + + +//import userRouter from './user'; +//router.use('/user', userRouter); + +export default router; \ No newline at end of file diff --git a/backend/routes/user.ts b/backend/routes/user.ts new file mode 100644 index 0000000..877a0d1 --- /dev/null +++ b/backend/routes/user.ts @@ -0,0 +1,14 @@ +import express from "express"; +import userController from 'backend/controllers/userController'; +import checkAuthenticated from 'backend/miscellaneous/checkAuthenticated'; + +const router = express.Router(); + +/* GET home page. */ +router.get('/', userController.render); + +router.post('/', userController.create); + +router.put('/', checkAuthenticated, userController.get); + +export default router; \ No newline at end of file diff --git a/backend/views/user.hbs b/backend/views/user.hbs new file mode 100644 index 0000000..17a835e --- /dev/null +++ b/backend/views/user.hbs @@ -0,0 +1,69 @@ + + + + + + + + + + + + + User + + + + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+
Get
+
+
+ + +
+ + + + \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..cc196c7 --- /dev/null +++ b/build.sh @@ -0,0 +1,6 @@ +bun build ./backend/app.ts --outfile=output/app.js --target=bun --minify +bun build ./frontend/list/list.tsx --outfile=output/public/list.js --minify + +cp -r backend/views/ output/ +cp -r public/* output/public/ +cp mydb.sqlite output/ \ No newline at end of file diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..a052487 --- /dev/null +++ b/bun.lock @@ -0,0 +1,209 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "web", + "dependencies": { + "@types/express": "^5.0.3", + "@types/morgan": "^1.9.10", + "bun-types": "^1.2.22", + "express": "^5.1.0", + "hbs": "^4.2.0", + "morgan": "~1.10.1", + "typescript": "^5.9.2", + }, + }, + }, + "packages": { + "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], + + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + + "@types/express": ["@types/express@5.0.6", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "^2" } }, "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA=="], + + "@types/express-serve-static-core": ["@types/express-serve-static-core@5.1.1", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A=="], + + "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], + + "@types/morgan": ["@types/morgan@1.9.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA=="], + + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + + "@types/qs": ["@types/qs@6.15.0", "", {}, "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow=="], + + "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], + + "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], + + "@types/serve-static": ["@types/serve-static@2.2.0", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*" } }, "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ=="], + + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + + "basic-auth": ["basic-auth@2.0.1", "", { "dependencies": { "safe-buffer": "5.1.2" } }, "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="], + + "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], + + "bun-types": ["bun-types@1.3.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], + + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], + + "foreachasync": ["foreachasync@3.0.0", "", {}, "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw=="], + + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "handlebars": ["handlebars@4.7.7", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hbs": ["hbs@4.2.0", "", { "dependencies": { "handlebars": "4.7.7", "walk": "2.3.15" } }, "sha512-dQwHnrfWlTk5PvG9+a45GYpg0VpX47ryKF8dULVd6DtwOE6TEcYQXQ5QM6nyOx/h7v3bvEQbdn19EDAcfUAgZg=="], + + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + + "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "morgan": ["morgan@1.10.1", "", { "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", "on-headers": "~1.1.0" } }, "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], + + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], + + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], + + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "walk": ["walk@2.3.15", "", { "dependencies": { "foreachasync": "^3.0.0" } }, "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg=="], + + "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "morgan/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "morgan/on-finished": ["on-finished@2.3.0", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww=="], + + "morgan/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + } +} diff --git a/frontend/elementcreate.tsx b/frontend/elementcreate.tsx new file mode 100644 index 0000000..a59a7f0 --- /dev/null +++ b/frontend/elementcreate.tsx @@ -0,0 +1,71 @@ +/// +/// +/// + +export interface Children { + children?: AttributeValue; +} + +export interface CustomElementHandler { + (attributes: Attributes, contents: (string | HTMLElement)[]): HTMLElement; +} + +export interface Attributes { + [key: string]: AttributeValue; +} + + +export function createElement( + tag: string | CustomElementHandler, + attrs: Attributes & Children | undefined = {}, + ...children: (string | HTMLElement)[] +): HTMLElement { + + if (typeof tag === "function") { + if (attrs == null) { + attrs = { num: 0 }; + } + if (children == null) { + children = [""]; + } + return tag(attrs, children); + } + + const retElement = document.createElement(tag); + + for (let name in attrs) { + if (name && attrs.hasOwnProperty(name)) { + + let value = attrs[name]; + if (typeof value === "number") { + retElement.setAttribute(name, value.toString()); + } else if (typeof value === "function") { + retElement.addEventListener(name.slice(2), value); + } + else { + retElement.setAttribute(name, value); + } + } + } + + for (let i = 2; i < arguments.length; i++) { + let child = arguments[i]; + + // check if child is a HTMLElement + if (child.nodeType != undefined) { + retElement.appendChild(child); + continue; + } + + if (child instanceof Array) { + for (let j = 0; j < child.length; j++) { + if (child[j].nodeType != undefined) retElement.appendChild(child[j]); + else retElement.appendChild(document.createTextNode(child[j].toString())); + } + continue; + } + // child is a string + retElement.appendChild(document.createTextNode(child.toString())); + } + return retElement; +} \ No newline at end of file diff --git a/frontend/list/elements.tsx b/frontend/list/elements.tsx new file mode 100644 index 0000000..8e9b06f --- /dev/null +++ b/frontend/list/elements.tsx @@ -0,0 +1,35 @@ +import type { Attributes } from "frontend/elementcreate"; +import * as elements from "frontend/elementcreate"; + +function MediaElement(attributes: Attributes, contents: string[]) { + const ret =
+
+ +
+
{attributes['title']}
+

{attributes['released']}

+
+
+ +
+
+
+
+
; + return ret; +} + + +function MyHeader(attributes: Attributes, contents: string[]) { + return
+
+

{attributes['title']} {attributes['num'] ? ": " + attributes['num'] : ""}

+
+
; +} + +function MediaContainer(attributes: Attributes, contents: string[]) { + return
{contents[0]}
; +} + +export { MediaElement, MyHeader, MediaContainer } \ No newline at end of file diff --git a/frontend/list/functions.tsx b/frontend/list/functions.tsx new file mode 100644 index 0000000..4f82060 --- /dev/null +++ b/frontend/list/functions.tsx @@ -0,0 +1,25 @@ + +function splitByTitle(movies: Array): { [s: string]: Movie[]; } { + const result = movies.reduce((r, a) => { + var letter = a.title[0].toUpperCase(); + if (!isNaN(parseInt(letter))) letter = "#"; + r[letter] = r[letter] || []; + r[letter].push(a); + return r; + }, Object.create(null)); + + return result; +} + +function splitByYear(movies: Array): { [s: string]: Movie[]; } { + const result = movies.reduce((r, a) => { + const year = new Date(a.released).getFullYear(); + r[year] = r[year] || []; + r[year].push(a); + return r; + }, Object.create(null)); + + return result; +} + +export { splitByTitle, splitByYear }; \ No newline at end of file diff --git a/frontend/list/list.tsx b/frontend/list/list.tsx new file mode 100644 index 0000000..01ec4d9 --- /dev/null +++ b/frontend/list/list.tsx @@ -0,0 +1,287 @@ +import { MediaElement, MyHeader, MediaContainer } from "frontend/list/elements"; +import { splitByTitle, splitByYear } from "frontend/list/functions"; + +import * as elements from "frontend/elementcreate"; + +var sortType = 0; +var listType = 0; + +const sortTypeTitle = 0; +const sortTypeYear = 1; +const sortTypeId = 2; + +const moviesType = 0; +const gamesType = 1; +const seriesType = 2; + +var listButtons: Array = []; +var sortButtons: Array = []; + +var root: HTMLElement | null; +var editButton: HTMLElement | null; +var movieElements: HTMLElement[] = []; + +function getLink(): string { + switch (listType) { + case moviesType: + return "/api/media/movies"; + case gamesType: + return "/api/media/games"; + case seriesType: + return "/api/media/series"; + } + return "/api/media/movies"; +} + +async function reload() { + try { + const response = await fetch(getLink()); + const movies = await response.json(); + renderMedias(movies); + } catch (err) { + console.log(err); + } +} + +function submitMedia(event: SubmitEvent) { + event.preventDefault(); + + const pass = document.getElementById("pass") as HTMLInputElement | null; + if (!pass) return; + + const input_id = document.getElementById("input_id") as HTMLInputElement | null; + if (!input_id) return; + + + if (pass.value == "" || input_id.value == "") return; + + + fetch(getLink(), { + body: JSON.stringify({ pass: pass.value, code: input_id.value }), + headers: { "Content-Type": "application/json" }, + method: "POST" + }) + .then(async (response) => { + if (response.status != 201) { + const json = await response.json(); + console.log(json); + alert(json.message); + return; + } + + await reload(); + }) + .catch(err => { + console.log(err); + }); + + input_id.value = ""; +} + +function loadState() { + const searchParams = new URLSearchParams(window.location.search); + if (searchParams.has("listType")) { + switch (searchParams.get("listType")) { + case "movies": + listType = moviesType; + break; + case "series": + listType = seriesType; + break; + case "games": + listType = gamesType; + break; + default: + listType = moviesType; + break; + } + } + + if (searchParams.has("sortType")) { + switch (searchParams.get("sortType")) { + case "title": + sortType = sortTypeTitle; + break; + case "year": + sortType = sortTypeYear; + break; + case "id": + sortType = sortTypeId; + break; + default: + sortType = sortTypeTitle; + break; + } + } +} + +function changeType(type: number) { + listType = type; + loadPage(); + const searchParams = new URLSearchParams(window.location.search); + switch (listType) { + case moviesType: + searchParams.set("listType", "movies"); + break; + case gamesType: + searchParams.set("listType", "games"); + break; + case seriesType: + searchParams.set("listType", "series"); + break; + } + history.replaceState({}, '', window.location.pathname + '?' + searchParams.toString()); +} + +function changeSort(type: number) { + sortType = type; + loadPage(); + const searchParams = new URLSearchParams(window.location.search); + switch (type) { + case sortTypeTitle: + searchParams.set("sortType", "title"); + break; + case sortTypeYear: + searchParams.set("sortType", "year"); + break; + case sortTypeId: + searchParams.set("sortType", "id"); + break; + } + history.replaceState({}, '', window.location.pathname + '?' + searchParams.toString()); +} + + +function splitBySort(movies: Array): { [s: string]: Movie[]; } { + switch (sortType) { + case sortTypeYear: + const sorted = movies.sort((a, b) => { + const ay = Date.parse(a.released); + const by = Date.parse(b.released); + return ay - by; + }); + return splitByYear(sorted); + case sortTypeId: + movies.sort((a, b) => a.id < b.id ? 1 : -1); + return { "added": movies }; + default: + return splitByTitle(movies.sort((a, b) => a.title.localeCompare(b.title))); + } +} + +function toggleEdit() { + movieElements.forEach(element => { + const div = element.querySelector(".d-none"); + if (!div) return; + div.classList.remove("d-none"); + div.classList.add("d-flex"); + }); +} + +document.addEventListener('DOMContentLoaded', async () => { + document.getElementById("myform")?.addEventListener("submit", submitMedia); + + listButtons.push(document.getElementById("movieButton")); + listButtons.push(document.getElementById("gameButton")); + listButtons.push(document.getElementById("seriesButton")); + listButtons.forEach((button, index) => button?.addEventListener("click", () => changeType(index))); + + sortButtons.push(document.getElementById("titleButton")); + sortButtons.push(document.getElementById("yearButton")); + sortButtons.push(document.getElementById("idButton")); + sortButtons.forEach((button, index) => button?.addEventListener("click", () => changeSort(index))); + + editButton = document.getElementById("editButton"); + editButton?.addEventListener("click", () => toggleEdit()); + + loadState(); + loadPage(); +}); + +async function loadPage() { + + listButtons.forEach(button => button?.classList.remove("active")); + listButtons[listType]?.classList.add("active"); + + await reload(); +} + + +function removeMedia(evt: Event) { + const password = document.getElementById("pass") as HTMLInputElement | null; + if (!password) return; + if (password.value == "") return; + + let elem = evt.target as HTMLElement | null; + + while (elem && !elem.classList.contains('media-element')) { + elem = elem.parentElement; + } + + if (!elem) return; + const id = elem.id; + + fetch(getLink(), { + body: JSON.stringify({ pass: password.value, code: id }), + headers: { "Content-Type": "application/json" }, + method: "DELETE" + }) + .then(async (response) => { + + if (response.status != 204) { + console.log("error"); + console.log(response.body); + return; + } + document.getElementById(id)?.remove(); + }) + .catch(err => { + console.log(err); + }); + password.value = ""; +} + +function onImgError(evt: Event) { + const imgT = evt.target as HTMLImageElement; + imgT.src = "/no_poster.jpg"; + console.log(imgT.parentElement?.parentElement?.id); +} + +function renderMedias(unsorted_movies: Array) { + root = document.getElementById('root'); + if (!root) return; + + root.innerHTML = ""; + movieElements = []; + + const splitMovies = splitBySort(unsorted_movies); + + let years; + if (sortType == sortTypeTitle) { + years = Object.keys(splitMovies).sort((a, b) => -b.localeCompare(a)); + } else { + years = Object.keys(splitMovies).sort((a, b) => b.localeCompare(a)); + } + + + root.appendChild(); + + for (const letter of years) { + + const movies = splitMovies[letter]; + + const header = ; + root.appendChild(header); + + const row = + + {movies.map(movie => { + const med = ; + movieElements.push(med); + return med; + })} + ; + + root.appendChild(row); + } +} \ No newline at end of file diff --git a/frontend/list/types.d.ts b/frontend/list/types.d.ts new file mode 100644 index 0000000..241d6b8 --- /dev/null +++ b/frontend/list/types.d.ts @@ -0,0 +1,7 @@ +interface Movie { + title: string; + released: string; + code: string; + webImg: string; + id: string; +} \ No newline at end of file diff --git a/frontend/utils/attr.d.ts b/frontend/utils/attr.d.ts new file mode 100644 index 0000000..3d06107 --- /dev/null +++ b/frontend/utils/attr.d.ts @@ -0,0 +1 @@ +type AttributeValue = number | string | EventListener; \ No newline at end of file diff --git a/frontend/utils/element-types.d.ts b/frontend/utils/element-types.d.ts new file mode 100644 index 0000000..932fc8c --- /dev/null +++ b/frontend/utils/element-types.d.ts @@ -0,0 +1,341 @@ +declare namespace JSX { + interface HtmlTag { + accesskey?: string; + class?: string; + contenteditable?: string; + dir?: string; + hidden?: string | boolean; + id?: AttributeValue; + role?: string; + lang?: string; + draggable?: string | boolean; + spellcheck?: string | boolean; + style?: string; + tabindex?: string; + title?: string; + translate?: string | boolean; + } + interface HtmlAnchorTag extends HtmlTag { + href?: string; + target?: string; + download?: string; + ping?: string; + rel?: string; + media?: string; + hreflang?: string; + type?: string; + } + interface HtmlAreaTag extends HtmlTag { + alt?: string; + coords?: string; + shape?: string; + href?: string; + target?: string; + ping?: string; + rel?: string; + media?: string; + hreflang?: string; + type?: string; + } + interface HtmlAudioTag extends HtmlTag { + src?: string; + autobuffer?: string; + autoplay?: string; + loop?: string; + controls?: string; + } + interface BaseTag extends HtmlTag { + href?: string; + target?: string; + } + interface HtmlQuoteTag extends HtmlTag { + cite?: string; + } + interface HtmlBodyTag extends HtmlTag { + } + interface HtmlButtonTag extends HtmlTag { + action?: string; + autofocus?: string; + disabled?: string; + enctype?: string; + form?: string; + method?: string; + name?: string; + novalidate?: string | boolean; + target?: string; + type?: string; + value?: string; + onClick?: Function; + } + interface HtmlDataListTag extends HtmlTag { + } + interface HtmlCanvasTag extends HtmlTag { + width?: string; + height?: string; + } + interface HtmlTableColTag extends HtmlTag { + span?: string; + } + interface HtmlTableSectionTag extends HtmlTag { + } + interface HtmlTableRowTag extends HtmlTag { + } + interface DataTag extends HtmlTag { + value?: string; + } + interface HtmlEmbedTag extends HtmlTag { + src?: string; + type?: string; + width?: string; + height?: string; + } + interface HtmlFieldSetTag extends HtmlTag { + disabled?: string; + form?: string; + name?: string; + } + interface HtmlFormTag extends HtmlTag { + acceptCharset?: string; + action?: string; + autocomplete?: string; + enctype?: string; + method?: string; + name?: string; + novalidate?: string | boolean; + target?: string; + } + interface HtmlHtmlTag extends HtmlTag { + manifest?: string; + } + interface HtmlIFrameTag extends HtmlTag { + src?: string; + srcdoc?: string; + name?: string; + sandbox?: string; + seamless?: string; + width?: string; + height?: string; + } + interface HtmlImageTag extends HtmlTag { + alt?: string; + src?: AttributeValue; + crossorigin?: string; + usemap?: string; + ismap?: string; + width?: string; + height?: string; + } + interface HtmlInputTag extends HtmlTag { + accept?: string; + action?: string; + alt?: string; + autocomplete?: string; + autofocus?: string; + checked?: string | boolean; + disabled?: string | boolean; + enctype?: string; + form?: string; + height?: string; + list?: string; + max?: string; + maxlength?: string; + method?: string; + min?: string; + multiple?: string; + name?: string; + novalidate?: string | boolean; + pattern?: string; + placeholder?: string; + readonly?: string; + required?: string; + size?: string; + src?: string; + step?: string; + target?: string; + type?: string; + value?: string; + width?: string; + } + interface HtmlModTag extends HtmlTag { + cite?: string; + datetime?: string | Date; + } + interface KeygenTag extends HtmlTag { + autofocus?: string; + challenge?: string; + disabled?: string; + form?: string; + keytype?: string; + name?: string; + } + interface HtmlLabelTag extends HtmlTag { + form?: string; + for?: string; + } + interface HtmlLITag extends HtmlTag { + value?: string | number; + } + interface HtmlLinkTag extends HtmlTag { + href?: string; + crossorigin?: string; + rel?: string; + media?: string; + hreflang?: string; + type?: string; + sizes?: string; + integrity?: string; + } + interface HtmlMapTag extends HtmlTag { + name?: string; + } + interface HtmlMetaTag extends HtmlTag { + name?: string; + httpEquiv?: string; + content?: string; + charset?: string; + } + interface HtmlMeterTag extends HtmlTag { + value?: string | number; + min?: string | number; + max?: string | number; + low?: string | number; + high?: string | number; + optimum?: string | number; + } + interface HtmlObjectTag extends HtmlTag { + data?: string; + type?: string; + name?: string; + usemap?: string; + form?: string; + width?: string; + height?: string; + } + interface HtmlOListTag extends HtmlTag { + reversed?: string; + start?: string | number; + } + interface HtmlOptgroupTag extends HtmlTag { + disabled?: string; + label?: string; + } + interface HtmlOptionTag extends HtmlTag { + disabled?: string; + label?: string; + selected?: string; + value?: string; + } + interface HtmlOutputTag extends HtmlTag { + for?: string; + form?: string; + name?: string; + } + interface HtmlParamTag extends HtmlTag { + name?: string; + value?: string; + } + interface HtmlProgressTag extends HtmlTag { + value?: string | number; + max?: string | number; + } + interface HtmlCommandTag extends HtmlTag { + type?: string; + label?: string; + icon?: string; + disabled?: string; + checked?: string; + radiogroup?: string; + default?: string; + } + interface HtmlLegendTag extends HtmlTag { + } + interface HtmlBrowserButtonTag extends HtmlTag { + type?: string; + } + interface HtmlMenuTag extends HtmlTag { + type?: string; + label?: string; + } + interface HtmlScriptTag extends HtmlTag { + src?: string; + type?: string; + charset?: string; + async?: string; + defer?: string; + crossorigin?: string; + integrity?: string; + text?: string; + } + interface HtmlDetailsTag extends HtmlTag { + open?: string; + } + interface HtmlSelectTag extends HtmlTag { + autofocus?: string; + disabled?: string; + form?: string; + multiple?: string; + name?: string; + required?: string; + size?: string; + } + interface HtmlSourceTag extends HtmlTag { + src?: string; + type?: string; + media?: string; + } + interface HtmlStyleTag extends HtmlTag { + media?: string; + type?: string; + disabled?: string; + scoped?: string; + } + interface HtmlTableTag extends HtmlTag { + } + interface HtmlTableDataCellTag extends HtmlTag { + colspan?: string | number; + rowspan?: string | number; + headers?: string; + } + interface HtmlTextAreaTag extends HtmlTag { + autofocus?: string; + cols?: string; + dirname?: string; + disabled?: string; + form?: string; + maxlength?: string; + minlength?: string; + name?: string; + placeholder?: string; + readonly?: string; + required?: string; + rows?: string; + wrap?: string; + } + interface HtmlTableHeaderCellTag extends HtmlTag { + colspan?: string | number; + rowspan?: string | number; + headers?: string; + scope?: string; + } + interface HtmlTimeTag extends HtmlTag { + datetime?: string | Date; + } + interface HtmlTrackTag extends HtmlTag { + default?: string; + kind?: string; + label?: string; + src?: string; + srclang?: string; + } + interface HtmlVideoTag extends HtmlTag { + src?: string; + poster?: string; + autobuffer?: string; + autoplay?: string; + loop?: string; + controls?: string; + width?: string; + height?: string; + } +} +//# sourceMappingURL=element-types.d.ts.map \ No newline at end of file diff --git a/frontend/utils/events.d.ts b/frontend/utils/events.d.ts new file mode 100644 index 0000000..ef4ad00 --- /dev/null +++ b/frontend/utils/events.d.ts @@ -0,0 +1,98 @@ +declare namespace JSX { + interface HtmlBodyTag { + onafterprint?: string; + onbeforeprint?: string; + onbeforeonload?: string; + onblur?: string; + onerror?: string; + onfocus?: string; + onhaschange?: string; + onload?: string; + onmessage?: string; + onoffline?: string; + ononline?: string; + onpagehide?: string; + onpageshow?: string; + onpopstate?: string; + onredo?: string; + onresize?: string; + onstorage?: string; + onundo?: string; + onunload?: string; + } + interface HtmlTag { + oncontextmenu?: string; + onkeydown?: string; + onkeypress?: string; + onkeyup?: string; + onclick?: AttributeValue; + ondblclick?: string; + ondrag?: string; + ondragend?: string; + ondragenter?: string; + ondragleave?: string; + ondragover?: string; + ondragstart?: string; + ondrop?: string; + onmousedown?: string; + onmousemove?: string; + onmouseout?: string; + onmouseover?: string; + onmouseup?: string; + onmousewheel?: string; + onscroll?: string; + } + interface FormEvents { + onblur?: string; + onchange?: string; + onfocus?: string; + onformchange?: string; + onforminput?: string; + oninput?: string; + oninvalid?: string; + onselect?: string; + onsubmit?: string; + } + interface HtmlInputTag extends FormEvents { + } + interface HtmlFieldSetTag extends FormEvents { + } + interface HtmlFormTag extends FormEvents { + } + interface MediaEvents { + onabort?: string; + oncanplay?: string; + oncanplaythrough?: string; + ondurationchange?: string; + onemptied?: string; + onended?: string; + onerror?: AttributeValue; + onloadeddata?: string; + onloadedmetadata?: string; + onloadstart?: string; + onpause?: string; + onplay?: string; + onplaying?: string; + onprogress?: string; + onratechange?: string; + onreadystatechange?: string; + onseeked?: string; + onseeking?: string; + onstalled?: string; + onsuspend?: string; + ontimeupdate?: string; + onvolumechange?: string; + onwaiting?: string; + } + interface HtmlAudioTag extends MediaEvents { + } + interface HtmlEmbedTag extends MediaEvents { + } + interface HtmlImageTag extends MediaEvents { + } + interface HtmlObjectTag extends MediaEvents { + } + interface HtmlVideoTag extends MediaEvents { + } +} +//# sourceMappingURL=events.d.ts.map \ No newline at end of file diff --git a/frontend/utils/intrinsic-elements.d.ts b/frontend/utils/intrinsic-elements.d.ts new file mode 100644 index 0000000..0e66229 --- /dev/null +++ b/frontend/utils/intrinsic-elements.d.ts @@ -0,0 +1,118 @@ +declare namespace JSX { + type Element = HTMLElement; + interface IntrinsicElements { + a: HtmlAnchorTag; + abbr: HtmlTag; + address: HtmlTag; + area: HtmlAreaTag; + article: HtmlTag; + aside: HtmlTag; + audio: HtmlAudioTag; + b: HtmlTag; + bb: HtmlBrowserButtonTag; + base: BaseTag; + bdi: HtmlTag; + bdo: HtmlTag; + blockquote: HtmlQuoteTag; + body: HtmlBodyTag; + br: HtmlTag; + button: HtmlButtonTag; + canvas: HtmlCanvasTag; + caption: HtmlTag; + cite: HtmlTag; + code: HtmlTag; + col: HtmlTableColTag; + colgroup: HtmlTableColTag; + commands: HtmlCommandTag; + data: DataTag; + datalist: HtmlDataListTag; + dd: HtmlTag; + del: HtmlModTag; + details: HtmlDetailsTag; + dfn: HtmlTag; + div: HtmlTag; + dl: HtmlTag; + dt: HtmlTag; + em: HtmlTag; + embed: HtmlEmbedTag; + fieldset: HtmlFieldSetTag; + figcaption: HtmlTag; + figure: HtmlTag; + footer: HtmlTag; + form: HtmlFormTag; + h1: HtmlTag; + h2: HtmlTag; + h3: HtmlTag; + h4: HtmlTag; + h5: HtmlTag; + h6: HtmlTag; + head: HtmlTag; + header: HtmlTag; + hr: HtmlTag; + html: HtmlHtmlTag; + i: HtmlTag; + iframe: HtmlIFrameTag; + img: HtmlImageTag; + input: HtmlInputTag; + ins: HtmlModTag; + kbd: HtmlTag; + keygen: KeygenTag; + label: HtmlLabelTag; + legend: HtmlLegendTag; + li: HtmlLITag; + link: HtmlLinkTag; + main: HtmlTag; + map: HtmlMapTag; + mark: HtmlTag; + menu: HtmlMenuTag; + meta: HtmlMetaTag; + meter: HtmlMeterTag; + nav: HtmlTag; + noscript: HtmlTag; + object: HtmlObjectTag; + ol: HtmlOListTag; + optgroup: HtmlOptgroupTag; + option: HtmlOptionTag; + output: HtmlOutputTag; + p: HtmlTag; + param: HtmlParamTag; + pre: HtmlTag; + progress: HtmlProgressTag; + q: HtmlQuoteTag; + rb: HtmlTag; + rp: HtmlTag; + rt: HtmlTag; + rtc: HtmlTag; + ruby: HtmlTag; + s: HtmlTag; + samp: HtmlTag; + script: HtmlScriptTag; + section: HtmlTag; + select: HtmlSelectTag; + small: HtmlTag; + source: HtmlSourceTag; + span: HtmlTag; + strong: HtmlTag; + style: HtmlStyleTag; + sub: HtmlTag; + sup: HtmlTag; + table: HtmlTableTag; + tbody: HtmlTag; + td: HtmlTableDataCellTag; + template: HtmlTag; + textarea: HtmlTextAreaTag; + tfoot: HtmlTableSectionTag; + th: HtmlTableHeaderCellTag; + thead: HtmlTableSectionTag; + time: HtmlTimeTag; + title: HtmlTag; + tr: HtmlTableRowTag; + track: HtmlTrackTag; + u: HtmlTag; + ul: HtmlTag; + var: HtmlTag; + video: HtmlVideoTag; + wbr: HtmlTag; + } +} +//# sourceMappingURL=intrinsic-elements.d.ts.map \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..952995f --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "web", + "version": "0.0.0", + "private": true, + "dependencies": { + "@types/express": "^5.0.3", + "@types/morgan": "^1.9.10", + "express": "^5.1.0", + "hbs": "^4.2.0", + "morgan": "~1.10.1", + "bun-types": "^1.2.22", + "typescript": "^5.9.2" + } +} \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..0718338 --- /dev/null +++ b/public/index.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + List + + + + +
+ +
+ +
+
+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/public/logo.ico b/public/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..8df7ca33dbac23b8563a6c1a3f51381987cdce51 GIT binary patch literal 72350 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ȼ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 literal 0 HcmV?d00001 diff --git a/public/no_poster.jpg b/public/no_poster.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5befbc88e652311c4a25122c02af30685bb9d531 GIT binary patch literal 54048 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 z

#oqBJNdu)iMil3T|+Bcux zidd_BaF|>Pim_n8Q%%BvEZUPmT`Nf3QPO-~n)QCgP~|$SSG`z%N?JjzeYFG-U2v>$ zK^3aW_s2h7mv3DCX)OPrR^@c9pL3`2)N}5t<-3rQOuy)==ejXG=w511F|iGQ?(XIv zp75i**2qD-Ii0?_;cRO%pR`A?p$2S`t&d;zBDFR=YmozCs$N^0D_mDpZ@x%fFx?^y zFyy2>7qQq+rm7Odfl4h$RlHvQocC>(N}TQ$|BgcXodW4-4&AMqpo_p)Ln%VZOUn30 z65})WJTN|)I|N`llxcN76a#Cy^(HU8oYVTgFHT9fn&){$#u|TMy20of#~riuMMEW8 zOonC^^URNd>R7X$q2k;F4r|nBgbiYG^}9=-r_WqPb%h{Auvp&>gg|D1`rR!GsUEn7 z{6Lt7I+-^mvJMF-U2uQ4P~zEGyLIXp<~4w=dwQCbF+EnSr3(Z_N!3|J%)H1;Od6-3 z_7X8r)pM}Ux)t*ots4TW*URwp-jF#?Eu<#&ne}VpKNlc(=xqkYdUoLANqlAVd|go2 zbfk112vpTv8LM}LpNmTyF@XZUph=)f@O|VE{!vz+C7U*@p(hb;08a<)*ciFJipiKt zy0}%hPxsQrlo5Mb_1o8<%r)bRZq8*tUOt+9{#oa_QZE{M%XmO~H?ay#cBqxch8-u@ zR+3pVOg4ARWOGT?v%_q`Q61pDpirz4TdY&HAt594=rrcL@a;V9ABh7ruIKTZ);l+1 zMpWOX&&GYxuvws_wOz}jNMn!wmSqt>2}D8Wck>1F)kKyL7)Kt_M%4g5Qx&A~@v4w4 zAuW=*lWH($ucpfbybJf7>LILuv;oDW(-fFDH-o2!gCf^>r`bmOW$-@2R5Y)%_4F*o z)Ls&twTpM7-oMbMJDr=T$V*_6?v~qAEbOh=uJgAM>LnR3Z%|C{fOoNh$t9)U<0^_o*w$abU2n{MX6H&yxB*rnkV)6p9 zcy(KCIj53$*$oEP(JvsTRd*UhZO_Ec0y%2V^y4kZYMIBN9;0kw&pR|Qc>I8%C$Da1*n7~QX@4SS^f;euHooT@WEnTFUC^#f zY-7N|=8vY<1jI!k?8H7G5n8b3d4=!rpu6|~z!2-%>lUn=a198-95LE3JC!~ze3n|B z3fOTQyd!RaaCL4K7XX<1iP%i1A zQ2%aI34<9A^w7~b{4}u1hrTooo1C=th;e&MdpZ?PYhlup*PtWTA zX~jusiKSKVoQx%x8P0DiQ?cxTIybK!&Lq{O12bJARBy>r=M&(C?9?0!$9#sFFh0|{ zkGA*w78)kWcIdN?ei%WZ$##4uo}*9w*-2_5qm2l8+bpaiRD_4r(@EU17c~B)a#m91 zfKT!ifed~bCB7sY0QA^Fb2ijNVk|?PVO{`lo#xIbGq@4m6XE~RC{jl|HYnYrF1Pw>UveR=K z2m$EVO9VHri0&tBoZ@qN@9l38Of6r1C=-E#tW9Xn>=q`WEI@ii8?#&C(>NoEu3&?F zu91++A;|0evuY!EwUCtF3ysE!Ae?fO#G;;$O7qH+q0gEnPHRn^Q<$I=$6hdN;BUdB zV=Gzh4JZ>0x@ODC!M9;>x39%qmdtd z(;OeCm6puwRVH-H4c@B*76ECs6;4vwwg?+3bqu`F9yShkpj!TUmX+h0f{H{L24U8F zqx4)F+f@QvnQ?i7ozI2)f{Zwa ztneeX_&u#5VKm=tmHfj66R=#V?XZn19)2h^Wj9i2igXzEMoAWP_KSI3-1+>xuDg9p zz4KC}nfrA0NTK$M=o|IG`+%tE(^Ug9C5JQs{jZ;XBqv%RU-=p!z~su_MoG;)|KHmQ`{ z!=~z8=`RLbI#V%bT{P0pov~z*535woHDN~T=0)rpwS3dQtmNsK)u~EuCLJ@LX4?V7wS#QKj47c2)Yk%HswR)@V^|}EopX6N4IG2bp zYetHPfqY)-D~x`4|8xD&jLCuxWTGEeZM}W{FfMGm<-o*h0Nc2osrAa1 z45Olk;MpU-lri52&?Qr-N(8NEH9~(f7Q+DqB+$?}TGHZTToKsheUq7zDVXisE!8vH zdQvJvmPUPHN zs|JFJ;-GBeIPeEV_$2H;3s5aG^4jh&WJ^k(CwBYi>YeE3)t^DH|C4@CxB2NlZ=K83 zv3Nx!GV#cB$T?+u27E=t3oj6v!)>2;o5d|Te7NCoP_FLanE@2(7p#V;clHULcvdVn zb<0nCR@qFg(OFtu5y7Nmx+)gQL6%~|5E{mgS9|mnvaL4_ZtGNOlb8kO++Ff=_)-td zLuu(ka4a+#v%ZX3i}iO%Q}jP;AuK7~>|q~dRU5S}(RuK43(yX`XnsR$@ieJ0Rx(kv z2!4ErhXisrGMnmgjl)ZQhx4CDh3zsKyqvTNI`P(dj+yL!U{-VLevORvebBY3DcNse zIT5BYjDZ=J#)YWcNm={vCUSrID2{*@CxD%cD__!E+q27Jj+j^T?X==Z#kF0dvG#l> z^8dH#pfm`PNGFlY06Q*Lz*G)Re@Q`5=`%d^UW>x)NpW{7Vgb>s6VGMoBLCb zmIR&eIQCWpZ%+`L^KQ+WznDgvN6=%pSg3~n)JK^sqC>dBoYHGzke4gKCl4rVvJ;Ww z3VQz)+Qr?DU8hOpnu3rkCBEOQG-Wk6yrax~E8OOX997-KtL%;^AP9^$)>-;UV)d>X zdO1l~du`jr*+ycdC5xY`X0bs6YWl0GjP4=5bn|Jv|9OJ(sf>?b1wqcGu#fjc{lN{? zlb?$c?k0{G`mM~7%cXN;dk^K;E9on($!9cr07`IdIda-L-9Sk=YKaEvs$;hLT#Vyb zioeew@Vs!U`bRwV+FBCl?aAb9C;4wcUq(f6)GHHf8j4WA5_-Qf&;E8eD$#Y;z(Cba zxBgMlA;12(-JtUm`7nG}ge6)(>wz{#uV^?F0^0=GkG}(S7j^3Q+plb)WK`VIy$|G6 z3M+;^>Y>b~_PYTg%^$P$9faR`?|x8nQjv3d*LI!Ct?eI;q-}*8zSPg zzc1i@889_!F4MA}6Fy=()>X zBP9c^O#G2mJ^OjAIs#>45Z7mw9*{GqjCYwgXV3eZWL>TLP@3VvFCL}&FY7j_N302U z@WJE8kW2XQ^dSW^ z{Jm?lYa(gE?I|%L%R~1s?GJ1>-$G8Mp2AFsPNZ8#gHNJJg^yofF!g=CA_Azq4a#r$ zap3$wbc}HYdY6#tyjF>=f1EsdP%KRM>4ozsfq+czXPg*R-z|4pGF{Kd zM6{Wj^aNv@F3QfDm6~olRVH6sq9d(iCR@thk4xJ3ASO4vmY)|@wSV>wquXS%G)etE z95rqrYQKs7p{n&1sbm89IgDsAq#hWYpB zmma03|HS?7IZ8k0t|m|^M>C@C6>z@@waPa z423J~tNz2b3wO#@BwRtKc#hsaphHwi&8CA^oiM_$L&A_);~8m$bd(M&P*N`Hzmrcp z?rt*JAQd+7vtY&m9*wn0KG?IWD}$u_XJe#ZJL+z4POdgH4(^@Vsp|T0&p`l7-8Orm z-G`@jYa%M3kQXVbujIe7bFKpuG-+0=;j~G;hXFn@O9CNy_=$~7o)qB@SR=HMGz%oXjikU=LhIf;UK@xI!o20U8xZ%#zE8Zht^2(+YKvf5F_ zpN#1x^+B=?c-(xw_Q36s%5MS`khiJ=vs1`ZFs|nAAPLX^>aMokY?G6GF>KkAG8j8B zoEc>Z|9GHQhFrJFKTMV{Q_u0Q^mbBqtT%gE#cPb;>76=ulBmisM*8^l5EhQecq~_6 z8091hwBk0{NKt-zAuG*KbP7-X)uWBQP&`I-5>zZ!C&R=^;)G#`0%wiN%sJm{Q;Up@ z{T`4G_&6K$?yGs_xu{E>TG3Gaqf5SKz8xD{6ksGHb9$l2HWJ35@_CgKfv zw{4U;Xlr_DI}~(QME1j3UE}TW3f$aJIHV+pGo9Vo^AClq(ihi7zvzCc@5!F{#lP(7 z*$ypfXqb!FwLcJ}0C8GK_|<-CA@@_Y6e{-fc1;@+-c5YM^@X{o2hE`>#+#1VmnN7r z6tS`$B?^nMCDD-4Mh>G~H(GPY2Y!QjYNLUtz;rjwz9!U+r_-S=m*sO^lYCV7>P5_h zf%o=(5fJlO0lexDPo?lQ+xy+dp6x}4Ksp#jv=RQVmLhfa-@eAo+Twb3`{IGCpbfYutys)9?=#{JFu?qiFljXs8Y>chM9oDHsY4)-{ zzr?GI;asW_U3BWQIp$}lUu4|>d8NCs-$35F(=(=HF5cum? z*+W;_%Iq?cD#uc*UFNp-5Ry>LiCZSfwhITDx>Ko~UpnQP=Aw(Xb_B z8l6Bf0_F>Orozcl0J2EiaDKKN-vYAMODxJ+GW>lZwnaRyo2#9i+^H);4M!}l61a!~ zyaW}ek(Q-wUIXX9zk~w&m8!;GxB0ps~Cq&=W=UIlVI-&IRm4iH! zvTvl0j(&rOc&T^eTqmiASURCH#hnZCYp+66bhHxg9e4Hk06)EJ%96Ua{wVzlhSQxr zhn`#!5eD0W&lDV-&x!}Gh>BG29;HZLKDjP`dPS5!E`7=*&xlljD3DzdZCqelHVb7g zKa%>o$Il8W>}Z~+Ci zGzXi}ugb%_R)*SM>aG>abN~v*)|CGvB}fzGPIo13VP=#fC0l`xxu&78fHR}w1K^|>V%QpABP=rPXO_GqnYpIt zg6GlAU+sMTP1}ecD(24o77e8KqychGZ$W9QR;qA)XPO>39rNWe6-Y>5#lVN|w+{t6 zVLQcDmLf063fYyT+#fwnnM2_gevv1>D2Qp9O734EdZv%CnQA%WBpKAryxiU!8k zY?;^XQ{=n@z7S}?UE{3KLx3ggwz4(s*L*kuIPI@fO?4gHPlK%$#;4BjP2yaxh}tRT zTy@@S+nLsn8V`-Xs4Myuk1`xmduwaRRs4zLlYJ*1;m2F>7`v%r+|AsvYHhekTY&*R zjMg(}XFDxk!8HVC6Av_u`EpW88kRXs05jCwN)sh;^h`W`uKv6NJdK?WOIALgu{3&B z#hZ=tJsmPhdx)q{0ZK+^-*^MXb zeWUg&f<^OGK81Pwf=Hi#zKY(w`V&icN5)mG%}J*9(GA0#1uT^my^L{X3t6n0+JdxmUF>Ta&u&!^w@wyU9oR^%-oo(b&lL6|EvvqOzSJm& zRRLO1ni7trc$9=|M+@=TpDIFFs0exa#>< zZvy-!Vm%1x$0J@fVQza^?E6iih8DMa2?^$i^=j@s5H|ZdR2NBEuTeO zaC#jg7bn*Z&j=PPi#m|6C8$;cFA;(0$Kx8)rs-4SG5t!MKO1Zja|^|IgN9bQICf?*$Z1zaJ)lC$cnSA?X`uuE_IskS=P%!Sk}v5Me2pfLYu^P!ng8ScKe0yr)4z>oN<>cGmW~N|(S?R;EcHaW>_+Ns z!_u=}r}hRA`b{u+R`ZUEIg^_%Ow<$?^Ta*#J zNE4k^?sR*dhWz_KpQ8VzlY4B6*14|WbEZTd$nQdz+E|o^VBOMc17mo zbD2|8LadO>Oj|)z-{jPT*m0E5VzNP)&yT0fMxRnI0W@>?WMfdE+mg&4SOw3YP?;l4QuYZNol4E@hIS)8cm`58^d? zc*N7HkY*8gkq{6Yc16@#cwR)PU?Nq>zpxQL{oSWCq4iMai6-_?N1DNsnQBUF^!YtovS zNw_9Oh4_@JU5K8%)_a}Fk2X1og8NE=#I?fAS*Ri7%W5%gYN%s%p!K~LrTp~0T#*j* z+>NF3pEJdjR9YT++MCL@<+$6zVE1zmXL;XrfeDq{o3*oW0(9*bj3? zby0K_u(I=`dWMcFG}i7{D-gZ28N7TreMBQ|iCiBgIZ>e~C@!sQ>SAi+gKA%7+P!i# zf7w+6%kq*->^a~!;F-|D6oY`2%0rMevi;`wKhaBRa_am~tVgn24ZJjlV`hHBH7N7# zMs>0mgSGM?3fJI}1F;&)DwmDG$Lr5}J|$yq#&9u8cIr~>2kh8EF+Kn^Pnc!RMk=#` zD*GkBljug$nZw)U*XJ@`jr-J$V#3gjv7Ef#X!=pgjw;?@@{fs%$@BZ;Vr&sr^j`cAMoJyC@mCZv$ng z$*-9y-Y^l!lk(!^=^;>2A~3a_c@0(5#gXkJVfK?Q8{;(D;=c+07gg}jvrJcig3|AN zlH=W;No+Oc-{WGJFe^>%>sGM`f{6tl4}M?=unLQ%^<<7aLb5ws-ZD;@X)<$JeMd~w zD?zr$(+{wky;my@J9Un?Bf;n*PDCJQzh zC-KGcDYhW{8{fq(9JH~|bZp(!)iZeqV${u%JFVUvqC-x{Z-e)Lo;b04j=P`nCY$Hp z7M&>Wm-3{$@fFeC&(sf)wkic}N2gtI(wu%|io|^dO1|4?NwYb96{T)YbTeysqXIq z05ip&N7ln#;YT#GUe2aXKe8;NH{qsz!MB4c`wkf&WZi3bJ2$K`QywMuX?^Wauezw$ zH?c5E=}j@=qm4+(wLG98&(5!EivBj#lhJ*+gX#bk_7$*J98>|Ce*QQmLwt{;v86yH zvp4~%E>a8TCa#Fwq3CT8$Yh2g)gUoPi-D!~=!(eFb^b%@H-ZC4+|Se1w^OT^zWRM@ zy^@=L$o@aIOwHsVtdHFsC{LT@CLn;2REHS-YaQq0uijd6bn$QkB;`vCp3jPV9JLnTH`gcxkN&y?>$sgEkHw6|&kNRa zO|q;x`{51G$6J3`|FO3Fpe%#F^9(o#~nNr zS>&qb3j4j&yX+@S_pgXzK_@H@ zVwa4;;M3j-VdW41^}qe+dD8zGYVQ9Q<1%S(6*lw}O*TsSYao!cCc-c<ajJL@y*lFk?y$ZT7DV&igkBAtj5BD4&}QA^+qVbBm-!`)vV3Hwnz7f zdMQh!$M#*HsdV}k5h&6d=a%z}bB2F3aIvfR4G%Z6p>{GJ9r3ABmebWC&80ROm|;e> zmUyQtiJ_^HB!O?NzlVd=#)->}6(Tl%OT2G5<>_Q>b9aUY=V2{vhZW5wD{I-5{txoN zIvd0PbvU>Plv#6IT)h2MEHFpS_$n2ag3qHXbk{c zUG1g)F`s%SidwnHNSS9t;~@Ih?ve+w%Dujy&a-d$qAH= zfjVVynXW0`3T67raK!yZk+*mCjd@v{XTZWi;$BU^Q?;rQy6Cv2^{vVOI>D40u83|Z ze7I1J^h${$zOfgDMO-7ta^|j2-%Y6kgI_#X{VpZYb*y=AZ`S?9uzY*()R|y9gy8$< z6Y75}4gL?5(Em4)iqxNzzaQXe=e$+RE5Xzwj$YB_9A0`!BZt}6*b#~yoTiP+{-g|d z+eBK2#qWdEyoP_*cw{=TIUiS(X>7w#bCi57O5WCSk0{@Wnb(#+CeC{DJ^ zIfW-yGJ7Ao%~ojpVf=+pR0ose@Vo{aJbp%iDztU})9$yq+`^ak{R&14gndGB@~o5& zB9kFM@^a_KN+&^1`csBOe&1)bBmm>oZb8#-DUE*9KZ5kZw#*%S3GrR0z%nPZ&)GxuLx#p-8iPEQ&hqF?0`D|VNf|H0X(?}tO+e1z33_Lm? zB^8&!j_gOJGvn&DIusEF)d*(2O z@ZDZ4hB4#w5&NTR`CS?d0PAY5yfvx2Dxb!A{l?|1=tnYtS*1KLdzkU#EIEcWs(tYB zp+54&Uwwm)>v6%Jq?@DQdD$%vJr=7C`$KxQmC39VVf#hl*5^yYnj&ST2uK>`5+6ZB z7e&408kAcx4A`zGw|41od#4MPXR5C9NK4pVHTB5fRIOF!h#by6>FR^KDEPXE71saN zhYn7hekvaz_dJR651k3i3DR5-s`qRoCR(eE8MrCEeyF-S23y(+{rLL#{j}oh-oPvtpRdRJV2rAD7mh( zKxznJdu+*f>nx!nmnD`jJQCl#w;$d-Ve{+QT(H2PtGVu4v}<92rXAyIQ1zh6@8*^{ zZ%~=CNoLazu0avD_LC6Vt*UZ9zLuA&^(EYlD;F7;^nDnbT&WmifU9d^06!z==?Ba4 zgI3=J$Qi#1gC^LVB5XJ-7$YJNCMd^O;=>BMtHs0nM`!^mRtT1vhndS`>IphNb$WPcbGk1Jy?B(>wt;zbN5sVW3H2lCj57l zpW|z7PL|JZYwmRQe4xxJYZfUw`Z8Ilst^}|^=*nr3s2vU>sPH8MU} z*#z{&bkUf^UeJ?mZm!;J%=Y_)+M65YS^E3Pl}8C{k2DLZo;IYsH@48ftLJPPtv!c> zKIkvV&>a(6m{>wq(FfJM9AUVaM{xyK=f^5RvWw$aAx}xeJ?oC&3 zNOndyc3Z6EtF8u@y!RnhOZX~$J*P036_ zOBXB9Smomu^8<*JsHUh*BImshP0oSs`e`Zrw{NAE;QYg31DF{I2$+ng@a(HHBbAi_ z!o*L4BfDKwd8tvwvS!fal=YgN6~0~D#`m`DrYW12`~sCizEqV~FFNK;=*m9g8(pQ4 zg;tl}aYdf}?{h`I&FyVaJ`~AI8fh`ppV*Gw%nQyRNvd`BQi?P$(aqx?+UVR_UJ=IH zME<;CEp}w;@`L^pg+0IfU6x7|Px=I#V*9MYK#iAYx)mlwQ9K#@DJpz2axNLA21uZ6 z1B$T7dO_1>cj2rZ7P`~yY?!ARjXTgF_6bpI(?DZBe^()I^+5KC`y~@^qoMtbVkIL6 zQn8IslibUTg!JucbGUd8bisaT@w#lB8zVpzsN{X0$B?#Os}DOXC@0*rM{FX?@Z2C4 z7}wn+RDJeK{H)erH#+qJ{^uH?9o2K$YM$rFOuL0|0fdJ@Z32^_BZquwajMszeI+~q zB$7JjKtLljS1IJ(L7b<77~%2K>XMs`&9w^^R*_v8x0-D5M?3!ONSL>NX6cmWL$iiG z&26O#p9dq)N|ZbLz0Zitzhhu+$04|e3(&WpGoxCs2dgnoj9~I+ibi2>_A>go>F7pK zs?ubPs)$Y0!|4Zn-Q3gcS-m2(G-Zz@r>>92a$LJ+{bc0&%jmlfih=Oc`ib=fAEn)E z-|W+5|BP3w%@j!6df6P^4{gP~0x$-aB~LB%JZ8%PKBMSoRZE_n=GZtOi_LFHdt4RO zrv1%)IlA;0Fw;2aox%RD+)IA9SMktB%G&Tv7MDv7(G%ZIcJe@gVnfagS4H~;Ti!KC z=0sr{&|2g?yrFGv)vo&G&U(qUv}66i_ICAtLSo8 z@GD;t(Y)*;dNa`I_xrwOM89HAfp45lvDfH9^?{dg{v5upuP49One2&0Wf~Pt7(J>v zb(3whiaykS3~8fUQ=RUC=I;@5z8e(=)zi}K)^aeTX`kr><%OV48LW)8w^}|`wN%cu zMr`pwf+@E(f3aBxYgPtN&joELZ1A7`Ep(z!?Tw-f>nmxGUZ>iddYa#*WV5^^*(O{D z%oJs>HA{>!wdSOh!uWG_YKKZx6x$%F1e3y7Yg8iNcqpvFtN5z)nUtPE2lWi6m z-GFUks_FQ$vITXsk3Ktho2WUBo8WP`-{e~As3@(7Ty>gC)yb9Ifbt4-t7*NTD8?5W zrK5pB-Tbn2Z?HSqSxG$8B)@bBVBd_IKb0v=(K~P z5?qQqOpAsTNpOM`NCLqvxJ-)|5AH>ROL2!5hv4oMhhW8>zL|5*%-;Jw=e)mn=L1=J z!upV8t!LfqUf1=%oyRXqMp{y7^S_NH<DPevs67A!bE(CQ7EG=mC2=4VQ6H1n?|qV2-Xhea^5Mm z2%9y0m&n=NXtFwI6?@iVTz*jZjNsQ^%e}^>M$z}|WBTh)I$ zblI5vUtQ^ge_OEqTK>OW>47*et~uePpa{Z=_NYYSe4PctUNrx?0yh7VR>u)>Lh07t zf0^_Da@U&^GgS$3B10*YNmeQV(O`$X8L!Iv>3k_R{PZdlUSdU&Y6O341b3x}4?F6#AakAv#wI$CEz1~XO7 zMdQTMpdSju3a9;S;)Uxu26pgALiJTI1UsTweDmtOyfgU=hWF?$>&>_&R`0t?WcAgv`gbm%#zTi+6cW3=s1_3FbXo_&p}Mh@wVAa>t?F zRgLWpPCn{vf)Ve&G`;J(immgahDvKfMpmjSu7-;X==6k@vd8qk9Gg9E$f*v+I`HxD z*FJ`Gw%u2yRQQgQlYW9c%XPy4r-m;^SOq%D>GRT^EY*F8y5!>>f$l!uxIz9_vKW$V z?!&0~6z}}#y}a8zcIv2yY=R^YHbk&F!-%%)u@IuWYbCrMAoMWEp?ROSx}-5TZJ24^-%_17@#Jt8fJWQM$I}q1titOR zo@8lZ9+i~>XNs7z|FruYXPLxkWG=p?E~LdJRiGsBf>avqCEw10MAl zm1t%Z^nT*E+3Avx?yu_2%!O(^o5N{|%4H5i!@mg-vw`4Pq%zwPQ(;ADAT{3_aMxC- ztBn&|uwvFsJnR@f!Z9$@0?5}BNVO|AThUS#Ed)gubK4Zr#sbzzR+Y;t z%Fwxn_zbm;G&?Le^pZF!uGB63H#Ut@%>nIL-QN9V>&saojTp_iD8;y^55#B({xFxK z@oS-c3>!7Q(b#xGPG5U!;NIs_q=RY)Jao#>66o--m~HG6pxi?sycX%Pj4^9YKdNs~ z)wzqJwg=Tw20c{k%%ujpgQqS$Pmdrs@M%qEq7ayF9FX(#kjYrJ_8CcEuzbIlh5|xK z-JBm-e^A*IZO*uEj{tJ#$gmk!Nk~#IbBIIy^pjW74V<0a5ODZu_aC^4yhYqZ0fH*u z=BRAXA=H06&VxnyiKg89nFu)}%F_!nU{*meEkB5HW6hYQ`9@*zB0#D{nogaLc^o*f zodi-WEk|qb30Y{Ys3hgo0DcmbtIg3{dg$GJK1bMGt?mIy*i0$wpGKzGa%aGUP93!T zC^41#<<(YHK+3}^E;gxbm_Y@7Uz}y^Xos|ab>D4@lXu$4p84c~Kz-5xT}6|tPZA{` z|6O0GRIKW!ZE2@Q(9vT*3rXRNhc{Nze9lG(5#{|%KYR`{ha&0?`7bW-3vO;;YmJKK zwO<^#-HyB^q+Ux2=lTEM`?sRq4k*yCKuiNWGYqQq?O4BT&HZ2C_gs3{+Ebw8? z=r2P>qjPTYwK(Z9lNSv!lkkg^2oL*JU?1yAOnt{pL}5fFT4(3pV**C{ErIhngipsD z-LVP5iloqmvyt{wa2ocOvr!jztl)QJu}qeRI|FT6auwQNFPoYQ#D+n`8rFgIqbTPs#;SP$|NU4NxCO=8@*Bdo7vWIh(3xbdd=PVDFLmwdhU z)5@A48lrfBYvrhFYSLPVts%iF>;PDz`ap)$1USXJ ztqiS=3!-hG=-(A9XSFiW(&~nvMh$OCe%S4kx0tCXPS(PNofTv!w`nSOcur%ga+yY4 z^mi9s-TWzf)AbuHecXkbx*|I0pwb~#E!oF19$P%!I_ZVi!(pwS2wEnSxb|YvlQQ zZt?RCkGv7tI!qy8C76+q5xhY$(8G8nrQ7?TOXa4D#}V@8Sn@}kqxVP9II)4Ry6(e0 zb$1#k){>;hW4_K3h$P1-c_6h0_ehq-n>YgyU&{as z_dCzJ^XA?oj_QWxb4t(pu;`-m%@%&uE~rV;#NLa0x*83FxQU%`@#fDB6g#|Zn{2T? zQ`FU2KtU3dx&zxQt!SUWpJ`@5RHtkEv<4kI ziw+i@cx2m%Q1n8Fy=2b{k0td|$-eCC!FA(U9%2wEAXp4@H4 zQ_V#SbELR4nC^Ww10Vl#Di>CAuOB1Ab9}OopE)gTZfQ+DS<)YiCx(EhSy|ViUyqe7 z)AMK7W`1!KHSlkx>;EAuwYMpk!mMY;p7RL=i5(QGsx}iEc@T*X2AD1A?tgK5%3oOk z*EEd42I6&mrL9122+XQC9EbgOYdH8u^-`zmYiWgq_S<|6dizTpwD<5>V8v1;kvAGz`0QZa%xg%^(xPaEVT*H?Cq(3UhYUy~w^i?>V1I)4k_ zw5IN;LghUbj$DJar4*PF=EP+B-o1&5e^7czMv|RqBR}t$2ev9-l-(LY?s-!4&8VJK zRmD3!pFhQHfzf=TD4K%s!g-nn>1p@=2mDY|hR3r)udwdbRZ~_|sutoUvLAOpbh8p+ zBmG{2$6qhkDwFip^*>@*H13TRL;L1a)TjtGRDZfE?LBqo7Y5FT2*Ee&CS^u%OcOD} zd|?y=#pOXK^A(*5Cl^iPBupA&e#HjKW*+yeKV||Qn_ex)U9lL~AJg%laZBlXDO@IP zt88^3&tfM%z^@Q^zQ;*n6`l6Q1)7V-s+DT`xWH3e_X@LYlmKG{Z?$x*ZW~`jm;WRP z#cxSjeDOyqWPV;F2kC=DqNNH_2CX+1e6^(^gPZ6%n(vbjq7FVBWKR0j8!BI1cHQ5i z!`7A-Bf9+08>NDqROQJ#gsE?Z5iNs{Xv8zpUqLP%ZxJTE_zjvj;h5DcYuVQXhqn9d zWuG`w(1%deaqW$!|9Im@i$$QWHt}=?MzngPyB$HAHJiU9p^^VcU`;ElN~ELuf~jO$ zBPBKNRF>S}#AFhBVkXptZGuqs!> ziJO6J4cJwFcV?VB(j)9wO4(O@2XAT`tNK-i1S}PSFx5 zh@!zEEV~Yf1Z<7F2w0-F!~_kb2wgrz{>H5P|6C`1B&qe)HVr?1rwRlXQg)4DQumDS zjT8uv4H$cDt5IT17$Z)n7NqTI!gU`A9M)EHp3a5XWU&oDKH}*8p@}rbouB|(TUG;l zR+uYZOLxwdFDHd6d^siP^%lOxOS$v%QA2w8dy$ejv75DfRJ$FOJJoPmT!c|sE#fg^ zyMSR%&fl(&HB?4WQN2$>fyC)NpdE6rX4Kc4p_v_r2x{Zpmpz}Cd8#tRf(wq|E zN-d})4$05*e3U%w)>fh#Wf5xNQC}Qor=&C?X-@z*+=bKPR|Y)8?vXX)6Oo= zg%upE94Jf-F7MiINj_Vs2OW~J;PA)zreD%21A{4=@U$VZB;?ueZ9agl%96i80*&lK$ zU`7`jn8L!ul2I%veEBp1=GrUrcp{vi*gJ>BdfMPrZ+?UCJV*&c`BpL~Z0oi+m#}3M z#dDx^|0h9Yc>1Mnlw;wUbY0L{3-RqD&|QEfteg67kR)KSi7Mg5A`|`oYM4qVSOY?to-|>040Wma@;(4xm*FQg`_=nT?)oZN7zDK+p?iq?XgJyRsaL*+XCYGMMI^A>? zuF_p0@e$S6UNtLus+ocj8KY3nn{&#NeLK|d9O5k>>Bo{m{4~AHHEHTv|3DK}tYv+) za15%mG3cJocrg0$<4(41_1TA0!astNlsZf;$Hf%s3R(@6C}e9+czc_gl1CuTtv;ryX_*Y7ywls;T^8sVFuB?vn6eD z?|EbSuHh2awDY1Y%eAHVO45T9^OZGowy=(}-+rVtN2~EZHWTh#V}?J`1{!#2(o3-i z!e7*J(T}C|TF6M|GUkCvlI_`*fHaR8TT??MIga5;~J2&2s0NX`}*5nvRWNW`2 zFY=VeTlK$bG-5&Ii~<=THbG!41k0vk02xsm9cbFt=)3HtdgIu{{G62$2Xo&CIdmng z@x=;yD${XG%ot$0JW-$!#psX4<66K|K-P885;E} z72^G}eTSj@0MG12cuk!4X*gp-5}Otz1zl}QZ=qX7!YiU&9@dwPdy3GW0`K%_obr z_1g&b=Qh-^&ZVTF{ILFpD4QY+cYt>1S7>kHkyc zC$`m{Eb482uSF<6Y-yaARGfj@TV8j|-~Vgp0sN1hM|RrNTLC@dGf=0G^zZ9U)E6#< zCwaZg%{Mw_9$)8{5=$**@IM%~i>?w%ZI9GUw_kVj=6D?U{op)a7TlyA}zA8QLZ_(0+NIe zve0eidUnYW1FLcln_e-O`6pcwY*oa20%^(X-fP&2Uz2Z~>9^_regBV&843NExH?*>{Wv}X?0sCL!1d!=2-UzGW>K~AXCUzfznc>FP;Sv z-OZ}DtcA&|OZBCxjLP?*3;($8CC}$(t#Da@wUAcf&^*n$&bQ}C7@ql9P}AiTctR17F)ds6^)h+7= z#le_2d1Fm8tLkDkpWWNq=KEm=YORZ1G)YGhBPwnv@?&z^&nqCu@tjugku>D1IDhdM zE4vQ~8Bm!3D`(yd71J1vhz8`&`~?qCZgwQycVc!J7i*z8io@qG@7Y9rkdid9D8gBj zj9KVW8}Zuw7WJdyoy8q@38PmL+T>O2(k2Q5?V0s9&$&f<8PW93abp2Py*<@)n>Q3& z?;I%=xH~#ucR+jWwL;O*;w!$IyIIw7!xCCN_qJHHh-&SdkKw|!(xhHix7-uA(Zi27 zfZlK0Z;aN1&Q(L(+CvSaeNvSLu09*LWTUb^t+lW&-PY6fh29u_j34&Sg!^uq>JSiF zU1~~k6y1y*@bvK!=N&JuvYdRm?wR)Kl)^Ih_`bi8&t8jh6(ZN(Ey`tzvtzTkajtKe z1VnRp3pF{<=u>UtS2bgWzU^*R<(j$fh$v&bs)O2~CA;C7Qejw0>~Zty$XsoOuxMwB z{zf)9j;^e~Q~MGhI$RMd{Uo^lZssE^CU-6UlVA&U*}bsWdcFVc>hb!q=Z}zf+Mw;! zaAbi939psCyN{P*-x^#8K9W|MZW$p>#m-=wNYvhb#Cvy~YGURkgM4RkU(jiIFpRQV zHxc_h98)GY9AjH`zc9vdv!|&iinlgN5Xq|U5;w`R*f+1U*~$8MBtq~H*>3y|=gbBU zr4#-KxKF{>rrObSi?irTe%rWlo1$1|RZ$%gJVDeV*zO2urxwA@#=={~x7N+dl+rYT z7wU%_-|-o(z5R4_UE;g?u+?oztlY&Jf(qtoepmCC#6BQdLG$M z^(Uo)2??g8q_mO23roi`cL8;YUYC*`ZkI*4+)M1((=N`4%kFn)Sl(NPn#K6ansLZQ z*)hWhy@}w;PZnKkGLVMzBXd-)+Mgc*U|l;if`r=8%Ods2qWS)O z@V4v^@9}0UpSKU42@o0{Q40w;m{OESx*?uq6Gt0CTt=9h?mhQ73*B53xWQwS1Pka( zzsa>c+@jUp*Rq88Y36~jfy2@6Uh%FMVG)GTlFaNYkiyEXg~r??b6v}tXCmVU*-Y3r zyH?H>eo%k0JwR(zDOB^gl#U0sv@qA$Mrb}3%gthwy+57MGHg|`C^7TM;@sU(|3X}n zaU-^JIi`-*KDIuIdpOJezfRG|S_G9eqfh^5cX0WgqCzvT!}w7W?0eiuK1H$W^$pxBfIDbIr{ zQgFb5EQjQU*#>W}G&E4xMrdU-V^XH8LO=d3_d1&0F>bNf?pUHJa>4-o@L}D@P8`EV zLzl_(+&VhFu_%=8ehdDm$88U?7hHcz)0aXULXJ9&b}C*b3^!`Ro6PaH9;phxn}6c% zPF?;NZ&&|M-fj{QpDS9C%b;^=G&?$eVmUk*Z`Yz1TEek>bjeh6-&L@c$@9IZdDY@x ze6+WB*|$rD!#$2|-LfTbo~N1Cpg#=RMSMoWsW*S@z8$OgGzEm9;p$8p{r;{;yPfF> z+jiGEUu||#%zA{wGy=X+7Pg%^y`cHACx7WcbLmm9dc8|?xwRedRG*|p>|6%f3Jejy zeXvA#<80b;W}|u|E5tLRA99}L6Y(Wv@11HNLS~uD-+!alisntb1N&7Ycdx)jfj+kL4zG^+Zw zf>nuR3SC)8tg>98mu!e4~e^h&rO#Z=c5EPq%A%0Q%!&~j8+xB@}&7zIC8;s zP|2E0$vu3=3sg?^wr*&4@AoJgTOt3nRlKf%H#94#-FVj3J=)jf6gGZsHS7!yZ2(F? zZ*ojUTu}3sb~|zwocK z=@kRpVld22ME(!t7T8$6yPYq{*apJ{bhV^;d#~nfma8w5JfO~zyX**lsXH;m$NUKO zhgw}jr&E_tNjWsyv;r7Hs&s%rspCDr%v^Fx8;kZ9Cm9VKs#M9&OC?7L-KnWS3!4h# zNh#z`5R_@o11H6mSQIAgm(``=m`EBQhu;2yEvr1DCgQZ_?pMsUQFV$>oOcVeC>B=A z$~ntXi2oP3PEY-R!F2@x1Fpj=NpZQGb*Y@|9;=-%<{!3HO;(rv@MM^WIYm21#wJ_> z)&0IfkYrY7Qy_7FsM}2JMdI2yHIapDFFtY_uZJKFtS}BzQek?r3`=AagHN9yjet6G zLUB21EA`-9ThN!Cm~EcYAcc2Vo;>DKzMfh`|)aa z@{!)z9?LS721``~{4$uq{-2T%I|hIY!sjPGNw0POj0ZyYQl{VJjB%1I47@eb8b|1K z#QI?{7P98AZNB%$(<7}p?1Aurm@KC3F_^)F!OzRC4_o8J@QRYL6)mD>AW*3PW2Q|C zdSUd0Ch`_i6UEMct9vr=?5{dEk>XS4Wiy6V@gEB#Kbk7(6#{ch3+c4}DIl;+OTpO+c~q z`pV90?>~7W-tjcoOsqYC;)L~em|TF@szMWp}oH&8=pb|~Bqk(2##`YvC>(a?QobHUShpT|BzOB{C4{9I$+OhnWA#99-@ zLd&_jRqDcH*gd+F#$31y8d3G~gliyG4h6jvBoO-;ANXLbG}Prx_(B`ufhD z&3p&>Ilc6)-!U^E#f2241tVWfe@Dx=$-BC1j0=kBa+}Yy+|g$=r9x(mKN{zf=-fGZ z&J%a59LXEI603D8K)ecg3|VPe6DikzsAj1P8Z4KMWzY|V6kmXBqK1n;#r?+lsT1Pc zG3Ei80akepPofv35k(!8PpjP_Dc`TFV#`sf-2nrfn|-2_2BtS)1U7A4d!X3h3- z!J&fXbM{kyvoH%s(@8OKc>iAWqx|D zdY`JOcZJx{t=l`8Kx@Gx zJ*jBxUlI$FWOUP)Pas7{lH6&wq*PNj@5*Z0_YFgytUo7SiRz9#v1*r3`p96!$kol1 zi`vukd3TtIpmb;-3W;O(tp^&^Hn0JfvTOI87gWA#Y2bE%7bGXK(piCT=!W|VEg8Ex z^gkryvU41u&InltK$!I%m^j@F40?8#A5dY#SgH&mlQnm6k3N*!3tCg<>K#`qt7dPQ zi5*Wesvz%@D^A;BcI(2sE%YRVwswCKh==)xhEa>g?$V8K{Ur_^pnFW`W zXxa+zst!I}eZv`fG*13y;zZehEqZ{fU1Wsj#C3;G#gx9vN#T`_K6RO>KVUDZRB=G8 zlfya8e73>T3r%lYCXOOy1NG>uFZ73aXI_fm=2wm$JSV#?c*)Zf_S3hiBFkK^f~099;~cXQ@H4(sI$|-DM)qt3jVtkKTczr!U5P&4ok1$RO3pvZ zL^zTghY`lq%@*b0(;14^+{vUp@A6dhOBB>Vt8TGuEcF^5hgL$+^!H`2+lO11H7y*J zy-S?yy|5Z*k|=o#l->BNCAKzriTV5_-5BLUsa+3zmDI3L@jAK&qG4R>*$tQUo4}no(7qo(O*Q~YAS#Yer;NbXV;ho z>E+omRL^pz&FwKwG)1BzV=-xg!`Hb2n3N@)W}CLZ$XJ6zE^9X0V;0B=2riZzLWeHn zSv*Xq;&1+7{H??2Y5kE$yLY95+GbAC!pN-I*~AMM(j=F7eT}Ja@l1;m>_o9B*#yWG zsw(P8sEU|&)q|3foP6-GXr#n3s1QVC=!5}RuBccG=B!7*8(b;`hdszwVVh0jy*jBl zpt~KMnZ3n1w%~{Z|C#*JGC6ed<2d7T`aA+J>D{&dNq`bvJbB=OP4Rgc{FC65&xqK6 zph2wb&Z)L@n?oC4D)SoPjsIdH2|d_@#~%YKo;JrvFQ1plrI~3vM{}{7$~Y_#x@d6N z(7y~N1~d@$jg%;#-GmO_AF6j1Bju2QE9Z&i)v$J|CtG)L6m}`kSW{q!^CKK%vc?O= z7v)FvJ-y^>DqVcJT*hcXZ3pk7fhcjJPOB0VFUab&&{OmZDpus^3Fa#JE*z!%gszmD zl#4fMV*_;pU@~}zRl&N8CN3Y0ZE9!erQQcrvAqQ=ad;O4Jj~JFiqYt|%4 z9MGFNV6&2c3nHC z=#UpcT48M3y#nqR=bg;NV^Sl=j1+vvg_67(OcuxAHZOhiUXP!P`0}6gNw(4ThgsUt zw*F3`yi*NJkDb*aqpqv&DH;`pkQia%!w3b$<%8ZzTkvrk zjg*8h=dbfTk5^0iF|N6*!nK2Sip{K4t@5@$FAsev98*lsZ@H3bs!NLuwS_re1njQEBCI#7;|1IGY_ zj=AR774wPQH+puCewoqkN*orm$4G97tsC8IT+Rw4C3CHAI(O;Tm7;X(=`fL5-+6kk z1E)Apkcazoa)fbrh)c-(X(1VnqbOFB_LyEPwrys)-IZ=*AQVxq_pUy!Q{Gi2eyuK? zMJ!fd@X$o{AO)H+OHjtIg#FCMjijDn?F0)dv^Z0 zXCt$|=FN$efPel&P~sC7WYAYe#{{%xC6*FXWDV%`?92^{9(ClxdW^YCrcTDSzpje@ zN#LYUp5wuBAc1`m_^BbqbKtfxx$wKsAAXy6mdAEgVxg!48@Xr_bbbB?0J8Ktm#_9n z-@-KPwX@sf&G7tq1Eq&SyIj_lHjc@;BkqF3@EGiTLKo%A3=&##=WKe*O|a>Q9yix= znd?ByiPLfJ_H8G~K0O>p>GGJWC470TI`PF#oFvhUv6x8M^vskf?PVsk=v!&P>`0DO z!oftQbtRhx(=nrzFaO9RP0Q8VPa39d;|jee7SGgEe-fw#Hr93hNJu}=#k&SGj+VCMR+nZ2t$p$*Z=TlF z4BZ&y<>!shi_}zC*Nld?mXws2l)lbQH$JtEEoJlY))@Z4+2zeF_8!d#~{A+ z+l{juml5Yu%L&cq3ZT`Mt7m{rQ5H?^+@T{WPJo|kk}qv&C?KDe?+u6JR1M$e&FeN3UR{1nfFDkCn_-u9 zb+`1cv&k3!P>uy_fLUY2*}tHN7^AQLaeqS8|NpRyBC>zrof<4G<1sD zGpo^L4??3a`nrQ8*9K_QR{wLrvF&~OlZFJ!35z#{sCRkY8{N^=EDOJ z{r5Zn)r0OITA{x#{rk`V0FV6pegE$94>-Z!m;Sl&%ZNj(7|n_E6%bN0J8mN6K*xB- z88vU&ww5H<4N1A;kin*ywz!Rasg$$jsX|OZ*kJN=$R`Dz<70U>j5gIzwi##7mAKjy zmb7=J-&l{Yy7knB9yn&Uh?m=%@;M8NYIT8K_rh&@Zq+Xa?VSbKxM`!?QqrG)NU0#Q zK8&!|cGJU+m(h$mkj%s`wOH8XH}&a*Kj|^KHE`rGn4*(G!`mj!BUq>68qpD$Hw;$s zqFhEj5@#NZ&m7}m*ZqMsRzC?IQ8N-HG@X*0QRRIvyamBci4BARO|ze?e{c`H)k5>E z(b7=ay31*-)~33!mr`)M?!T$DYJOW2_zJsjFPU}E=R{FAj_Ro+GHqPD{YVoLH1J%A zcU4Qw>%m%Y&2F4!2SpjoiT%^u~|cMQqS3kLE*G@xiSo`LOsPu}2h zsP3GHwA?>`zyI96|JN?>pD+H^rg>Nm{+w)Gn!2Ux)3cHn+7@jcRCZr?{$KxJO@TWVBbnwItqL#V!c)yd>VSTx>Jt^{fV0J$HC1 zSR2Y*MjAz$#Zt~8^s=lwm-4*Z``xI05c84?I{eB{;k)5)?YOrzIqqPGISux&hsb1c z)6`X!?t{H)EC{I`fqG1h7?JgsP4$mJDSUL6JW&l1b7V#Rnkk-E>=atk7}P%#avFsQ zB(8ByvY!|hjkW%6U7K|g>Jh+@lA7jEBg%c$(|IWOyM8drTJo-145+a^yV3R~_-xu) zpro{kfze_vE-9fhxk8GvdlCvh2{6cg1ntyuY(FW! z2TfY#$ke)EI%7WLYSb*VQi@XYO^@XsEUFRR*{n(H(1f`!pgQ$(R6Ii__AtaEN4-3x z?Eo7fQtIJUFdNTD=tCSk`|vPBoAtg#=S^g(wN(7f?X)oZjS6AHK%ZpuL*T zjF_1N)O<`I$6jCqB8*qZM%;vwC&!3{8U1NsIbF`r~fp;DH%)$LS3t zZ2SbAQu&gNsl-xIbu!U#*7=hS+ zjF<^}gKEbp9J4IZeJ8!k)TGk>(ukcI>xw;79D<3UXZzyNxVNA8$+SPhcWCsdhv|03 z==sq0+0~^0AsaLv6miw~HDjY`m-9{M>=!qzK5~?)y$-iia0ou5`XX@j@}N5+t4RaR z-Po~2R(0n(&vw<&Uxj2&^MM}qTYYPw9$8E=;oCoPTu=-UY@?(UbjHXX@Rr#1@_#ID zaQ}Z@0)KfoJq1b>D7%!y@W+LZbh;%z*CZyA=(Sgp9D&3wYD8V%ISZ}N4p)98?yb=v zRX(>-k-4BDs2N2sBg@JPp(j3)I6Pw$vZXxYmi4FeOoW8?vq=>kXf1mcHH6%+#d9GU zNNv7X&eU46C$;g+++%hB4)byYk;xT`aaczYoRw@ zEGrkkld3@DCGW0pZVo|gn8*=ON{22WxtFE3uenuyzQRy*`hEMi3Hcqv!f^v&-spF( zV_B(UklsX0)K0dXakvW{^N1@<-ZRG|?&k5QzU@)piUkj~=*bWJAWUyqiPEgnqY;KZ zesa2im|WXC&ZSiVOYSsgS+1)B@^Su2jf>2gMNki0jA9>e(z}3S1X4N7iJ`E}G`Gz} zR*qe4o`LIvEG8dHyC`_B5vGD2`?0*zm}eiFp_Wm5&9czVd!GbZR+t2IZ_W2l>qXu3 zGK5!bX3jcX-;+#JDs!Ofh$VxWg(F^AAvJ(NZRC!bf#e0XRE}D|yl2OuglCKbZ4*sZ z742eC!^2sH+G0p{K2vrg8#@DD(_8*P>7*!Yy8i|9M#@>$9~%-5o2Tm5%w|023Amf!mXEiInXTCGOz;Jlgdhq=uFI%aTd%l$` zMX;iLv2(rFtm5E7-MFEJ^o!SFW0OCCz^z`ii0db#>!_pneC(;N-5tIk|9zm{|6k&B zIu1Rmw{!MD8S4!Eu{bOy;{i9EO-afxCcB3J@Wle5+gnwb^C90|^hkV|-PW^mz7xH5 z&6DW>-*fJ!7U7mu58HB(RV+K+lG_zb1(|XAt`8I@b?OJyIjb3CvJcS)kuw^yhT^#i zlXW-0F0CHv4V2xFQ?7}epz1qi5bk-IUK<9BxmCOSdtjEbRZ8d;Pd3&`1RG?}ayFF3 z75dB9;78$GlyR#Hi*NSFnyoKgy@}OKC%$Zs@aT8|I)O}hy5*i6(6)E!EY-ZbK3at% zpLV{(vy-4zmlr1E)jcxpAim3rha!9)s?3Y9$@XyC8oGY0_QIMueNDSZX4q1jmI3S3 z|3y2$6YMc$6K}Ca*YptlK=6o~nGV={v|8meJ75?#*X8xq4_;^K~psdy_E?N_@gZ{P+WP_E9`FC&VL+lmv8&Zm`fgd z^YGW4$B4sN4(2j`ZG1HjVoDySDk^bh643fOqjWRtBeh=!$utu9bP|cqOnO6cv=Q`y zq@#U}Gj)+GHm`aV^)&D?IaPCn9e<%B%Ajb5OM64i76Mx;WOFb@BeL5`1~*1O;TDnNu)nXIA3+FJHB#n1@J8Dm#jBf@WswS zF_A|Yhjy)ETbqT4ssqwZKEoAD#)oa(PR&T$ zQqbgSzkUFFu%SR(Qds4tRMM3L11U8(IYwfgnP^Rqb|@JgOC#th>&i|T$TlFPSI|Ll zNZj(OXc&b5#TMDP>ozfC`O2XOg~LmD0Oi}b?N44?0VP_qz{I=}D6uOcEv})`L?2f< zp0Ht*KV@6Fz)ndvWiiS%u`CK0SIJDJP8H~KR+p7ysGYY8n$Ry$5niBl1QXM#Y`VoiI0Hsqe2QULJmvX{l9%iAmtI$Z@gmYqYhJGZxttsTnHQJ`Sk{)K(q8xOs=$gW)^(19{ zd7@!5?>ISRCj1x`pIg8vSxO0!2%8YqK=VBPqgj2E7u{p0Ja3KZkwyYcIk*jdcT;Fn zD;QIS3=-o*b@GG~9c_Qrt5I@O9n6bT;Qlt`q2|9fp!bu&WbWWaZkD@?x#r`qNFrg% z+P>CO+nCW`MTr4z3L5OtCZZKat_$ynbm7bP?{iAw=v?QA{A-_PpnN<}hT#KEw+@U9 z1SsqLNn3xNPHX1;rvOI^)udSJv$voP2;}`^)ymOYH#y|AX02N3473=8Tq_*sq_zAW z-8h>f3bHi;klPI|5qmP=lTs(IbtYBHXWDw0>q@-YS9_fp^*+T2(NJ25IMDv^c?PpW!2tAW5&f0pYLNY&!K zpe(D5Ci&#V#Nil*P^rGI9#NJB}d^AmGQv7G%l*2HE=F7b}9$)WhY zkl)@o9%e;5zc7D>R(wM@`>?~8bI3EtK$xqVPx>ws)|8RQJ~9K+`xR)SdlSZd9qaax zwEK?NvtVW=J(6^W^?l)^!uWME-q$k$BMTuh^Qm?5vZmPY|HG{N3k>_OZ&92jPD_f@ zCxKIi#sa|##Pg>+FGH0aI+av+lf7(wrc`TTUk;{oy?G##3T~v$()vZC^byK0K&CIV z<`I5QyF}4I#gx4(Opk42xpjrsbz^5q!=v&1@z!fs(*M|Z0ZEw5c@u+)V-!MLA66$> zRV$Gg#f+Ja^_>Y)?s+7JTH2`WyU}x)hq^5@@)~F|y@Nc@33i!nd2cQmH!q9YQKpRR zloNxvc{>SIrpu7n4K-FTtZj3RIcvSHROXELRXwuA*O!wzj;CdnUpZeX1SfxiF}lo^ zyuHl(uB@b4{`f*|y)*s!t9$n2SX;IXU&p7mIw&MvL>VoFVkak$QP;@$=YyNci3~tSuDLd7^4Wr(+HVP@!|DUk1TwwF<>UiV%t7g>UVNN6`ks2 z*C5Sdx|Gp;aB*eQjiG=qFjJ!DK@G5&T?)d$4JS@~_R36)JmiHi;}df6gYj7%@u7>2 zB#*K)F05;h7LMTuILb9@S55!h?|KG00oC8fV8jjO1uU=Xunu5)3l=?oFp2?Ge5>{+ zK*|PgZ6Me{@ob~&O250W8|YPPF{6Q$PQ8avIEw55TJ?1N0I;AOYb9d;b*K~I3-bL1 zKmC_??35ydqF}v_-{r%P@$BFsc$G+Lca%oS4(+FPW)){JCVnjTWyNPz^tVLof$Mx^ z_)#$bIW#GD42~|ZVW4+779s)5A>SjpCzOLbHa0C*gTjYKykQ2}S<1@)uj>vH;W?Q)BIpPGs=4r4n`>nW+PNEP3?3cE=J+<}iPmoEuL^ZcgQ*!|uyR6oB~EoYZ$EIo0viG6hk z0N@ya*6{T8q|%@>!+dnIriraIj@YE{M2G0nD1o{gWcT=cpf>@os;@#w6mo8U;k?U5cXkxd zHjxkda=iAnOw^2M@+=-wY`L!0%2vR_#0M?L^zdEo#0^$jE3)*}#YFQ2nC)-v6Ui-Y zv5TvK!`IJdKOT|hOO@L=SC~Oc19T4bS@^6{{RDjH-*pP<2u69LrA9ynjN9LVysv&3 z6**FM@wx{4hP*j}5nJt6ggJDBPn2Sbp6qQ{Ro>#(*VB0t9t}t%+JFdgm>**Xabmta z!XsaaABQQrOiWjQeL^Z8B$(Fez1NIqyX3uK+vz3NF*yVG)kv#DyU);5m&@;3b`n0b zHu0r690Vlj?$uvF7%1t28J(JarIWYU<&K_x2ns7OO5z!H3AXcd`2H{R0sq41e@_2G zrYkmHk~Z42l%>2VH*j-T)T7YqG;mq7>zH9bArD^niqlCx9~3qSz)p=)FG=dfJ5Mt$ zGac0{?17W7+nD9pi(e#wN6{;#g>f3Nng&>=SAe+M2 z7>0Ho;f+9;vdc;RPMP}Yn;aPjm{KWBs$EX#P)o?-|tO+V72`E(;(kC?KdHgwR9pQkL{2w1g&vq7XU( z0RbU`iXbJlgg__)(mP5E9aL%vMXCe>NS9uv2(nI|{q8gGUi*F4%>H!doSE|>ncP>d zOeS}(|6TsShAK+9YbexNT* zadJT9mcXb=u;4bUpz&3JXj-gpUxG@+4u@u>S8-(C=Kk%?qMRi>gnzpL{A02-A z?wtB;edBbSQX^lz*a3FY9OS{(!FwlY9G9!Ojo-bI(T8ALmBD64WEszxX(10yijo-Z zehedBX-@NRmnEa{s>b|QIecZu*Hbd6xwWh`A=yJLd&Gr?e2b8oQbQ}q0lBDIvU5TO z(`BdXkQx5!LXQplji$Nd&s}Z{Zd>y>p3d%5atc$)%P(|?BGP*5B;;t&2x|kHS!OOK zT<;Wvol_5ENOYxjJB5U4F&X~?GhRMST6lbo9(8ljK`NV?9)03yyFX$1GWVR_e)=$q z8g(wIeI#Ntx4!8xsAfIWUo#>(ub$xIrL}N_{OP}~`hNfijRKP#9|a{%duWKafpF|J z(>;c!<*4+8%_{boB$ow9Ek0?XOswb4eR7F3OBLTwP;~sPfc^1X&1egghuxAVbq6j^ zqq~7x!lL8-zfqW9Uw9!0Qh+7nQf3b%WYGfX@Li)rSE$P&Bb#bH_|&Hb}X&i){}6GQKNCCAr>P3*K0f_CdpM2~zZA6PCkb?jss;ayx#WMQ=Wp+&Cc~Ur!ER zakmj3ccZ8>^#`vPx0*GoY-NU=+P;qO7=x(jp{>x3nAzxW{8!JzM0~tE3QK5V%3VKoXQ?b;BRVok+T(dletDyX=cU z>#Ezv8Z`DIt;hk&)9B~S*r4x%h@SklEu)`&BK6o6V4bIm!AMMwf`NDq!iCzXyHS@j zrC(sDa!6+*CnPcvGIHI_1vY^KWwmJTvasOz3h>=zJKkHu2+@XOAshR|f%;Wnf=jI06Tn!4W#?mkjDT0+2X_^VDj@QR-AVeC8D-su1V`9uDNBbw> zn6?^QVaBBePkh{V6su5gt5^(1D%rGDZlg5AY+l>p563XYDbEzat+I~H&jx3RjCO6i z_no~3l7%I>TJL&zrQ5vf%g0{`6kw)P2YMv=%gpQjtIT&cHh5UhA3C5N&&{ z#6IhOBD{n{hQTv^-^|dQU-F)PGg3_0}e$95K7gKO$01boAg=B-=k(APpIx~w~ zd<{pwmyAe(TL z?5q?UU=M)^M3wIOg2N^Uv*4NVUP1UxrZM~%Q=;7fa z&)?r4m449P1&Aqe%8Znu|V(>BZB!6HCp{LZvr z?t){;BIXvxBeZt(YjdZ5j%SbE`|5@`;V(n^qT%{A=_YOX5L7PFMSz)7-!hqsLB=~9 z6>b3%OO>U5N)jB*nV$0Zhm7?YuLCnoz3(5O+#K3~-X&SPuawC}UZQ)PCB>b#k)|-F z&H{sA$uB>bO{$FDdGde^mKHO!s9{v|C&tJN(ghi=uF7vm=3OT3ELrPwTSIbqr4Mhj z3epq5rNB2>O-&*beGMAOn@W3n2mMl31F{^oMmh2GE~`kZyv3I9Mnw_T>aLAg1~`%nrR6HGo15Ihn6*)Hljy#B^0fKsSu=!3%H%<%{8K z&;9FK*UnP=qsH`I$y?REm|H!1{ASsZh2jULExVS~1Iw?2sr4`P`JBG%RJ+4H=(qJ6 z!K=1dx|YAy4{hTg$RozbR;GHLn>o4BBMpZmII(=kAvB!#mwttJLXGChfb^K?-m`3& zZabj1-bX7@=nd~$ZGeb)cLg56E@;Gk>9}@K#DY7P1jD}kWO7e_sT<~QphWXJUM-E= zw(euw_w|yOGa}Cnzc9 zg=`RcN!=}nQoRGa=ZsURc6sBtxw^p*WApX*43%@d^baDX1nwAW(g4S;ueA~v8`_ph z9X2*X*!z=F@Vi=8wYn$w`m}>fJ-A4`W~be2qXJv!!%GSiF^RVHv|xo7A5Onef-@%EgQixi&;8hKBsj)>t6iRpz8vsle z6ql7C{c5k8?7|Zl)za;6!o`T5w@z*q&CsIZ20jtkvO+x%^2A}W_M)0}R~Ki;N@pK` z7_ihMc=?E_UnP4u?;sp+qS4(MPiDT{x3gYF;KYY*z9k>G7FZIQQW#^c{RG|Pg4nQfJvI^XT8D}Vs@>B4v6=`VyX_q)5Pfcf4Rc_Ni{z6MtW0(?3V@kk?MsSFuNK>oc+YE|;o> zAn-}v*m+p@2zoO;g4|}GV{V3y+LW?2ly+FWvG@&9vA#}xz4&Lh>$je;Y$&6gsZcJv zhC|m4WVtnoab;WoQmL<{!Mp19N=;yOBRNVmm<#Fs`Zty-jQ=UK7o^`~1MlB1{OMsUhRx{=x2t4WG>gQCeTaM^nGQV?~Ne zr1MI1nQRK?es03n3K&qaw5`}Fbg8T{Tkv4^sqE~Uwv0Xi^KiMraJmd^-g}aT(Q6UC zve)c~B6{EDcW`>Ue9Tte69c2Vw-N9ca+SIA*k(}4SdZhNa zDMpH5WVy;*2e#4F=IjCTM%?lb(CkjKmH8)6R zw77o><_aqD$mV3yAGLZw5&~g2dfIwq%3J_HZ1{z*=dV{O6wB1Uk|Ff|s-sDjWrHeG z0N;OaUnc)-coS@$_%0%OpLO3`=H7H_btVZQ>z**#r>*(tb#SS$tOKIY9B5PN3N80Z zdBE$P(5hCdiWc(V@P$B;0-s)SnF!d1{IW&%U3=dr48hD2$SxyCyP1vc(G09*7!)%3 zcc^xtn28Rj+<=E;uJ>M+z@ASo4J10B-{{L^Jeg>F30x%kL{=!DLu#@TS0t?1^cP*5 zG+)ph56U>INVud{#I~=lB*6>zy;W-Jy2CXy4nJsb*OMBh({O}CQaqxp%i4m6IAr5$ zIihK+`1ZT|+RYqo*%&wsV6W8kV`mEXT#*kuAT%^-N1=#Vwj6czBjDak5J*o)%_y0O z7Bm4rjZRfVS?*?TxJwW?%cGlHtVoz8zN7WAvrFpQY@GGmpwSnMYFclF??9UnW!Oh> zQnj}L61mQ+{|1|*;4144N>jWdo5iPzbdeTk76OB->)28&trxkUxM0nYQl4IU7MjYz zO2W-mG`plY#^(zu`mI2{M%IL98RN$XD$!`=MBpFpUyJ$NGzD^Wu{w^YZsil|gTlvQ zs$ZPsX)X$W9{za+&Gp>ka9;S$+Q<%r2jX5U^6bwXmK5X77jJzO7p89T8Y18ErC{sY za$m%CKF4@N2dBVUHi#rz6P;sTfSq2Uc>%v!9_Jn){I?1`_YYtXTL$$kUzQ-)n- z!>T2bg@jmk9*)z~74YvJY#Z4%y)Iit%f&VY-QC?C-GEJ6+`rxQ95kK1U|>APdskXI z(=G@D2Cui6W(qtb7wfyK)b4^hj6~U>`p=d!7o>M623Zrwx*`Sh1ukamGNHwTS6g%@ zWUtkTy+1at5V~UV9E+VuG$|JJQ4yRL)8@m3C#(p=ZzX0y)W2rKZzaeS34=Eifm#)~ z2y)i(1#pSVr=I8w3ig7bQEQj)=uVtaxYaY21e-fdez3G8JN7$`T+7X__g5<|e zp+(=|twz%^!Q{nR(s7e_UEog1y~u-&6_FJ`oY10r<69EXxC_+SHZO?4hpn$eegrE0z~sW;zf z^=h0qMXO~7e6`}n`^^!!`=WwVy^A1k@H&v zc+>}|`e5H+Ce)~C^_7~uc%c8G2jcAdjmzOK29b{5_Bfb`$MG}1Zr;OV;8YXq@)F(l ztkNmRz3eMPE~@61<_30#QD!y}z_uC-jYg0&h634unFIJ0Lf}+$PhlapspxEje!(GY zczE|o*RE;B(K+KQxjMms%}(49B`B<@*77NlCc+*cayYxvaqfi-H?vkJ^e5DwQezmM zY731kW2*k$Fyus^EziW~!1|yi2e4TrIFlU~wMU8V*-(RRzVq1n%wZgm(H2eM{mLUR zr_&pPa18E^D9@YdNwO+@79SMADJ{J%E6}b}5dN+v2`dK4M$|YeObeYb`aKbb5{;2+ z8;p@mga1rn})|)Ld5Kz z?z{c@xYf%0${x(seQ&N-=MvD^7bKM!ei3@14zLG{nV+(BKFLK~MDheVZeJ;&_ofMY z*~(S;P8v{hP)XB7)rm`a07j+KdAalnH%AREE;&iJjgh$OtC6oC9%O2F@y2!&os z&yig79J}@+bTH{;?~ctMI!*3cDuo+mYa`YLA`etL^&>9+ouBZ(y^a1>uynU#Q92tF z^m=l(4xQqNx7kPFfY>wAWce!JalpFx>~hrumEIk=d|aT)UB>$dzyEOJf(7oY|5WT& z3nh$iaz;1#Suk@10q*OF9u!jQqLb8Vg!e;J`|?Vi?GP4;-I{iR$ePO@P3_6y=dI0!yTTO@)=8#%!y!IpY?FTQ@2Gm`n;06wO(Dt zQ@qleI#-XUOMHWL3EV*w)I$V<+Zb{{&@QmJht{o8SZ|pd#B{w$44;YGgWD_3v)s0{ zc34Wvr@FLrt0^8MC9N$YC9B64Bl)=yL9Y?S=^Z2s zCgC)T<6@(TYFZtIQ}0)*@tlOIcTckGVEgwP7!IwB>Kurwy`&$@FMEGwY_9f1k1&K_ z6@L4L;ahK1ipM*ehJ(GhA;Gs2{Bw#gTcyRGY=nh43BZ z)qVjVDZDur2Au|dd0+Hhb)Ef|c824(srWCaw{(U-9g5ijP8KdQ`lLAr3#HbT+~zkO zPB&PUYpMNK-ldY+1Xq)8-RLZ3 zhj92->5n2smI=%fo%RZzrQGfwE-V%)TL{qVIAlArQqIh!nG@#L%5pF>KTpY2=l!L3 z?jw_E!~#UITqHRbdR2OQrPVRpGr0u^j>3zGAozc{IMi@&FYVA08Sr!}ZH*evRO^J~ScN<05bDz@_ka?Wl;k z+7FBw*+c%WKZsSnPLfFpQ23K?*waFZG>xXI(yjoE)BuYod{$2yH@ICYav$D z)U33W;4R2;V8#}A7sFAR--7<_ZQQS%J=31hpR;J#i@4EkocAw0u|r#>r#%1y_fJ5j z^Q>o~KQgHk$c$W7{;4MZx;u@vY{50mGYK$I2iMkEkGXG)#~!VyHZw@Ympta>))z)9 z3a~6dzL*qHrj|TU`C3eAiv#;K9eTrKFx7On^?7sG7ENP+=hXvhkJOL3gJb;5Utym+ ztL4x|UzWzBd#TbeW_DxMofKwwK}OcZNA(1o8t@-6J>%EzFYG>pZl)479uU+w66agr zxJd6^8Zl0w#zTJbu8e*5Xt*PZn5;{u!q}#Aip9&tm%y2t1e`9W+iqE2QBlgotfzwN zMVvyRltSx<3ynSGs&Vo2Zs0s;OG9rON-ZU&`c{Kve112uH0?6EOv3en(2j5=&G0so zK1J9LSSq5!%2}WCVlu1!Bh3NARjpcjTQVU}Rzb*XP76ozQ{!FfO|Bo&6PKv`&|zyO z0Bm)wor7Xn6SV?Bm$ffg2L5O=`Y^n(&X+>Hr1L*y3N)ZL>O3`t7R9#sNq#zJAAm7hp20;L~9;-p@dG~A{85lHNv+1KhK+U~ z$8A!^4*~xK0NC*FtjD7FhXPePSy#<4%~5rWZ`D*vIJ?*zgr|K~C!?U|nsPl*^raiN zAihNG^V~D${yftG?V3}@n{WF|ywq1VdDQqx04+@?w4i4e>BSE?J)?RpDsj)<1y=N+ zkmhHHj$~85bE&A*mDrrT@!}6G4+HOHI*47U{x3S}(~-wU?`1)AC>bO66O%}W#QRP7 zNmpt&`O_JZa(3g=r74RCUMPFV-53M?q`lw4P*<})IhzIIAP~4ogC7DO)BecPVu=^2 zUn;dVdj%d3f8tL+C~a}>Q<|H0AsSyujwHpV#jIQp^+wy*DV93O zt?JV64P`y<3PgSz`k$33A$&IYnW1aWl3Fg>3HMuw??Z0W_0s?bR(cTTL(@6;s_3k- z7=_=G31bP+s;5Ii;~S?n3fV^>V#1Wu=E|Ji`-OI|&Z0Ts;^soQ|I?|bEp_v;?B9?d zf{ToE(R?k?AmssPg{VeDI~BZ50b_t+fJH>!SGumv`(8D@UGEo->L)8Y9o|!e65w1~ zFKQ8nu3_&<$OT1`gR|7pA8x842AqCLU6&Ar<>mH!&tnlZ9rcpGH2k;hX#3R{TPXK_ zWT#ai4gVyGwm2RZYd*)LQ@bPi1hBmcgQu`kF+V5mz7dgqncp`T?QQV+O8uHb26r^^ zDm;9|+VPXF!%$JPeOnqr*Q6=->c5o7KR|P|8Rr%z;q7(K@w@My9Q284rGDP+jyQ2$ zb~wOWgZ0IWUIt)ia?DHog5I>xR##6Ov75Lf%Z2mD=SCObYQN1FqW35eL0zQ!kVGk* z!7TFBf#N`JJz5Z0S$j}NQ(~;c_zoVyV7@8BOyx^`5CFTm=`i}T$9`iQ8f?cZ=$|7~ zBL|M-91SguXtoyXdyF}{G$}Jca-WDu8Y$&JWJzQ=NMp*O7%Q)~`1^dPB^CBdpBcl6|R>iij0a=#|Ss7!nh4DCE z2t6nd_#G_Hdp<9F>^7r`Yke6OXOtq*r?ty8)*FvL=IW8Sbo1NFw43W^QdyTMf0qC? zy5JGi6=LH=s75(Vu*4&wfGuVZoz_>i!tt2u^b}LJpITa%wPg9d>w^o-nblTkw;vp| z8~~FAq2Ut}mvtaCa?MUF$gs^!>;Bi0#-4`GPEeRzG`&c^R@52W-E+%T4stkkmAdF(^Zaf!=AP_R^Yd^6M1q#TfM zZTDVvqB}0-3b;&Q(=t#YmO6dQ3`woXZA}mN8x2XNyjX46Eu(&b>XfsyMH8wELa9C z5nP4Jv$E*xch)?ql5#W_;Z^N~vp8y2Z&e&&b9>`DAYO%~hkGI%3eAk4&C>=SWeElA zROTHiUK?=kQ9mWIupUU0R2n$V>j{zUuihxh0>1ocDb~u^Be06*RQvTeGi}rh83V8! zs8;{A^v#S}l)9(4Q%SjVmN!TvoIyIzB!8sE*sw+b=(U!UF+-nE<MCx@eXf4vXWUa7%FW9)4>1}AD2S>Hiwy5k z7s-*hKfBWc&X;&b+igh&jVXb*j=GE6)qnhJm7EI;B*ZKy2W8me%v)GGT7hlwXIDI>c`B{s-_NHf$Cd^vB-`M*o0b(J^&5=|!A7?#1niFP{B*dB8c2 zc>nUUYuw94@uR3Wvj!ilQ_aAZdPJErdP~FnnTv=5@0kLFHzN*$4?0)yE-DUnim_W|kbnTG5RP9MaU)z0 zO7MYJ*O3h;>n72=nN1M`Pk=I`gPvX{W)5{5_3TBK+Q#8?Z6*A+;1m4tyL_Fx^EqNW z9vM4ma#1kL4?5hN<}sTcsw>a@_Io3F_&F z`Ue`>|1JkJy-xRGRin2I``e`i7`Nej2JRc%Co9&r4RK7|qVFF@lfxE}Rz-nk%Pl7? zTJWVXe1J2A@qgs8Mz&(vb5m%O+$e^Gl2mxTsr()ew_O^vi4)ozuK!*V0-b z>&&`{vzR>1QuxR#zvy|5aAis8`w6W#qGEE27PSVCcKLi1MF;2HR$bN7P~|{}mgS^P z|G~&s#~pq02Bhzcxs>qxGJVs^vO^ir&|h?TcQh{Y!OtU2P=7T~{y|{$olPz0&zjMb z?p>&SOBdxBBH0C1%@=_|@-C5$Uf&JdbU3?&mMLEo^5zw)AX=ncb~kBEW3)IBb?tkW(SIBu|MN-h--~p7bCsOMGUq*iunG>) zp8#{bdDY0r%8XfYU?xKqzs={&+^4~ZP3BIK>XQx=uYuw3x|}n>Rtj$v4=(aV?EJ7V z@m}_}dOIE4-cge6uihu{73VsW^jr9W&Hqw8qS*Eb%p(FGxP~+qg?d(RMdZiXoYVJ1 zjP*Z66TlM|@8cIs_@q3|;2wGr9lGd;T;Y}g$vG9^%uZk8ev*^vYfNul<7g5#CJ@~?A z3Th1&v9^f)UEj>15=moq>_b=f*mG>4)z6>CU6@VnN%}Rss7Nzz%quX%TN`yuQ zfq!w%EU}wD_xif`aR8jZ+x{%FkX7nt?bFitiubf_zZmychN!f7ZIy=07&}_U1`jKX zU;V(evRnH&Zsm9F`*Lc)2i>X#AAU3M82p)Uv{d>T?JNfL<5*A=j&Xy=b)*OWx*Aiv3*}(b zd?PON*?C^m{ZJfWHa+X{C@wXs(8mc-f49I$uOKm>MN>C+=mzx}_BpeT3)4q*04FYw zy~!dGJb?asfJ0zMAGlm9cL2H46n;*_Q>|Y?6xIpV=F-3DXlPN_3?pytrXpl^i>dcO zoL5pGFHZI0pW29MI-~714-uqT>=zVu4{$PdQO?6`B^_@Gvf)F&jLotu2&gZ%G<^9- zZg1~^9YnVlj?ejlr=|a8v}^Re%`51u3CX+{Ck4_htlEqxM>=$5>qT|%Mm``;Vxq(D zYzdxT8JP@{Uy`Eg7O2C=0yT-N2*2G8dsnI%jcVi`Xb9gPW`CSmMN+kkU_SI;0=;>}wX^_?r5>%(D9+I>AQogU^H`g7^ z9i2wN^0?L}Qx@_?I`eTb{49P#$YJ`$36srM_ZZI&sL_iyz15qmbYC0L%A_K0b#ta0}~b?7a=zWWGeJ5@?Xmbqlm-Xxw`NO0%)1ZgM(c-v1I`=dJEt%VaMFKDRtI7Z?Wk# zGT<{#;xS==J|zV{+@QpT)yD;tXtQ&?ezd=Q3zoF5--& z2RaE;rp#2xdSnDO9Z1z1I-yVphEmN<=}T8Xm-dRUty`4mWh#N-&3IozTf{!@9Etw^h8Tx)vX_V1%?$caa ztQA^!S`bsmFV{N<_(c0B{bWy>e&0(ljk{}Q5i!W%HaHVMRB1k2)Lxy)QxoJ`O|?ks zT*(3hR>SDy+rB7~E!Z4j%@e%i!xZ^AI0Z>i3b1#Iogq}NYz;e-Yp+udh5;bM?hQn$ zOR&ZzT~sblr40A8Lmt4VZFmDZ@4!NOrSc;JTQc$Nw`)5&(}C}-p0mbP)xz&m(5SLD z>LYqLHOZQ6>L%>=E)IqvyiVwS7-r6?f^vVR`G%>bN7?U`B@nM?XZ7 zrV->7V79RE#^GOdTo2+zi%bMQwY>gb^y_a2zJE}E&^p|y10UULBt2c;Sd5!=*Se2l zjm=tMY0Wa#^TEU+!^EnO>+j%JC~Z8gS0z(l8EeXUqN;hKOg0WX&1>oyuO5%qvz%Qc zH!5)8!7LoP1)2g0){loTa$M02H)n=~gRTpWD3MECI%6(21SajFkJupA5>CZD+Hs(tM}kgL?Ub5>v+slT`TlzB5! zS!Cvtm1(e-kE_&+;Gfm?#-0o=;@`7safCQp;z6}y_hIJ5I-uufxC^^U0u`O}`9F^! zJEgnA!blJq>U<-Tn_e93{!aXiBsisZoiENSbdjQuM}ZcvE)~cl3+!i;H>MFh)rBMb zf*8B{>>pq+(g&R7`f*(O5;j=DrDa%`xLSVke5bjHM0En}Wnp!)2~yi@v8~XHLAEem zLnQPkwMO=y_`0JjFbm1xfpf({9&&7Q@0R{;E1@!GFap zQH865)<>}1k!%H&kLbzYO$i0={z}Z`o3Xm-3Mhqmd2=M588pbx39GyAh$_@=368ISpMmYYOIO_#%aR5QI8%_Iu?9a)}a0 zVWz$de|CGC7asa{M-ou!PpEOmqxX3F)v3g_kLR=6cB{IiLXosw$OYyplV$g{Sl66; z_>>4+inzjyzM^*3mam5fJ(5P~b%(m&XV%TlqE~&mD{CyHIxobTj~jjR_W?Kj^pa~| zlqi3jS6z1es_0Q`in;NOa2oqaX^6?Su{%bkqW7iU;3t(NoJ=aIJC-=&^iD>!uWEZ| zJOYs@{4c|&+`7bmjpU^|_X9UnWwTl)&v=I&|8Cm&B1xjHg0T*5(;>qq_hTb#!uVCBN%gwUDo~;8gF(!_s}SDu&^2iEq?<9dQ09GH3P0lb@;%6{3>Bw8mn7rI zplvsOf{^QBV~d`u$-TpMCny{k`YiIA5aIaUB6zbL6%oyln8cHRtT!GNBRu3A#8=}3 zjowe$F3Q~pb2i6^KMEdo>du^G=`pnXQ3(nw8V!9wSy4Cq)cwMfy~|6J=P3Xm+3lYC zK*-s71|koTo2?ARKflU>_2-1>9spDZ3d5DEigJd4ix=-r4g{UBa{cyKZGA~|8usYQ zA$yJ11@oiNU`Bob9ofR@?%TrM(JWV5>`rJ>8m`+q&y5QIR=t=1$)V};&7Q@FQ6U5Z z$OV@4`+D2y^Xp)%tffXktwZ+^r>mY5&N)yy6u4v!PU?iBkS;3Zt*EklV>=FRPeJ() z^B?^l(wobZxXY`myOrhrzP5hT;hqb^XO?e(RIAA78DgjDMsfkcP{W2^t|*x;>AWzp zi^vn?Fj!Vh@AlBl$3lEfs=wmZcDWh8!<((jzM1M%Iv-m(KPD{~p}s(0FTkd)=S(QT zo5_hPbDl=k!ssHs`k!wLF;O0$ofFpd?;y*)m(*!Q5*jay)He0$QQ%;@y4DF_a&#it zjJPJAZ>K->eDOX>pc|<>=`A(mW%O)^p+WiWtn9Y{8D*REIbig}5N@~+xD<0Q+Fm2J zGS(@QrVq3IgMnM35I|WJ?98?@&sWA+uvUCnJcEp9xaT^L^eu)^x739#Yf@2PU&Oy6@?`Eo={F}i6NsFVfP)m%+4@C~N za)DN0gU?=;j*CHES4ox>TdO(RPboK|u`$5?qG40*?GK%6g4U6#W(z1pWzluBhw<7b z_!ql`aGdIW-nT+jHAPYwe*Af@?47=<+s(X8Qy+VAnSdo`AER~CySMuaGdI35 z??#2d)8Gg`tWt{|?8u#NKQ-O#fO(y58<=DO2QN4p)+2x=tUBu!CU+uBHfx5|cu{atx)a$1zk%t{%}NR&JLVO`wh8vAb2 zN>_6~2?y4sP$C=;+k` zz08D$oZcx~0>>8$tr+Rk5(sE0_1Sfv6{)n?%qr8()7EK`rz)u*{1?x*>r{iZ+EX~? z0f*Saxb1yLOirFKj&Eop=!Iga&1HTOH`t4XS)j=a)HGVq zUY_xe19ix5fszv@h?=~JNf5k;jYl=;XB(x zWp05I-RAbjAyCVkq@1<=@CJKQY}ua9iZjS7#Ygvpb42%{1N$|>gB<{L4{A+o;!Cm>J1g~Dumnf<)(UpZ2s7(E(8&Quo zX#?Y+NRJ5pYQ+0PDV6TS!{dPGDa~U#c?LkOn{0(4E+&xYpt^KofEVfT*K?0G>Z;oL zllit1MNjwr9M*=eqE$~0@1K18o6IcC!_-h5-1gP;29a#lVVj&CQ1jVV54(sDF={5Q zU~u;L9O1I0nZU-&Ycs#XI-9$sL~w{_+lK)!1@k%!eCu=#Bbi^uiK~VX*dBmg=(l;# z7u^5*mFCC%SV-F5n}=5v`Tng^csxeff!Q9lLpEctm%p=X!fJPx4RzB&1_e(f{Y+$r}o`(wW=hwR_awi_>e)TwK|d>A&ahQ9Rs zv)|>%Gj(F0{?~`!1b=V5OpyuM{fmyfNAP+%{P4zw{r|Q^|8w)dMA-lP3ICJP|IgTU z{!f0)zoaZ*39n}PcmHRz|6vyQKb;5vVgA1z{{L-V|Igj>|AejU|M{)|Zsh+>>xA-u E0atCj7ytkO literal 0 HcmV?d00001 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..437d3b8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": [ + "ESNext", + "DOM" + ], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react", + "jsxFactory": "elements.createElement", + "allowJs": true, + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "resolveJsonModule": true, + "esModuleInterop": true, + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false, + "types": [ + "bun-types" + ], + "baseUrl": "./" + } +} \ No newline at end of file